如何在 docker 群中保持容器状态
How to keep container state in docker swarm
这个问题有点概念化...
我启动了一个服务,
Docker 在节点上为此服务运行容器,
我在这个容器上取得了进展,
由于某些点容器出现异常并进入不可恢复状态...
在这一点上,我无法手动管理一个或多个容器(例如要恢复它,停止 - 启动),因为 Swarm 是容器的管理器。
保持容器状态的最佳做法是什么?例如,有 "docker container commit",我是否应该找到在哪个节点容器上启动,找到它们的容器 ID 并手动提交它们?我应该为此目的定义 cron 作业吗?否则,我不应该依赖 Docker 来进行此类应用吗?
提前致谢。
就像 Oliver 建议的那样,您拥有的任何持久数据都应该存储在 docker 卷中,也许使用 docker volume driver from the Store like REX-Ray.
您的设置中应该有三个总体目标:
- 容器本身是短暂的。它可以在崩溃时被 Swarm 销毁并重新创建,并且不会丢失任何内容。
- 在容器 运行 时唯一修改的任何文件都存储在 docker 卷中,因此当 Swarm re-creates 时它们可以正确附加到新容器。如果它是 multi-node Swarm,您将需要共享存储和类似 REX-Ray 或 Cloudstor 驱动程序的东西,以将卷重新连接到失败后重新创建容器的任何地方。
- 您的 Swarm 服务需要 healthchecks。这就是 Swarm 将如何知道它们是否处于不良状态并且需要被杀死并替换为新容器的方式。
当您结合这三个原则时,Swarm 将解决您的状态和正常运行时间问题。
这个问题有点概念化...
我启动了一个服务,
Docker 在节点上为此服务运行容器,
我在这个容器上取得了进展,
由于某些点容器出现异常并进入不可恢复状态...
在这一点上,我无法手动管理一个或多个容器(例如要恢复它,停止 - 启动),因为 Swarm 是容器的管理器。
保持容器状态的最佳做法是什么?例如,有 "docker container commit",我是否应该找到在哪个节点容器上启动,找到它们的容器 ID 并手动提交它们?我应该为此目的定义 cron 作业吗?否则,我不应该依赖 Docker 来进行此类应用吗?
提前致谢。
就像 Oliver 建议的那样,您拥有的任何持久数据都应该存储在 docker 卷中,也许使用 docker volume driver from the Store like REX-Ray.
您的设置中应该有三个总体目标:
- 容器本身是短暂的。它可以在崩溃时被 Swarm 销毁并重新创建,并且不会丢失任何内容。
- 在容器 运行 时唯一修改的任何文件都存储在 docker 卷中,因此当 Swarm re-creates 时它们可以正确附加到新容器。如果它是 multi-node Swarm,您将需要共享存储和类似 REX-Ray 或 Cloudstor 驱动程序的东西,以将卷重新连接到失败后重新创建容器的任何地方。
- 您的 Swarm 服务需要 healthchecks。这就是 Swarm 将如何知道它们是否处于不良状态并且需要被杀死并替换为新容器的方式。
当您结合这三个原则时,Swarm 将解决您的状态和正常运行时间问题。