在 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/