如果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>重要的图像? 如果不是,为什么他们带着我拉的标签图像? 大小加起来,还是只是一个回报? 如果是这样,我可以删除它们,对我的工作没有任何影响吗?

图像文件是独立的,并通过unionfs魔术组合形成一个正在运行的容器。 你关心的图像通常用难忘的名字标记。 您可以删除未使用的图像,即那些不关心任何图像的图像。 我在bash中这样做:

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

您可以将docker图像看作一堆“图层”。 每个Dockerfile命令都会为图像添加一个附加图层。 意识到每个命令创build一个单独的图像文件是很重要的。 所以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镜像registry中。 它们中的大多数是未命名的,因为它们对应于例如RUN命令。 每个图像文件1-4可能都相当小(除非它们对应于yum install p1 .. p100)。 他们一起组成了你最终运行的容器的文件系统。

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

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

选项“-a”:显示所有图像,包括未标记的图像