Dockerfile、Docker 镜像和可重现环境

Dockerfile、Docker 镜像和可重现环境

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

RUN apt-get update
pip install..

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

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

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

答案1

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

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

Debian/Ubuntu 软件包

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

apt-cache policy curl | grep -oP 'Installed: \K\S+'

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

RUN apt-get install curl=7.47.0-1ubuntu2.2

Python

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

pip freeze > requirements.txt

然后在你的 Dockerfile 中运行

RUN pip install -r requirements.txt

相关内容