在Dockerfile中我有一个FROM子句加载基本图像,比如
FROM mysql:5.7
在mysql的Dockerfile中运行apt-get update之类的命令,但我不明白为什么我需要在自己的Dockerfile中的FROM语句之后运行apt-get update?我知道我需要运行apt-get更新,因为后续命令失败直到我运行apt-get,但我认为FROM镜像已经运行了这些命令?
答案 0 :(得分:0)
查看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的当前状态,然后运行install,最后从文件系统中删除包repo状态。这是在best practices from Docker之后,以防止两个问题:
常见错误是尝试使用两个单独的RUN命令将apt-get update
与apt-get install
分开。由于docker如何缓存层,如果apt-get update命令与很久以前运行的命令相同,则docker将重用缓存的结果。如果您随后更改apt-get install
命令以包含不同的包,则您将发现该映像将无法构建,因为缓存的更新命令指向不再位于包存储库中的映像。