美文网首页
docker常用命令及相似命令的差别

docker常用命令及相似命令的差别

作者: jshan | 来源:发表于2019-05-18 21:05 被阅读0次

    docker save

    docker save 命令用来将一个或多个image打包保存,将这些镜像保存在一个tar包中,例如:

    # 可以是image保存
    docker save -o images.tar postgres:9.6 mongo:3.4
    
    # 可以是container保存,实际上也是在保存该container后的image
    docker save -o images.tar postgres
    

    那么如何导入通过 save 方式持久化保存的镜像呢?通过命令 laod 具体如下,注意不可以重新制定镜像的名称

    docker load < images.tar
    

    docker export

    docker export 命令用来将container的文件系统进行打包,所以只能够指定container,而不能是image。

    docker export 的应用场景主要是用来制作基础镜像,比如用一个镜像启动了一个容器,然后在该容器中安装了一些软件和一些设置的情况。
    docker export 导出的镜像文件大小,小于 docker save 保存的镜像。
    docker export 导出是根据容器拿到的镜像,再倒入时会丢失镜像所有的历史,所以无法进行回滚操作(docker tag <LAYER ID> <IMAGE NAME>);而 docker save 保存的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)。(查看方法: docker images --tree

    那么如何导入通过 export 方式持久化保存的容器呢?通过命令 import 具体如下,注意可以设置镜像的名称

    # 直接倒入,不指定名称时
    docker import images.tar
    
    # 倒入设置镜像名称时
    docker import - new-image:tag < images.tar
    

    docker images

    • docker images -a: 查看本地所有的容器,包括中间映像层,默认情况下过滤掉中间映像层;
    • docker images --no-trunc: 显示完整的镜像信息;
    • docker images -q: 只显示镜像ID;

    docker kill

    docker kill 命令直接发送 SIGKILL 信号杀死容器。

    • docker kill -s KILL ${CONTAINER}: 像容器发送一个删除信号,其中 -s KILL 默认可以省略,疑问 -s 默认传递的信号就是 KILL
    • docker kill $(docker ps -a -q): 删除所有的容器

    docker stop

    docker stop 先发送 SIGTERM 信号给docker,允许其在一定时间(默认10s)内进行一些操作(例如资源回收),若这段时间内容器未停止,则发送 SIGKILL 信号强行杀死容器。

    docker run

    docker run 从镜像中启动一个容器,创建的是一个全新的容器。

    docker start

    docker start 运行已停止的容器,例如我们通过 docker killdocker stop 命令停止了容器之后,通过 docker ps -a 查看到状态为 EXITED 的容器即为停止的容器,此时可以通过 docker start 命令来启动这些容器。

    再次启动的容器,会保留上一次结束前做的变动,容器的ID不会改变。

    docker rm

    docker rm 删除容器,但是有一点需要注意,在删除容器之前,需要先将容器 docker kill 或是 docker stop 否则会报错。

    docker rmi

    docker rmi 删除镜像。但是有一点需要注意,在删除镜像之前,需要先将由该镜像生成的容器给删除才行,否则在删除镜像的时候会删除不干净(还保留有 IMAGE ID,但是 REPOSITORY / TAG 没有了为 <none>)。

    另外如果通过 IMAGE ID 来删除镜像的时候,如果多个具有相同 IMAGE ID 不同名称(REPOSITORY)的镜像的情况,会出现报错,报错内容如下:

    Error:Conflict, cannot delete image fd484f19954f because it is tagged in multiple repositories

    此时正确的做法,应该是通过 REPOSITORY 来执行删除镜像操作。

    相关文章

      网友评论

          本文标题:docker常用命令及相似命令的差别

          本文链接:https://www.haomeiwen.com/subject/culxzqtx.html