自更新docker堆栈

自更新docker堆栈,docker,docker-compose,dockerfile,docker-swarm,auto-update,Docker,Docker Compose,Dockerfile,Docker Swarm,Auto Update,我有一个docker堆栈,部署了20多个服务,这些服务构成了我的应用程序。我想知道,有没有一种方法可以从作为堆栈一部分运行的容器中使用软件的最新更改来更新此堆栈 我尝试过的方法: 在服务的一个容器中,安装docker套接字和/usr/bin/docker文件,并从服务器下载最新的compose文件。 实例化了下载最新图像的脚本 使用新的compose文件启动docker堆栈部署 通过这种方式一切正常,但是如果运行此进程的服务本身有更新,并且docker stack deploy尝试在堆栈中的任何

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

我尝试过的方法:

在服务的一个容器中,安装docker套接字和/usr/bin/docker文件,并从服务器下载最新的compose文件。 实例化了下载最新图像的脚本 使用新的compose文件启动docker堆栈部署 通过这种方式一切正常,但是如果运行此进程的服务本身有更新,并且docker stack deploy尝试在堆栈中的任何其他服务之前创建此服务,则堆栈更新失败。
对此有何建议或替代方法?

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

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


想象一下,设置集群的第二个副本,其工作方式与生产集群完全相同,只是它有您明天要部署的软件。在测试之前,您不希望您的生产集群自行解决这个问题。此方案应为您提供一个可复制的部署设置,以便轻松启动预生产集群,同时还可以让您控制哪些特定版本在何处运行。

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