使用最新版本的Docker查看docker图像层?

时间:2017-08-24 21:05:08

标签: docker

根据反馈更新

对于等于或高于17.03的Docker版本,如何查看图像的图层?虽然我为早期的Docker系统找到了大量的解决方案(参见this SO question),但现在还能做到吗?

我特别感兴趣的是能够一次删除一个图层。我记得很久以前就已经读过这篇文章了(在Docker的时候,大约需要12-18个月!)但是,我丢失了这个参考资料,无法在网络上的任何地方找到它。我从下面的第一个答案中了解到,中间层不再下载并报告为缺失,但如果我已经下载了整个图像,是否有办法将其分开一层?

1 个答案:

答案 0 :(得分:3)

你提及" AUFS"但与存储驱动程序无关的问题。

在v1.10.0之前,docker会下载一个图像及其所有中间层。使用docker history <image_id>,您可以获得中间层ID。然后,您可以浏览/var/lib/docker/<storage_driver>/目录以查看每个中间层引入的更改,或者甚至可以从其中任何一个启动容器。

根据https://github.com/moby/moby/issues/20131

,情况已不再如此
  

&#34; ...我们不再拉父母了。只有你   如果您自己构建了图像或迁移了旧图像,请使用它们   图像链。&#34;

请注意,docker history现在输出<missing>而不是每个不可用的中间层的图像ID。

$ docker history ubuntu
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
ccc7a11d65b1        2 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
<missing>           2 weeks ago         /bin/sh -c mkdir -p /run/systemd && echo '...   7B                  
<missing>           2 weeks ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\...   2.76kB              
<missing>           2 weeks ago         /bin/sh -c rm -rf /var/lib/apt/lists/*          0B                  
<missing>           2 weeks ago         /bin/sh -c set -xe   && echo '#!/bin/sh' >...   745B                
<missing>           2 weeks ago         /bin/sh -c #(nop) ADD file:39d3593ea220e68...   120MB            

此处提供更多信息:https://github.com/moby/moby/wiki/Engine-v1.10.0-content-addressability-migration

话虽如此,如果您可以访问Dockerfile 用于构建图像的支持资源,您可以在本地构建图像(这将保存每个中间层)

Ubuntu在这里发布其Dockerfiles: https://hub.docker.com/_/ubuntu/

因此,如果您想为示例构建一个17.10图像,您可以:

  1. 创建构建目录
  2. 将Dockerfile复制到构建目录。
  3. 将支持资源复制到构建目录
  4. In this case the dockerfile contains the following command:
    ADD ubuntu-artful-core-cloudimg-amd64-root.tar.gz /
    You can find that file with a Google search 
    Note: The ADD command automatically extracts and unzips recognized formats.
    
    1. cd到build目录并运行docker build .
    2. 如果您无法访问Dockerfile,可以尝试使用docker history no-trunc的输出创建一个,您可能会遇到几个问题:

      1. 您可能缺少支持资源
      2. 可以手动修改图层,在这种情况下,docker history的输出不会告诉您完整的故事
相关问题