【问题标题】:Best way to update docker image更新 docker 镜像的最佳方法
【发布时间】:2020-12-09 12:34:19
【问题描述】:

我从 Dockerfile 创建了一个 docker 映像,现在我想向其中添加另一个应用程序。我的问题是,这是更新 docker 映像的最佳做法:

  1. 从 docker 镜像运行容器,在容器中安装包,然后从该容器获取镜像。
  2. 使用相应的命令更新 Dockerfile 并重建镜像。 以下哪一项是最佳做法?

【问题讨论】:

  • 我的回答有帮助吗?如果您需要进一步的支持,请发表评论。

标签: docker


【解决方案1】:

我不会做你提到的两点。原因是单一责任原则。我知道这不是编程,尽管在这种情况下将不同的职责(不同的程序及其图像)分开是很好的。

我将扩展您已经创建的映像,将其用作基础,为其他程序创建一个新映像,这将为您提供一个包含您想要的程序的新映像(保持旧的 DockerImage 不变)。

请看我关于combining DockerImages here的回答。

最后,我无法真正说出最适合您的解决方案,因为这取决于您的用例。

【讨论】:

  • 没有。我的意思是当你正在构建一个应用程序并且你不知道你将在你的容器上安装哪个包时。安装一些包后,我应该从容器中获取图像还是去正确更新docker文件并从docker文件中获取图像?
  • @K47,这取决于您是否会经常更新 Docker 容器(从镜像开始)。例如,假设您正在开发一个 .Net Core 应用程序,并且要更新服务器上的软件,您每次部署一个具有不同源代码的新图像。我想让你知道的是,这种情况下的答案取决于你的情况。但是,我仍然建议结合 Docker 镜像在容器中安装多个应用程序。希望我能帮上忙。
【解决方案2】:

容器背后的想法是拥有一个不可变的容器状态。这样做的原因是您可以保持容器(以及相关的 Docker 映像)小巧便携。如果您要在容器中安装任何其他东西,则会增加其大小,这并非不可能,但这是一种不好的做法。如果您想立即将一些更改反映在容器中,请尝试使用 Docker volumes。但是,如果应用程序需要该软件包才能运行,则最佳做法是更新 Dockerfile 并重建映像。更多关于 Dockerfile 最佳实践的信息可以在here找到。

【讨论】:

  • 所以,如果我更新 docker 文件,它会增加图像的大小和容器的大小。不会吗?
  • 是的,但是图像可以在任何地方重复使用。如果您只更新容器内的一个包,那么您将回到旧的it works on my machine。 :)
  • 如果我在容器上安装一些软件包后从容器中拍摄快照。输出镜像不能在其他Linux机器上通过docker命令运行吗?
  • @K47 当然可以,但是分发 Dockerfile 比分发 Docker 映像要容易得多
【解决方案3】:

我建议直接修改 Dockerfile,这样您就可以跟踪所有更改,因为希望它处于版本控制之下。

【讨论】:

  • 版本控制是什么意思?你的意思是每条指令的图像缓存层?
  • 我认为 Paolo 是在谈论某种版本控制系统,即 git 或类似的东西。
  • @K47 正是 Marko E 所说的。希望您对文件有git 或类似的跟踪更改
猜你喜欢
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多