Docker 容器内的应用程序更新?

Naf*_*Kay 9 lxc docker

通常在服务器上配置与安全相关的补丁的自动更新。因此,如果我运行的是 MySQL 5.5 并且出现了新的安全补丁,Ubuntu Server 将应用升级并重新启动 MySQL 以自动保护我。显然,这可以被禁用,但它对我们这些有点懒惰的人有帮助;)

Docker 容器内部是否存在这样的概念?如果我在 Docker 容器中运行 MySQL,是否需要不断停止容器,在其中打开一个 shell,然后更新和升级 MySQL?

Dei*_*m0s 16

我不同意接受的答案。首先,您应该在设计容器时考虑到状态分离(在 MySQL 的情况下,这意味着至少/var/lib/mysql在它自己的卷中)。其次,您应该确定升级策略;最先进的方法是为每组 apt 软件包升级创建版本化映像,并在将数据量从正在运行的容器交换到新容器之前对其进行测试。如果您使用诸如hipache 之类的东西,这可能包括停机时间或根本没有停机时间。

这种设置虽然比初始设置更昂贵,但与拥有大量容器的公司使用的相同,并且随着时间的推移维护成本会更低。

此外,包升级最终可能会破坏您正在运行的容器,因此将它们应用于正在运行的容器并不是最佳实践 - 因为它不是运行过时的软件。


Naf*_*Kay 4

TL;DR:如果你自己不构建它,它就不会发生。

执行此操作的有效方法是简单地CMDDockerfile. apt-get update && apt-get upgrade -qqy在此文件中,在启动您正在运行的任何内容之前运行。

然后,您有几种方法可以确保更新到达容器:

  1. 在主机操作系统中定义一个 cron 作业以按计划重新启动容器,从而使其按计划更新和升级。
  2. 订阅软件的安全更新,然后在更新受影响的软件包时重新启动容器。

优化和自动化并不是最容易的事情,但它是可能的。

  • 继续往下读。deim0s 有更好的答案。 (2认同)