gpt4 book ai didi

docker - docker build 会运行两次命令吗?

转载 作者:行者123 更新时间:2023-12-02 20:16:37 24 4
gpt4 key购买 nike

在 Dockerfile 中,我有一个加载基本镜像的 FROM 子句,比如

FROM mysql:5.7

在 mysql 的 Dockerfile 中,它运行 apt-get update 之类的命令,但我不明白为什么我需要在我自己的 Dockerfile 中的 FROM 语句之后运行 apt-get update?我知道我需要运行 apt-get 更新,因为在我运行 apt-get 之前后续命令会失败,但我认为 FROM 镜像已经运行了这些命令?

最佳答案

看着Dockerfile for mysql ,您将在一些 RUN 命令中看到类似以下的模式:

RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
wget \
&& rm -rf /var/lib/apt/lists/*

第一行收集包 repos 的当前状态,然后运行安装,最后从文件系统中删除包 repo 状态。这是在 best practices from Docker 之后防止两个问题:
  • 在同一运行命令中清理不需要的文件,以防止图像层膨胀。
  • 删除最终会变得陈旧并导致错误的缓存数据,一旦它变得陈旧,它应该被重用。

  • 常见的错误是试图分离 apt-get update来自 apt-get install使用两个单独的 RUN 命令。由于 docker 缓存层的方式,如果 apt-get update 命令与很久以前运行的命令相同,docker 将重用缓存的结果。如果您随后更改 apt-get install命令包含不同的包,你会发现图像将无法构建,因为缓存的更新命令指向不再在包存储库中的图像。

    关于docker - docker build 会运行两次命令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42304494/

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