自更新docker堆栈



我有一个docker堆栈,部署了20多个服务,这些服务构成了我的应用程序。我想知道,有没有一种方法可以从作为堆栈一部分运行的一个容器中使用软件的最新更改来更新这个堆栈?

我尝试过的方法:

  1. 在服务的一个容器中,安装docker套接字和/usr/bin/docker文件,并从服务器下载最新的compose文件
  2. 实例化了下载最新图像的脚本
  3. 使用新的撰写文件启动docker stack deploy

这样一切都很好,但如果运行此进程的服务本身有更新,并且docker stack deploy试图在堆栈中的任何其他服务之前创建此服务,则堆栈更新失败。对此有什么建议或替代方法吗?

没有现成的docker集群模式解决方案(类似于单个docker的望塔(。我认为您已经找到了自动执行此操作的最佳解决方案。我建议您将更新容器(更新服务的容器(放在忽略列表中。然后,在您的一个主节点上,创建一个更新该容器的cron。我知道这不是一个完美的解决方案,但它应该有效。

实现这一点的标准方法是构建一个包含新应用程序代码的新Docker映像。用一些唯一的版本标记它(如docker build -t参数中(,如源代码管理标记或日期戳。使用新的应用程序代码启动一个新容器,然后停止并删除旧容器。

一般情况下,在运行的容器中不升级软件。删除旧容器,然后使用所需的软件和版本启动新容器。此外,这通常由操作员、连续部署系统或编排系统管理,而不是由容器本身管理。(将Docker插座安装到容器中是一个重大的安全隐患。(

(想象一下,设置集群的第二个副本,它的工作方式与生产集群完全相同,只是它有你明天要部署的软件。你不希望你的生产集群在测试之前自行完成。这个方案应该为你提供一个可复制的部署设置,这样就可以轻松启动预生产集群,但也可以为你提供控制哪些特定版本在哪里运行。(

最新更新