赢得自定义新的遗物弹球机!只需将数据书呆子提交以注册Futureestack。 现在注册

通过Docker的健康检查指令减少部署风险

6分钟阅读
新的遗物博客文章的抽象图象亚搏体育登入网

Docker释放,版本1.12, 这健康检查教学为了Dockerfiles.反映了应用程序开发的变化性质。跨越多个数据中心的动态基础架构,复杂的服务依赖性和严格的正常运行时间要求的组合显着影响各个应用程序的设计和部署。与此同时,随着微服务的普及,DEV和OPS团队正在使用更小的,更频繁地部署的服务。

Docker的健康检查指令为在这些日益复杂的环境中提供了运行容器的重要信息。虽然“Docker PS.“命令可以轻松确定容器是否是跑步,健康检查允许您在Dockerfile中指定用于特定于容器的方法以确定准备。我们将通过一个简单的示例,其中使用与我们为此帖子创建的现有Node.js应用程序的指令现代开发人员工作站在麦斯卡斯与码头

Docker健康检查:医生

您的容器正在运行。但它健康吗?

除了处理出口代码外,Docker,通过设计,对集装箱应用程序的内部工作不太了解。什么时候 ”Docker运行“从命令行界面(CLI)中调用,它通常会开始使用的单个进程cmd.在Dockerfile中的指令。确定Docker CLI中的“状态”列的结果PS.命令。这-一种标志列出所有容器,跑步或不如下所示:

Docker健康检查截图
“Docker PS-A”的输出

此输出表示某些容器正在主动运行,而其他容器已成功或错误(“退出(1)“)。遗憾的是,甚至应用程序的状态显示为“上涨16分钟”的状态可能会为500个错误提供服务,也可以粘在无限循环中。添加健康检查到集装箱Dockerfile有助于解决这个问题。

写你的第一个健康检查

健康检查可以是任何单个命令。它们在容器内运行,如果命令退出代码为0,则将容器报告为健康,如果输出为1,则容器标记为不健康。

默认情况下,截至最新的Docker 1.21.1 RC Release,Health Check命令每30秒运行一次,在失败之前重试三次,并在30秒后超时。这些值都是可配置的,理想情况应该与服务的SLA要求相关在游戏日期模拟期间调整

除非在Dockerfile中专门禁用或覆盖,否则它也是从基本图像继承的。这让开发人员为类似应用程序定义标准健康检查。

例如,对Web的应用程序容器的常见验证从容器中运行的应用程序检查HTTP状态代码。使用卷曲s- 失败选项,如果从服务中返回HTTP错误(在此示例中运行端口3000),则此命令可以返回状态代码1:

healthcheck cmd curl --fail http:// localhost:3000 / ||退出1.

重建并运行容器图像后,运行状态在输出中的括号中返回Docker PS.

Docker健康检查截图

如果代码更改导致应用程序发送错误状态代码(例如500),则容器运行状况状态会更改不良三次故障(默认值)之后,因为Check命令返回“1”:

Docker健康检查截图

健康检查需要时间完成。当第一次执行健康检查时,状态显示为“启动”

Docker健康检查截图

任何健康更改都会触发Docker事件(heath_status.)因此,在不诉诸Docker引擎的情况下,您可以对更改作出反应。虽然此指令仍然是新的,但它有望帮助开发人员在各种场景中构建更多的弹性软件:例如,部署和软件负载平衡。

最后,为了调试健康检查,Docker检查命令允许您查看成功或失败的命令的输出(此处以JSON格式):

Docker Inspect --format ='{{json .state.health}'''''''''名字

健康检查符合复杂的部署和编排

截至2016年7月初,Docker群模式服务中的新的Orchestration功能是利用健康检查来管理零停机部署。只有当状态更改为“健康”时,它将开始将流量路由到容器实例。此模式也用于其他流行的编排框架。对于开发和运营团队,健康检查可以帮助避免部署到运行的生产的不幸失败场景代码,但始终由于配置错误而始终返回神秘的内部服务器错误。

无论您的团队是否使用Bleeding-Edtration,Docker的可配置运行状况检查指令允许团队定义自己的应用程序在容器中运行的原因“准备好”。正如我的文章中所讨论的那样为复杂的基础架构编写更好的HTTP运行状况检查,投入这种模式的时间和精力最终是关于团队健康的。服务健康检查可以使越来越大,复杂的系统更易于管理,部署和排除。

谢谢码头的迈克戈尔策为了他对这篇文章的宝贵建议。