docker常用命令及相似命令的差别
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 kill
或 docker 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 来执行删除镜像操作。