Docker 健康检查功能

简介:

Docker1.12及以上版本,自带了健康检查功能。通常情况下只能使用docker ps 来查看容器是否是up的状态,但是服务是否正常我们不可知,而健康检查功能,可以允许我们在容器中执行一些健康检查的命令,然后将容器的状态在"STATUS"中标识:

1
2
3
[root@docker] # docker ps
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS                    PORTS                NAMES
1bd250e6836a        trying /nginx_dockerfile :v1    "nginx"              16 seconds ago      Up 13 seconds (healthy)   0.0.0.0:80->80 /tcp    nginx-1

实现这一功能只需要在构建镜像的Dockerfile中加入“HEALTHCHECK”字段:

HEALTHCHECK --interval=5s --timeout=3s CMD curl --fail http://localhost:80/ || exit 1


如果http状态码是200,退出代码将为0,容器将被标记为运行状况。 如果服务器响应任何错误,退出代码将为1,容器处于不健康状态。 

HEALTHCHECK有3个选项参数:

  • --interval=DURATION (default 30s)

  • --timeout=DURATION (default 30s)

  • --retries=N (default 3)


下面是具有以上健康检查功能的简单Dockerfile:

1
2
3
4
5
6
7
8
9
FROM centos
MAINTAINER trying tryingstuff@163.com
RUN rpm -ivh http: //mirrors .aliyun.com /epel/epel-release-latest-7 .noarch.rpm
RUN yum  install  nginx -y
RUN  sed  -i  'N;6adaemon off;'  /etc/nginx/nginx .conf
ADD index.html  /usr/share/nginx/html/index .html
HEALTHCHECK --interval=5s --timeout=3s CMD curl --fail http: //localhost :80/ ||  exit  1
EXPOSE 80
CMD [ "nginx" ]

也可以直接使用nginx镜像,使用如下Dockerfile:

1
2
3
4
FROM nginx:latest
HEALTHCHECK --interval=5s --timeout=3s CMD curl --fail http: //localhost :80/ ||  exit  1
CMD  /usr/sbin/nginx  -g  'daemon off;'
EXPOSE 80

构建镜像并启动:

1
2
docker build -t trying /nginx_dockerfile :v1 ./
docker run -d -p 80:80 --name nginx-1 trying /nginx_dockerfile :v1 nginx

在启动初始阶段,会显示“health: starting”的状态:

1
2
3
[root@docker] # docker ps
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS                            PORTS                NAMES
1bd250e6836a        trying /nginx_dockerfile :v1    "nginx"              5 seconds ago       Up 3 seconds (health: starting)   0.0.0.0:80->80 /tcp    nginx-1


当容器正常时:

1
2
3
[root@docker] # docker ps
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS                    PORTS                NAMES
1bd250e6836a        trying /nginx_dockerfile :v1    "nginx"              16 seconds ago      Up 13 seconds (healthy)   0.0.0.0:80->80 /tcp    nginx-1

当容器故障时,如删除nginx的index.html文件,404错误状态为”unhealthy“:

1
2
3
[root@docker] # docker ps
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS                      PORTS                NAMES
1bd250e6836a        trying /nginx_dockerfile :v1    "nginx"              49 minutes ago      Up 49 minutes (unhealthy)   0.0.0.0:80->80 /tcp    nginx-1

任何健康状况变化都会触发Docker事件(heath_status),以便我们可以对更改做出反应,而无需使用轮询Docker引擎。

这个功能帮助开发人员在各种场景中构建更具弹性的软件:例如在负载均衡中,流量不应该被传送到标记为不健康的容器上。



 本文转自 酥心糖 51CTO博客,原文链接:http://blog.51cto.com/tryingstuff/1955147

相关文章
|
Kubernetes 网络协议 API
Docker 与 K8S学习笔记(二十一)—— Pod生命周期、重启策略与健康检查
Pod在整个生命周期中被系统标示为各种状态,熟悉Pod的各种状态对于理解Pod的调度策略、重启策略很有必要。 一、Pod生命周期 Pod的所处阶段信息保存在PodStatus.Phase,Phase有如下几种值: Pending: API Server已经创建该Pod,但一个或多个容器还没有被创建
328 0
|
缓存 安全 Ubuntu
基于Alpine构建轻量级带有cURL功能的Docker镜像
基于Alpine构建轻量级带有cURL功能的Docker镜像
1437 0
基于Alpine构建轻量级带有cURL功能的Docker镜像
|
存储 Docker 容器
Docker Swarm 健康检查
Docker Swarm 健康检查
|
监控 Java 程序员
Java应用在docker环境配置容器健康检查
运行在docker环境的java应用,给其增加健康检查的能力,以便观察和监控容器的健康状态
514 0
Java应用在docker环境配置容器健康检查
|
前端开发 JavaScript 关系型数据库
Docker Desktop 4.6 全新功能:大幅降低文件操作时间达 98%
Docker Desktop 4.6 全新功能:大幅降低文件操作时间达 98%
165 0
|
应用服务中间件 网络安全 Docker
Docker Engine v18.09.1 新版本特性解读,全新功能先睹为快(二)
Docker Engine v18.09.1 提供了许多新功能、改进和 Bug 修复。接下来,让我们来继续看看在升级到 Docker 18.09.1 版本时值得注意的主要功能。
2484 0
|
Ubuntu Linux Shell
Docker Engine v18.09.1 新版本特性解读,全新功能先睹为快(一)
Docker Engine v18.09.1 上个月推出了 GA。社区版和企业版用户都可以使用它。它包含了缺陷修复程序,您可以在出于一致性和兼容性原因而无法快速采用新功能的环境中使用这些缺陷修复程序。
3323 0
|
安全 Docker 容器
Docker Desktop Enterprise“版本包”功能详解
在这篇文章中,我们想要强调的重点是如何利用“版本包”这个新功能,用 Docker Desktop Enterprise 来弥合开发和生产之间的差距。通过“版本包”功能,您可以......
2383 0
|
供应链 Kubernetes 安全
2018 年 Docker 大事件回顾,Docker Enterprise 2.0 核心功能总结(二)
容器通过更大的隔离空间和更小的攻击平面来提供更高的安全性,但是交付更安全的应用程序还需要查看这些应用程序是如何创建的。组织需要知道应用程序从哪里来,谁访问过它们,它们是否包含已知的漏洞,以及是否已经经过批准生产。
1724 0
|
监控 Cloud Native Docker
服务器宕机不再愁!Docker 内置功能帮您解决
在过去十年中,随着微服务和高度可扩展系统的普及,导致在网络上大量分布的应用程序的复杂性整体增加,从而使应用程序存在着许多迁移时产生的和一些潜在的故障模式。
2642 0