如果Docker中的图像没有标记,它们是否全部使用或者只是孤儿?

时间:2014-10-16 13:37:58

标签: docker

运行命令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>是否具有任何重要性?如果没有:为什么他们带有我拉的标记图像?尺寸加起来还是仅仅是一种复制?如果是这样,我可以删除它们而不影响我的工作吗?

2 个答案:

答案 0 :(得分:11)

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

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

您可以将泊坞窗图像视为“图层”堆栈。每个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)。它们一起构成了最终运行的容器的文件系统。

答案 1 :(得分:2)

要删除所有未标记的图像,需要其他选项:

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

选项&#39; -a&#39;:显示所有图像,包括无标记图像