我使用docker作为我们的码头应用程序。
它有以下几层:
每个图层的前一层都包含在' FROM'在Dockerfile中的行。
通常只会更改app
和app-config
。
如果我在*-dependencies
图像中更改某些内容,则会在构建脚本中取消注释,以便更新它们。
在构建脚本结束时,我做了:
sudo docker tag app-config-1 my_registry:5000/app-config-1:$version
sudo docker push my_registry:5000/app-config-1
然后在目标主机上执行:
docker pull my_registry:5000/app-config-1:$version
此设置就像一个魅力 - 当*-dependencies
图像没有变化时,创建5个图像只需2分钟。
问题在于拉动图像。即使只更改app
图层(大约100M),似乎pull
也会从所有父图像中下载数据,即使它们没有重建。我需要为一小笔改变提取大约一千兆字节的数据。
我的工作流程中有错误吗?我可以以某种方式优化流程吗?
谢谢!
答案 0 :(得分:2)
仅针对有类似问题的人:
您可以通过执行
调查对图像所做的更改docker history my_registry:5000/app-config-1
它将显示每个命令后的所有图层和大小差异。
在我的情况下,我在第一步中添加了一个巨大的文件夹(很少执行)。 问题是,在后面的一个步骤中,我有一个命令更改此文件夹的权限。这使得docker创建了一个包含所有文件的新图层(大约400M)。
现在我在添加文件夹后立即更改了第一步中的权限,因此图像的大小显着减少。
答案 1 :(得分:0)
此外,现在您可以检查您的图像&它的图层可视化使用ImageLayers.io来帮助查看额外大小的原因。