【发布时间】:2017-07-24 23:18:56
【问题描述】:
当我从存储库中获取 Docker 映像时,我看到它提取了一堆带有一些 id 的层,但是当我尝试使用 docker run 运行它们时,它告诉我它不能找到它。
我可以运行 Docker 映像的某个层,我可以通过 docker history 看到,就像古生物学家在挖掘有趣的东西一样?
我尝试了什么:
docker pull ruby
Using default tag: latest
latest: Pulling from library/ruby
693502eb7dfb: Already exists
081cd4bfd521: Already exists
5d2dc01312f3: Already exists
54a5f7da9a4f: Pulling fs layer
168cf3f33330: Pulling fs layer
021d84fef638: Pulling fs layer
168c3c107cd1: Waiting
f001b782a027: Waiting
然后:
docker run --rm -it 5d2dc01312f3 bash
Unable to find image '5d2dc01312f3:latest' locally
当我提取已构建并发布的图像时,我突然想到了这个问题。我可以清楚地看到一层有将近 1.2 GB 的大小。这是我从用于构建映像的机器上复制一些文件的层,在下一层我清理并删除了一些文件,因为我正在清理映像,但映像的总大小约为 1.5 GB,意味着存在 1.2 GB 的大脂肪层。我就是想看看能不能看到那层脂肪。
【问题讨论】:
-
大胖文件肯定在那里,因为它是在一个层中添加的(dockerfile命令)并在另一个层中删除。 Docker 不支持在同一层运行多个命令,但它们有一个实验性的
build --squash选项来压缩镜像层。见docs.docker.com/engine/reference/commandline/build/… -
我认为这是一项新功能,可以将 fs 层压缩为一个,从而减小整个图像的大小
标签: docker dockerfile