我正在阅读dockerfile文档。
我看到它提到dockerfile将更好地利用缓存来改善构建过程。
因此,文档建议如果尝试使用RUN apt-get update
,请将命令合并到以下软件包安装中,例如RUN apt-get update && apt-get install curl
,以避免由于缓存而安装过期的软件包。
我想知道如果我下载相同的dockerfile但在不同时间在不同计算机上构建docker镜像会怎样。 由于每台计算机中的本地缓存,即使他们运行相同的dockerfile,他们仍然有机会构建不同的docker容器。
我还没有遇到这个问题。只是奇怪,这可能并且如何预防吗?
谢谢。
答案 0 :(得分:2)
Debian APT存储库是定期更改的外部资源,因此,如果您在另一台计算机上docker build
(或在同一台计算机上重复docker build --no-cache
),则可以获得不同的软件包版本。
一方面,这很难避免。 Debian和Ubuntu存储库都立即删除了旧版本的软件包:在同一apt-get update
命令中使用install
和RUN
的原因是,昨天的软件包索引可以引用不再存在的软件包文件。今天的资料库。原则上,您可以通过手动下载所需的每个.deb
文件并手动dpkg --install
来跳过此网络APT层,来解决此问题。
另一方面,这通常无关紧要。使用Debian或Ubuntu的发行版本后,软件包更新往往仅限于安全性更新和错误修复;请参阅“安全性更新”。在一个系统和另一个系统上,您将不会获得软件包的其他主要版本。我没有看到这是一个问题,除了拥有apt-get update
缓存层会导致您错过您可能想要的安全更新之外。
答案 1 :(得分:1)
泊坞窗映像不可更改。为了确保Dockerfile会生成相同的映像,您需要在安装命令中固定确切的软件版本。