s健康root后使用方法(s root)s健康root后使用方法(s root)

关注健康
关注真实体验

s健康root后使用方法(s root)

s健康root后使用方法(s root) 1. 介绍

1.1 介绍

福哥前面教给大家使用Dockerfile搭建TFLinux的运行环境的方法了,但是这里面有一个问题,就是Docker认为容器的ENTRYPOINT运行起来了就表示容器启动了,容器的ENTRYPOINT启动的进程没有退出就表示容器是可用的,可实际情况下这个判断方法并不是那么靠谱。

Docker在v1.12版本之后增加了healthcheck功能,该功能可以自定义容器健康状态的检测标准,通过healthcheck自定义一个检测容器是否可用的标准,这个弥补了Docker默认的判断方法的不精准的不足。

2. Dockerfile和docker-compose

2.1 Dockerfile

在Dockerfile里面定义镜像的healthcheck可以应用到基于这个镜像的所有容器。

# healthcheckHEALTHCHECK --interval=5s --timeout=5s \CMD curl -sS 'http://localhost:9200' || exit 1

这是一个Elasticsearch的健康状态检查,通过curl检查本地主机localhost上面的9200端口是否可以联通,如果无法联通就返回状态码1,因为返回非零状态码Docker就会认为当前容器的状态是不健康的。

2.2 docker-compose

在docker-compose里面定义服务的healthcheck可以真对当前服务对于的所有容器进行检测。

healthcheck:  test: ["CMD-SHELL", "curl -sS 'http://localhost:9200' || exit 1"]  interval: 5s  timeout: 5s  retries: 6

这段设置和上面的Dockerfile的设置效果是一样的,只不过它只会影响当前的服务对应的容器。

2.3 效果

因为es启动比较慢,还要装载数据到索引里面,所以即使容器起来了9200端口暂时也无法联通,这个时候的状态就是unhealthy的。

在timeout * retries的时间里都会是starting状态,超过这个时间还没有通过检查就会变成unhealthy状态,通过的话就是healthy状态。

3. 检测脚本

检测healthy状态是通过shell脚本执行的,除了可以像上面的例子那样直接写出检测步骤的代码外,还可以编写一个检测的shell脚本,调用这个脚本去实现healthy状态的检查。

3.1 healthcheck.sh

3.1.1 脚本

#!/bin/bash# argv# functionsfunction _main{  curl -sS 'http://localhost:9200' > /dev/null  [ $? -ne 0 ] && exit 1  indexCount=`curl -sS 'http://localhost:9200/_cat/indices?pretty=true' | wc -l`  [ $indexCount -eq 0 ] && exit 1  exit 0}# main_main "$@"

3.1.2 测试

放入到容器里面跑一下试试~~

3.2 Dockerfile

3.2.1 脚本

放入Dockerfile里面,使用它来检测健康状态。

# healthcheckCOPY healthcheck.sh /root/healthcheck.shHEALTHCHECK --interval=5s --timeout=5s --retries=6 \CMD /bin/bash /root/healthcheck.sh

3.2.2 效果

4. 总结

今天福哥带着童鞋们学习了Docker的健康状态HEALTHCHECK的使用方法,福哥同时给出了Dockerfile里面使用HEALTHCHECK的方法,以及docker-compose里面使用healthcheck的方法。

福哥的建议是在Dockerfile里面写上基础的健康检测,在docker-compose里面写上最终的健康检测,这样可以确保万无一失,让我们的系统更加健壮~~


https://m.tongfu.net/home/35/blog/513403.html

未经允许不得转载: 九月健康网» s健康root后使用方法(s root)
分享到: 更多 ( 0)