gpt4 book ai didi

docker - 为什么 Dockerfile 中的相同 RUN 命令会导致镜像之间的层大小不同?

转载 作者:行者123 更新时间:2023-12-02 19:01:08 26 4
gpt4 key购买 nike

我在两个不同的 Dockerfile 中使用完全相同的部分(在这两种情况下,基础都是 ubuntu:18.04),它们使用 wget 从远程位置下载两个文件。

ENV ROBOT v1.5.0
ENV ROBOT_JAR=https://github.com/ontodev/robot/releases/download/$ROBOT/robot.jar
RUN wget $ROBOT_JAR -O /tools/robot.jar && \
wget https://raw.githubusercontent.com/ontodev/robot/$ROBOT/bin/robot -O /tools/robot && \
chmod +x /tools/*
docker history --no-trunc [...]
告诉我在一个 Dockerfile 中,这个命令创建的层是 114 MB:
... /bin/sh -c wget $ROBOT_JAR -O /tools/robot.jar &&     wget https://raw.githubusercontent.com/ontodev/robot/$ROBOT/bin/robot -O /tools/robot &&     chmod +x /tools/* 114MB   

而另一个只有 44.9MB:
... /bin/sh -c wget $ROBOT_JAR -O /tools/robot.jar &&     wget https://raw.githubusercontent.com/ontodev/robot/$ROBOT/bin/robot -O /tools/robot &&     chmod +x /tools/* 44.9MB              

除了相同的基础之外,Dockerfiles 当然是非常不同的(例如,114MB 的文件很大,而 45MB 的文件只有两个定义的层);我很好奇:什么可能导致尺寸差异?可以以某种方式减轻这种情况吗?

编辑1:

这是 114 MB 的案例: https://github.com/INCATools/ontology-development-kit/blob/master/Dockerfile

这是另一个: https://github.com/INCATools/ontology-development-kit/blob/master/docker/testdocker/Dockerfile

最佳答案

chmod +x是原因。每次更改文件时,即使只是 chmodchown ,文件的全新副本将存储在下一层。

您可以使用多阶段构建来创建没有所有中间层的最终图像,例如如果你使用 Python,这里有一个指南:https://pythonspeed.com/articles/smaller-python-docker-images/

这是通用的 Docker 文档:https://docs.docker.com/develop/develop-images/multistage-build/

关于docker - 为什么 Dockerfile 中的相同 RUN 命令会导致镜像之间的层大小不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59894833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com