目录

1、介绍

2、实验如下:

2.1  准备NGINX镜像

2.2  mkdir /root/test 用于存放dockerfile文件的目录

2.3  cd /root/test

2.4  编写dockerfile文件,如下所示:

2.5  在dockerfile所在的目录准备test.sh文件

2.6  build构建镜像

3、检查并测试 

3.3  进到容器改变index.html的名称

 3.4  恢复index.html,查看healthcheck状态是否也恢复


1、介绍

        Dockerfile中使用HEALTHCHECK的形式有两种:

                        HEALTHCHECK [options] CMD command(本次详细解释)

                        HEALTHCHECK NODE 意思是禁止从父镜像继承的HEALTHCHECK生效

        下面我们主要介绍第一种形式的应用:

        HEALTHCHECK [options] CMD command中的options有三个参数可设定:

  1. interval:间隔(s秒、m分钟、h小时),从容器运行起来开始计时interval秒(或者分钟小时)进行第一次健康检查,随后每间隔interval秒进行一次健康检查;还有一种特例请看timeout解析。
  2. timeout:执行command需要时间,比如curl 一个地址,如果超过timeout秒则认为超时是错误的状态,此时每次健康检查的时间是timeout+interval秒。
  3. retries:连续检查retries次,如果结果都是失败状态,则认为这个容器是unhealth的
  4. 注意:在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)完成

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐