云原生之深入解析Docker容器的health健康状态检查

一、Docker 的原生健康检查能力

  • 自 1.12 版本之后,Docker 引入了原生的健康检查实现。对于容器而言,最简单的健康检查是进程级的健康检查,即检验进程是否存活。Docker Daemon 会自动监控容器中的 PID1 进程,如果 docker run 命令中指明了 restart policy,可以根据策略自动重启已结束的容器。
  • 在很多实际场景下,仅使用进程级健康检查机制还远远不够。比如,容器进程虽然依旧运行却由于应用死锁无法继续响应用户请求,这样的问题是无法通过进程监控发现的。
  • 容器启动之后,初始状态会为 starting (启动中),Docker Engine 会等待 interval 时间,开始执行健康检查命令,并周期性执行。如果单次检查返回值非 0 或者运行需要比指定 timeout 时间还长,则本次检查被认为失败。如果健康检查连续失败超过了 retries 重试次数,状态就会变为 unhealthy(不健康)。
  • 注:
    • 一旦有一次健康检查成功,Docker 会将容器置回 healthy(健康)状态;
    • 当容器的健康状态发生变化时,Docker Engine 会发出一个 health_status 事件。

二、Dockerfile 方式

  • 可以在 Dockerfile 中声明应用自身的健康检测配置,HEALTHCHECK 指令声明了健康检测命令,用这个命令来判断容器主进程的服务状态是否正常,从而比较真实的反应容器实际状态。
  • HEALTHC

你可能感兴趣的:(人工智能与云原生,云原生,Docker容器,Dockerfile方式,docker,run方式,docker-composer)