自我更新 docker 堆栈
Self updating docker stack
我有一个 docker 堆栈部署了 20 多个服务,这些服务构成了我的应用程序。我想知道有没有一种方法可以使用其中一个容器 运行 作为堆栈的一部分对软件进行的最新更改来更新此堆栈?
我尝试过的方法:
- 在服务的其中一个容器中,安装了 docker 套接字和 /usr/bin/docker 文件,并从服务器下载了最新的 compose 文件。
- 实例化了下载最新图像的脚本
- 使用新的撰写文件
启动docker stack deploy
一切正常,但是如果 运行 这个进程本身的服务有一个更新,并且 docker stack deploy
试图在堆栈中的任何其他服务之前创建这个服务,那么堆栈更新失败。
有什么建议或替代方法吗?
执行此操作的标准方法是构建一个包含新应用程序代码的新 Docker 映像。用一些独特的版本标记它(如在 docker build -t
参数中),如源代码控制标记或日期戳。使用新的应用程序代码启动一个新容器,然后停止并删除旧容器。
作为一般规则,您不会升级运行容器内的软件。删除旧容器并使用您想要的软件和版本启动一个新容器。此外,这通常由操作员、持续部署系统或编排系统管理,而不是由容器本身管理。 (将 Docker 套接字安装到容器中是一个重大的安全隐患。)
(想象一下,设置集群的第二个副本,其工作方式与生产集群完全相同,只是它具有您明天要部署的软件。您不希望生产集群在它自己的,直到你测试它。这个方案应该给你一个可重现的部署设置,这样你就可以很容易地启动预生产集群,而且还可以让你控制哪些特定版本在 运行 的位置。)
docker 群体模式没有开箱即用的解决方案(类似于单个 docker 的瞭望塔)。我认为您已经找到了自动执行此操作的最佳解决方案。我建议您将更新容器(正在更新服务的容器)放在忽略列表中。然后在你的一个主节点上,创建一个 cron 来更新那个容器。我知道这不是一个完美的解决方案,但它应该有效。
我有一个 docker 堆栈部署了 20 多个服务,这些服务构成了我的应用程序。我想知道有没有一种方法可以使用其中一个容器 运行 作为堆栈的一部分对软件进行的最新更改来更新此堆栈?
我尝试过的方法:
- 在服务的其中一个容器中,安装了 docker 套接字和 /usr/bin/docker 文件,并从服务器下载了最新的 compose 文件。
- 实例化了下载最新图像的脚本
- 使用新的撰写文件 启动
docker stack deploy
一切正常,但是如果 运行 这个进程本身的服务有一个更新,并且 docker stack deploy
试图在堆栈中的任何其他服务之前创建这个服务,那么堆栈更新失败。
有什么建议或替代方法吗?
执行此操作的标准方法是构建一个包含新应用程序代码的新 Docker 映像。用一些独特的版本标记它(如在 docker build -t
参数中),如源代码控制标记或日期戳。使用新的应用程序代码启动一个新容器,然后停止并删除旧容器。
作为一般规则,您不会升级运行容器内的软件。删除旧容器并使用您想要的软件和版本启动一个新容器。此外,这通常由操作员、持续部署系统或编排系统管理,而不是由容器本身管理。 (将 Docker 套接字安装到容器中是一个重大的安全隐患。)
(想象一下,设置集群的第二个副本,其工作方式与生产集群完全相同,只是它具有您明天要部署的软件。您不希望生产集群在它自己的,直到你测试它。这个方案应该给你一个可重现的部署设置,这样你就可以很容易地启动预生产集群,而且还可以让你控制哪些特定版本在 运行 的位置。)
docker 群体模式没有开箱即用的解决方案(类似于单个 docker 的瞭望塔)。我认为您已经找到了自动执行此操作的最佳解决方案。我建议您将更新容器(正在更新服务的容器)放在忽略列表中。然后在你的一个主节点上,创建一个 cron 来更新那个容器。我知道这不是一个完美的解决方案,但它应该有效。