Docker群获得部署状态

时间:2018-07-08 20:39:11

标签: docker docker-swarm

运行docker stack deploy将一些服务部署到集群后,是否可以通过编程方式测试所有容器是否正确启动?

目的是在分阶段CI / CD管道中验证容器是否正在实际运行并且在启动时没有失败。通过restart_policy禁用了重新启动。

我正在查看docker stack servicesreplicas列可否用于此目的?

$ docker stack services --format "{{.ID}} {{.Replicas}}" my-stack-name
lxoksqmag0qb 0/1
ovqqnya8ato4 0/1

2 个答案:

答案 0 :(得分:1)

是的,有很多方法可以做到,但是它是手动的,您必须非常熟悉docker cli。 Docker没有提供一种简单的内置方法来验证docker stack deploy是否成功。 There is an open issue about it

对我们来说幸运的是,社区创建了一些工具来实现Docker在这方面的缺点。一些最著名的:

sure-deploy的作者Issuu拥有a very good article describing this issue

答案 1 :(得分:0)

通常在CI / CD中,我看到每个人都使用docker或docker-compose。容器在docker中的运行方式与docker swarm方面的运行方式相同,即“该容器是否按预期方式自行工作”。

话虽如此,如果您仍然想使用swarm在多层解决方案中进行集成测试,则可以在自动化中做各种事情。请注意,所有这些操作都将在单个节点上完成,以简化测试(docker事件不会从所有节点提取节点事件,因此对于ci / cd而言,跟踪单个节点要容易得多):

  1. 监视docker events,例如docker events -f service=<service-name>确保容器不会死。
  2. 始终在您的容器中进行健康检查。它们是确保您的应用运行状况良好(在容器级别)的第一方法,并且您会在docker events中看到它们成功还是失败。您可以将它们放在Dockerfilesservice create commandsstack/compose files中。 Here's some great examples
  3. 您可以将另一个容器附加到同一网络上,以使用任务一对一地远程测试服务。与反向DNS。这样可以避免VIP,并让您与特定的副本通话。
  4. 您可能会从docker inspect <service-id or task-id>中得到一些帮助