本文目是体验Docker容器的健康检查功能 , 以体验为主不涉及开发 , 与开发相关的内容会在后面的文章细说 。
关于容器健康检查考虑这样的情况:docker环境中 , springboot应用的容器还在 , 但已无法提供服务(例如数据或文件被破坏 , 线程池等资源被耗尽等各种异常) , 此时需要一种方式快速得知这种状态 。此时容器健康检查(即HEALTHCHECK)就派上用场了 , 只要容器按照Docker的规则提供自身状态信息 , 就可以将容器健康信息以多种方式告知外界;
版本要求【体验docker容器的健康检查功能】docker官方文档说明 , HEALTHCHECK功能从1.12版本开始提供 , 这里对docker社区版的版本号做个简介:
- 1.12版本是2016年07月28日发布的;
- 1.13.1 版本2017年02月08日发布的 , 此版本之后 , docker的版本命名规则有了变化 , 改为"YY.MM"格式;
- 17.03.0-ce版本是2017年03月01日发布的 , 从此开始了"YY.MM"格式的版本命名;
- 今天实战的docker环境是19.03.2版本;
实战环境信息
- 操作系统:macOS Catalina 10.15
- Docker:19.03.2
开始体验
- 在控制台输入以下命令 , 即可创建一个带有健康检查信息的容器:
docker run --rm --name=healthcheck -p 8080:8080 --health-cmd="curl --silent --fail localhost:8080/getstate || exit 1" --health-interval=15s --health-retries=10 --health-timeout=5s bolingcavalry/dockerhealthcheck:0.0.1-SNAPSHOT
- 上述命令中带有四个和健康检查相关的参数 , 这里解释一下:
- 参数名 作用 health-cmd 指定命令在容器内执行 , 用于检查容器健康状态 health-interval 每次健康检查的间隔时间 , 默认30秒 health-retries 假设该值为3 , 表示若连续三次检测的返回结果都是不健康 , 就判定该容器不健康 , 默认值为3 health-timeout 超时时间 , 默认30秒 关于health-cmd参数 , 最常用的是shell命令 , 例如本例中就是 , 意思是向容器的8080端口发起http请求 , 如果http响应的code为200 , 整个shell的返回值就是0 , 此时被docker判定为容器健康 , 如果http响应code不是200 , shell的返回值就是1 , 此时被docker判定为容器不健康;
- 再打开一个控制台窗口 , 执行查看容器状态 , 注意STATUS字段 , 可见刚创建容器的时候是状态 , 稍后会变为状态:
(base) zhaoqindeMacBook-Pro:~ zhaoqin$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESd86c11321cef bolingcavalry/dockerhealthcheck:0.0.1-SNAPSHOT "JAVA -Xms1g -Xmx1g …" 13 seconds ago Up 12 seconds (health: starting) 8080/tcp healthcheck(base) zhaoqindeMacBook-Pro:~ zhaoqin$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESd86c11321cef bolingcavalry/dockerhealthcheck:0.0.1-SNAPSHOT "java -Xms1g -Xmx1g …" 17 seconds ago Up 16 seconds (healthy) 8080/tcp healthcheck
- 本次实战的镜像提供了http接口 , 用于返回容器状态 , 每次被调用都会在控制台打印一行信息 , 容器日志如下:
2019-10-20 03:05:02.350 INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'2019-10-20 03:05:02.364 INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 14 ms2019-10-20 03:05:02.384 INFO 1 --- [nio-8080-exec-1] c.b.d.DockerhealthcheckApplication : step probe return success2019-10-20 03:05:17.584 INFO 1 --- [nio-8080-exec-2] c.b.d.DockerhealthcheckApplication : step probe return success2019-10-20 03:05:32.748 INFO 1 --- [nio-8080-exec-3] c.b.d.DockerhealthcheckApplication : step probe return success可见容器自启动后 , 该接口每隔15秒就会调用一次;
模拟不健康状态
- 在前面的操作中我们知道 , 只要容器的http接口的返回码是200 , 容器就被判定为健康;
- 想看看不健康状态的样子 , 只要http接口的返回码不是200就行了;
- 此镜像提供了另一个接口来方便观察不健康状态 , 假设宿主机的IP地址是102.168.0.3 , 在浏览器输入 , 该接口调用完毕后 , 的返回码就从200变成了403;
- 再去看容器的控制台信息 , 这次内容有变化了 , 从变成了 , 此时getstate接口的返回码是403:
2019-10-20 03:38:51.428 INFO 1 --- [nio-8080-exec-3] c.b.d.DockerhealthcheckApplication : step probe return success2019-10-20 03:39:06.592 INFO 1 --- [nio-8080-exec-9] c.b.d.DockerhealthcheckApplication : step probe return fail2019-10-20 03:39:21.757 INFO 1 --- [io-8080-exec-10] c.b.d.DockerhealthcheckApplication : step probe return fail2019-10-20 03:39:36.912 INFO 1 --- [nio-8080-exec-3] c.b.d.DockerhealthcheckApplication : step probe return fail
推荐阅读
-
peanut|韩国网友热议IG败给LGD:Peanut在LCK被万人喷!在LPL去打S赛了
-
解放军报|近40小时不间断!海军航空兵某团开展长航时预警探测训练
-
山川文社|以至于,中国签订了太多辱国条约,满清政府不愿意“民众觉醒”
-
车讯之家|新宝骏旅行车已上市,设计可比沃尔沃V60,6.28万起,高档却便宜
-
有啥需要花上三五天假期时间,可以一两个人在家独立完成的有趣的活动
-
-
:钓鱼也是一种享受每次日出而出日落而归,感悟人生体会快乐
-
苹果|日元贬值后遭疯抢:苹果上调日本iPhone售价 不香了
-
自然醒了就起床比较好还是继续睡回笼觉睡到闹钟响比较好
-
李云龙|难怪李云龙敢号称“富得流油”,看看意大利炮在当时有多珍贵?
-
蓓小西:镂空针织衫内搭条纹衫,手戴红绳意外时髦,白百何才是“叠穿王”
-
「童巧霞」她再度站上战“疫”前线: 无论谁受苦,都是我的一部分
-
健康王医师|常吃3种食物,排毒抗衰,养护肌肤,早吃早好,会吃的女人皮肤好
-
-
王颖谈论育儿:特朗普脸色挂不住了,病毒发源地水落石出?美媒公布重磅消息
-
上海市国有资产监督管理委员会网站|上海机场国内航班客运量“双节”创历史同期新高
-
包贝尔|包贝尔妻子可爱动人,秀身材秀蛮腰,被丈夫宠成公主
-
-
历史的客栈|有实力单挑吕布而不落败的,只有他一位,三国演义中
-
环球网|英国大臣刚说禁华为是“技术决定”,首相府又给别的说法:美国制裁导致英国改变立场