运行命令 docker imagesdocker images -a 会产生以下输出:

$ docker images
REPOSITORY           TAG        IMAGE ID            CREATED         VIRTUAL SIZE
ubuntu               14.04      9cbaf023786c        2 days ago      192.8 MB
$ docker images -a
REPOSITORY           TAG        IMAGE ID            CREATED         VIRTUAL SIZE
ubuntu               14.04      9cbaf023786c        2 days ago      192.8 MB
<none>               <none>     03db2b23cf03        2 days ago      192.8 MB
<none>               <none>     8f321fc43180        2 days ago      192.8 MB
<none>               <none>     6a459d727ebb        2 days ago      192.8 MB
<none>               <none>     2dcbbf65536c        2 days ago      192.8 MB
<none>               <none>     97fd97495e49        2 days ago      192.6 MB

标记为 <none> 的图像是否重要?如果不是:为什么它们会带有我提取的标记图像?尺寸加起来还是只是重复?如果是这样,我可以删除它们而不影响我的工作吗?

最佳答案

镜像文件是独立的,并通过 unionfs 魔法组合形成一个正在运行的容器。
您关心的图像通常标有令人难忘的名称。
您可以删除未使用的图像,即那些对您关心的任何图像没有贡献的图像。我在 bash 中这样做:

function docker_rm_unnamed_images {
  sudo docker rmi $(sudo docker images | grep '^<none>' | awk '{print $3}')
}

您可以将 docker 镜像视为一堆“层”。每个 Dockerfile 命令都会向镜像添加一个附加层。重要的是要意识到这些命令中的每一个都会创建一个单独的图像文件。所以 Dockerfile
FROM foo
RUN a
RUN b
RUN c

将是一堆
image=1 (possibly pulled from the foo registry)
image=2 (after applying a to image 1)
image=3 (after applying b to image 2)
image=4 (after applying c to image 3)

foo镜像很可能由其他多个层组成,因此最终镜像是4个或更多镜像的堆栈。这些图像文件中的每一个都位于您的 docker 图像注册表中。它们中的大多数是未命名的,例如,因为它们对应于 RUN 命令。每个图像文件 1-4 可能都相当小(除非它们对应于 yum install p1 .. p100 例如)。它们一起构成了您最终运行的容器的文件系统。

关于docker - 如果 Docker 中的图像没有标记,它们是完全使用还是只是孤儿?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26405897/

10-14 16:22
查看更多