镜像提供容器运行时所需要的程序,资源、配置文件等,是一个特殊的文件系统。是容器运行的基础。镜像是多层文件系统组成的,是一个分层存储的架构,在镜像的构建中,会一层层的构建,每一层构建完成就不会发生改变,后一层的改变只会在自己这一层发生改变。删除前一层的文件操作,实际上不会删除前一层的文件,而是仅仅在该层将文件标记为删除,实际上还存储在前一层。因此在镜像的构建过程中,只尽量的添加该层需要的文件,任何和该层无关的文件要清理。
镜像使用命令:
(1)镜像拉取
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
docker镜像仓库地址,地址格式<域名/IP>:端口号,默认地址是 Docker Hub
仓库名称:<用户名>/<软件名> ,对于docker hub,没给出用户名。默认是library,即官方镜像
docker pull ubuntu:16.04
(2)运行镜像
运行镜像,是以一个镜像为基础启动一个容器。
docker run [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
docker run -it --rm ubuntu:16.04
-i 交互式操作
-t 伪终端
-rm 容器退出时立即删除,默认是不删除
(3)列出镜像
docker image ls
虚悬镜像:是一种特殊的镜像,没有仓库名,没有标签,均为<none> ,这种镜像是因为镜像维护,新旧镜像同名的话,旧镜像名会被取消,这类无标签的镜像就是虚悬镜像(dangling image)。
列出虚悬镜像命令:docker image ls -f dangling=true
这种镜像是没有意义的,可以随意删除。删除命令:docker image prune
中间层镜像:为了加速镜像构建、 重复利用资源, Docker 会利用 中间层镜像。 所以在使用一段时间后,可能会看到一些依赖的中间层镜像。默认docker image ls 列表中只会显示顶层镜像, 如果希望显示包括中间层镜像在内的所有镜像的话, 需要加 -a 参数。
命令 : docker image ls -a
(4)删除本地镜像
docker image rm [选项] [镜像ID/镜像名称/镜像摘要]
docker image rm nginx:v2
docker 镜像的删除有 untagged 和 delete 行为
首先是会按照要求取消镜像的tag,但是如果一个镜像有多个标签tag,如果只是删除了指定的标签,镜像还有其他标签,那么不会发生删除delete行为,只是取消了标签。当镜像所有的标签都取消了,才会触发删除行为。因为镜像是多层存储结构,再删除的时候,会从最上层向底层依次进行判断删除,当其他镜像依赖于该镜像的某一层,依旧不会触发删除行为。所以可能会看到删除的层数和docker pull时的层数不一样。
容器的运行时建立在镜像基础之上的,如果某个镜像的容器还存在,即使没有运行,该镜像也不能删除。
删除一个还有容器的镜像会报类似这样的错:Error response from daemon: conflict: unable to remove repository reference "nginx:v2" (must force) - container aa59eab5cc29 is using its referenced image 97d1bffd8e7f
原文地址:https://www.cnblogs.com/xiaojianfeng/p/9378658.html