本文主要是介绍Dockerfile HEALTHCHECK指令 语法解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Docker实际应用中,为了保证高可用性等,肯定会遇到需要实时或定时检测Docker容器以及容器内服务运行状态的需求,此时就会用到健康检查机制,dockerfile
内部提供了HEALTHCHECK
指令,用来完成对Docker容器的健康检测。
HEALTHCHECK 语法
# 通过在容器内部运行命令来检查容器运行状况.
HEALTHCHECK [OPTIONS] CMD command
# 禁用从基映像继承的任何运行状况检查.
HEALTHCHECK NONE
HEALTHCHECK 语义
· HEALTHCHECK
指令用于检测容器运行是否正常,这可以检测到一些情况,例如web
服务器陷入无限循环,无法处理新的连接,即使服务器进程仍在运行。
· 当容器指定了HEALTHCHECK
时,除了正常状态外,它还有一个健康状态。此状态最初处于启动状态。只要健康检查通过,它就会变为正常(无论它以前处于什么状态)。在连续失败一定次数后,它将变得不健康。
· 可以出现在CMD
之前的选项有:
1) --interval=DURATION
(default: 30s
)
2) --timeout=DURATION
(default: 30s
)
3) --start-period=DURATION
(default: 0s
)
4) --retries=N
(default: 3
)
· 运行状况检查将首先在容器启动后每隔秒运行一次,然后在前一次检查完成后每隔秒运行一次。
· 如果单次运行检查所用时间超过超时秒数,则认为检查失败。
· 它将重试容器的运行状况检查的连续失败,以将其视为不健康。
· start period为需要引导时间的容器提供初始化时间。探测失败期间的最大重试次数不计算在内。但是,如果在启动期间健康检查成功,则认为容器已启动,并且所有连续失败都将计入最大重试次数。
· dockerfile
中只能有一条HEALTHCHECK
指令。如果列出多个,则只有最后一个运行状况检查才会生效。
· CMD
关键字后面的命令可以是shell
命令(例如:HEALTHCHECK CMD /bin/check running
)或exec
数组(与其他dockerfile
命令一样)。
· 命令的exit status
指示容器的运行状况。可能的值为:
1) 0:健康状态,容器健康且已准备完成。
2) 1:不健康状态,容器工作不正常。
3) 2:保留,不要使用此退出代码。
HEALTHCHECK --interval=5m --timeout=3s \CMD curl -f http://localhost/ || exit1
· 为了帮助调试失败的探测,命令在stdout
或stderr
上写入的任何输出文本(UTF-8编码)都将被存储在health status
中,并且可以使用docker inspect
进行查询。这样的输出应该保持简短(当前只存储前4096个字节)。
· 当容器的运行状况发生变化时,将生成具有新状态的health_status
事件。
· docker 1.12
中增加了HEALTHCHECK
特性。
HEALTHCHECK 示例
1) 进入/securitit/dockerfile/
目录(根据个人选择,这是本文使用的目录),创建dockerfile
文件。
FROM nginx
MAINTAINER Securitit
HEALTHCHECK --interval=5s --timeout=3s \CMD curl -f http://localhost/ || exit 1
CMD ["usr/sbin/nginx", "-g", "daemon off;"]
配置文件中通过HEALTHCHECK
指令指定健康检查的相关配置,结尾的CMD
指令指定容器启动时,同时启动Nginx
服务器。
2) 执行如下的构建命令,基于dockerfile
构建镜像。
docker build -f /securitit/dockerfile/dockerfile -t securitit-nginx-healthcheck:1.0.0.1 .
3) 查看镜像信息。
docker images
4) 指定通过dockerfile
生成的镜像启动容器。
docker run --name securitit-nginx-healthcheck -it -d -p 10080:80 securitit-nginx-healthcheck:1.0.0.1
5) 查看容器信息。
docker ps -a
通过docker ps -a
命令,可以看到运行中容器的状态是在变化中的。
6) 通过docker inspect
查看容器健康检查信息。
docker inspect -f {{".State.Health"}} b6e07518c14d
可以看到,目前容器状态为0
,处于健康状态。
除了查看状态之外,还可以查看更加详细的健康检查日志。
docker inspect b6e07518c14d
总结
在提倡服务高可用的今天,健康检查是不可缺少的,HEALTHCHECK
只是简单的基础指令,要达到更加智能、完善的服务监控机制,需要三方工具来协助完成,会在系列博文中介绍。
若文中存在错误和不足,欢迎指正!
这篇关于Dockerfile HEALTHCHECK指令 语法解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!