制作镜像实例之healthcheck
1、介绍Dockerfile中使用HEALTHCHECK的形式有两种:HEALTHCHECK [options] CMD command(本次详细解释)HEALTHCHECK NODE 意思是禁止从父镜像继承的HEALTHCHECK生效下面我们主要介绍第一种形式的应用:HEALTHCHECK [options] CMD command中的options有三个参数可设定:interval:间隔(s秒
目录
2.2 mkdir /root/test 用于存放dockerfile文件的目录
2.5 在dockerfile所在的目录准备test.sh文件
3.4 恢复index.html,查看healthcheck状态是否也恢复
1、介绍
Dockerfile中使用HEALTHCHECK的形式有两种:
HEALTHCHECK [options] CMD command(本次详细解释)
HEALTHCHECK NODE 意思是禁止从父镜像继承的HEALTHCHECK生效
下面我们主要介绍第一种形式的应用:
HEALTHCHECK [options] CMD command中的options有三个参数可设定:
- interval:间隔(s秒、m分钟、h小时),从容器运行起来开始计时interval秒(或者分钟小时)进行第一次健康检查,随后每间隔interval秒进行一次健康检查;还有一种特例请看timeout解析。
- timeout:执行command需要时间,比如curl 一个地址,如果超过timeout秒则认为超时是错误的状态,此时每次健康检查的时间是timeout+interval秒。
- retries:连续检查retries次,如果结果都是失败状态,则认为这个容器是unhealth的
- 注意:在Dockerfile中只能有一个HEALTHCHECK指令。如果您列出多个,则只有最后一个HEALTHCHECK将生效。
2、实验如下:
2.1 准备NGINX镜像
2.2 mkdir /root/test 用于存放dockerfile文件的目录
2.3 cd /root/test
2.4 编写dockerfile文件,如下所示:
[root@node03 test]# cat dockerfile
FROM nginx:latest
RUN echo "123456" > /root/test
COPY test.sh /root/test.sh
HEALTHCHECK --interval=2s --timeout=3s --retries=3 CMD /bin/bash /root/test.sh
[root@node03 test]#
- --interval=2s 间隔2s进行第一次健康检查
- --timeout=3s 执行command需要的时间,超过3s则认为是错误的
- --retries=3 检查的次数
2.5 在dockerfile所在的目录准备test.sh文件
[root@node03 test]# cat test.sh
#!/bin/bash
cd /usr/share/nginx/html
cat index.html 2>/dev/null 1>/dev/null
if [ $? -eq 0 ];then
exit 0
else
exit 1
fi
[root@node03 test]#
2表示错误重定向到/dev/null
1表示输出重定向到/dev/null
2.6 build构建镜像
[root@node03 test]# docker build -t nginx_health:latest .
3、检查并测试
3.1 查看构建的镜像
3.2 创建容器测试
[root@node03 test]# docker run -d --name 12 nginx_health
f74956d25a8e81b95382bc1e671781d2a3738c794df1a7a120b9abfa2107b407
[root@node03 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f74956d25a8e nginx_health "tail -F /qq" 5 seconds ago Up 4 seconds (healthy) 80/tcp 12
b2fc06408077 nginx "nginx -g 'daemon of…" About an hour ago Up About an hour 80/tcp 11
a9f954712172 centos "tail -F /qq/" 5 hours ago Up 5 hours test01
[root@node03 ~]#
【由上可知,状态正常】
3.3 进到容器改变index.html的名称
docker exec -it 12 /bin/bash
【将index.html的名称换成index.html.bak,查看healthcheck的状态】
docker ps
【由图上可知,healthcheck的状态已经改变,容器内的服务不可用,说明健康检测生效】
3.4 恢复index.html,查看healthcheck状态是否也恢复
(1)docker exec -it 12 /bin/bash
(2)再次查看healthcheck状态
docker ps
(3)完成
更多推荐
所有评论(0)