Dockerfile、Docker 镜像和可重现环境

Raj*_*thi 5 desktop-environment docker reproducible-build

有关 docker 的常见文档和注释提到了版本控制和共享 Dockerfile 这应该让任何人都可以构建相同的映像。这听起来不错,但是,我们通常有这样的命令。

RUN apt-get update
pip install..
Run Code Online (Sandbox Code Playgroud)

这可能会根据运行时间安装不同的东西/版本/补丁,并使调试变得困难。

另一方面,共享 docker 镜像并不能给您带来诸如版本控制和查看两个镜像之间到底有什么不同之类的好处。

  • 其中哪一个(dockerfile 与 image)应该作为开发和部署使用的参考?
  • Dockerfile 是否应该提供有关确切更新的更多详细信息?即使这样,基础映像也可能会根据您运行的时间而有所不同。

小智 3

我想我更喜欢分享 Dockerfile。显然,您需要FROM在 Dockerfile 的语句中指定一个版本。例如,不同的 Ubuntu 版本将有不同的可用软件包。

对于系统或 -dev 依赖项,您可能实际上希望让版本自由浮动以始终安装最新版本。

Debian/Ubuntu 软件包

apt-get例如,对于安装的任何程序,curl您可以使用以下命令获取版本号

apt-cache policy curl | grep -oP 'Installed: \K\S+'
Run Code Online (Sandbox Code Playgroud)

然后编辑你的 Dockerfile 来读取类似的内容

RUN apt-get install curl=7.47.0-1ubuntu2.2
Run Code Online (Sandbox Code Playgroud)

Python

Python 版本可以通过pip. 提取已安装软件包的所有版本号并将它们存储在需求文件中,如下所示:

RUN apt-get install curl=7.47.0-1ubuntu2.2
Run Code Online (Sandbox Code Playgroud)

然后在你的 Dockerfile 中运行

RUN pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)