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

相关文章
|
7月前
|
存储 监控 安全
Docker插件和扩展:深入Docker功能的完整指南
Docker作为一种流行的容器化技术,不仅令应用程序的部署更为便捷,同时也提供了丰富的插件和扩展机制,以满足更多复杂场景下的需求。本文将深入研究Docker的插件和扩展,提供更为详实和全面的示例代码,助力读者更好地理解和运用这些增强功能。
|
29天前
|
安全 网络安全 数据安全/隐私保护
利用Docker的网络安全功能来保护容器化应用
通过综合运用这些 Docker 网络安全功能和策略,可以有效地保护容器化应用,降低安全风险,确保应用在安全的环境中运行。同时,随着安全威胁的不断变化,还需要持续关注和研究新的网络安全技术和方法,不断完善和强化网络安全保护措施,以适应日益复杂的安全挑战。
42 5
|
7月前
|
监控 Kubernetes Docker
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
【5月更文挑战第9天】本文探讨了Docker容器中应用的健康检查与自动恢复,强调其对应用稳定性和系统性能的重要性。健康检查包括进程、端口和应用特定检查,而自动恢复则涉及重启容器和重新部署。Docker原生及第三方工具(如Kubernetes)提供了相关功能。配置检查需考虑检查频率、应用特性和监控告警。案例分析展示了实际操作,未来发展趋势将趋向更智能和高效的检查恢复机制。
358 4
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
|
4月前
|
运维 Shell Linux
运维专题.Docker功能权限(Capabilities)管理和查看
运维专题.Docker功能权限(Capabilities)管理和查看
140 1
|
4月前
|
存储 弹性计算 Docker
深入探讨Docker的主要功能及其影响力
【8月更文挑战第24天】
54 0
|
5月前
|
JSON 测试技术 数据安全/隐私保护
【Docker项目实战篇】Docker部署PDF多功能工具Stirling-PDF
【7月更文挑战第7天】Docker部署PDF多功能工具Stirling-PDF
397 2
|
6月前
|
Docker 容器
在 EAS 构建中使用其他 Docker 功能,如自定义 Dockerfile 或多阶段构建
在 EAS 构建中使用其他 Docker 功能,如自定义 Dockerfile 或多阶段构建
|
6月前
|
监控 NoSQL Redis
Redis哨兵,Redis哨兵核心功能如何一个云服务器完成6个节点的搭建-docker什么是docker是否可以把六个容器,都写到同一个ym配置中,一次都启动,不就直接保证互通问题了吗?
Redis哨兵,Redis哨兵核心功能如何一个云服务器完成6个节点的搭建-docker什么是docker是否可以把六个容器,都写到同一个ym配置中,一次都启动,不就直接保证互通问题了吗?
|
Ubuntu 关系型数据库 网络安全
基于docker搭建gitea私服仓库,并开启https访问、ssh访问和邮箱验证通知功能
基于docker搭建gitea私服仓库,并开启https访问、ssh访问和邮箱验证通知功能
1880 1
基于docker搭建gitea私服仓库,并开启https访问、ssh访问和邮箱验证通知功能
|
存储 Kubernetes 安全
Docker Hub 现在是需要付费才能使用其全部功能?
Docker Hub 现在是需要付费才能使用其全部功能?
426 0