一起停止,升级和启动所有Docker Stack服务?

时间:2018-11-16 10:59:25

标签: docker docker-swarm docker-stack

我想停止docker-stack.yml文件中的所有服务,使用新的图像版本号更新文件,然后启动所有服务。为了将它们全部一起升级,以使它们始终都是最新版本。

我该怎么做?我宁愿不删除网络和卷-我的意思是,docker stack rm似乎过大了? docker service scale service-name=0容易出错吗?那么您需要记住再次变回> 0。

我想进行一站式升级的原因是,这很简单:我的应用程序中的服务不需要与彼此的API的不同版本兼容。服务永远不会运行X版本,而不必与另一个服务的X版本1通讯(相反,所有服务都将使用相同的X版本。它们使用相同的版本号)。

(如果我问错了问题,请随时告诉我:-)注意:在这种特殊情况下,由于所有容器都立即停止升级-重新启动,因此有20-30秒的停机时间。这是针对Docker Swarm / Stack的,而不是针对Docker-Compose的(那时人们可以只做downup)。 )

1 个答案:

答案 0 :(得分:1)

免责声明:我觉得这是错误的升级方法。它将停机时间引入了旨在提高可用性的系统中。


要停止服务,我可能会添加一个无法满足的约束,例如

docker service update \
  --constraint-add node.label.disable_service==true -d \
  ${service_name}

这包括复制服务和全局计划的服务。当您使用compose文件重新部署堆栈时,它将删除此约束(它也应删除任何比例更改)。


如果堆栈按照您的描述紧密耦合,那么接近蓝/绿色部署的选项可能是更好的选择。在连接到两个docker网络的服务之前放置一个代理,然后在其中一个网络上启动蓝色或绿色堆栈。然后要替换它,请启动另一个网络上的另一个堆栈,一旦运行并且代理正在路由通信,请停止第一个堆栈。