停止、升级、启动所有 Docker 一起堆叠服务?
Stop, upgrade, start all Docker Stack services together?
我想停止我的 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(然后可以只做 down
和 up
)。 )
免责声明:我觉得这是错误的升级方法。它将停机时间引入设计为高度可用的系统。
要停止服务,我可能会添加一个无法满足的约束,例如
docker service update \
--constraint-add node.label.disable_service==true -d \
${service_name}
这包括复制服务和全局调度服务。当您使用复合文件重新部署堆栈时,它将删除此约束(它还应该删除任何比例更改)。
如果您的堆栈像您描述的那样紧密耦合,那么接近 blue/green 部署的东西可能是更好的选择。在连接到两个 docker 网络的服务前面放置一个代理,并在其中一个网络上启动蓝色或绿色堆栈。然后替换它,在另一个网络上启动另一个堆栈,一旦 运行 并且代理正在路由流量,停止第一个堆栈。
我想停止我的 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(然后可以只做 down
和 up
)。 )
免责声明:我觉得这是错误的升级方法。它将停机时间引入设计为高度可用的系统。
要停止服务,我可能会添加一个无法满足的约束,例如
docker service update \
--constraint-add node.label.disable_service==true -d \
${service_name}
这包括复制服务和全局调度服务。当您使用复合文件重新部署堆栈时,它将删除此约束(它还应该删除任何比例更改)。
如果您的堆栈像您描述的那样紧密耦合,那么接近 blue/green 部署的东西可能是更好的选择。在连接到两个 docker 网络的服务前面放置一个代理,并在其中一个网络上启动蓝色或绿色堆栈。然后替换它,在另一个网络上启动另一个堆栈,一旦 运行 并且代理正在路由流量,停止第一个堆栈。