我有一个带有典型Web应用程序堆栈(nginx和php)的docker swarm设置。我需要Redis作为docker swarm中的一项服务。群有2个节点,每个节点都应具有Web堆栈和Redis服务。但是一次只能有一个Redis容器处于活动状态(并且能够与每个Web堆栈进行通信),另一个容器必须在那里并且处于待机模式,以便在第一个Redis失败时可以快速切换。>
答案 0 :(得分:0)
使用docker swarm时,拥有备份,备用容器将被视为反模式。建议使用swarm部署可靠容器的方法是将Dockerfile
作为HEALTHCHECK命令的一部分。您可以设置一个特定的时间间隔,在此间隔后healthcheck
命令将生效,以使您的容器能够预热。
现在,使用HEALTHCHECK
始终保持指定数量的容器的事实来支持docker-swarm
功能。如果您的healthcheck
脚本变成unhealthy
,则抛出退出代码1。一旦群检测到退出代码1,它就会杀死该容器并保持容器的数量,然后旋转一个新容器。
整个过程仅需几毫秒,即可无缝运行。有多个容器,以防预热时间长。如果其中一个容器发生故障,这将防止您的服务不可用。
healthcheck
命令的示例:
HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit 1