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


9

通常,在服务器上配置与安全相关的补丁程序的自动更新。因此,如果我正在运行MySQL 5.5并且发布了新的安全补丁,Ubuntu Server将应用升级并重新启动MySQL,以自动方式保护我。显然,可以禁用此功能,但这对那些懒惰的人很有帮助;)

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


这是Docker,而不是LXC问题。由于LXC容器本身只是在同一内核下运行的另一个Linux发行版,因此您将使用相同的命令来更新LXC容器系统。
2014年

Answers:


13

我不同意接受的答案。首先,您在设计容器时应牢记状态分离(在MySQL情况下,这意味着至少/var/lib/mysql要以其自身的体积进行操作)。其次,您应该确定升级策略;最先进的方法是为每组apt软件包升级创建版本化映像,并在将数据量从运行容器交换到新容器之前对其进行测试。如果您使用臀部疼痛之类的设备,则可以包括停机时间,也可以根本没有停机时间。

这种设置虽然最初设置起来比较昂贵,但与具有大量容器的公司所使用的设置相同,并且随着时间的推移维护起来会更便宜。

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


+1这是最佳做法。在服务器容器上存储数据只是在问麻烦。
booyaa 2015年

4

TL; DR:如果您自己没有构建它,那将不会发生。

要做到这一点有效的方法是简单地写由指定的容器自定义启动脚本CMD在你的Dockerfile。在此文件中,apt-get update && apt-get upgrade -qqy在开始运行之前先运行一个。

然后,您可以通过两种方法确保更新到达容器:

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

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


1
继续阅读该页面。deim0s有一个更好的答案。
mc0e 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.