本文目是體驗docker容器的健康檢查功能,以體驗爲主不涉及開發,與開發相關的內容會在後面的文章細說。java
考慮這樣的狀況:docker環境中,springboot應用的容器還在,但已沒法提供服務(例如數據或文件被破壞,線程池等資源被耗盡等各類異常),此時須要一種方式快速得知這種狀態。 此時<font color="blue">容器健康檢查(即HEALTHCHECK)</font>就派上用場了,只要容器按照Docker的規則提供自身狀態信息,就能夠將容器健康信息以多種方式告知外界;web
docker官方文檔說明,HEALTHCHECK功能從1.12版本開始提供,這裏對docker社區版的版本號作個簡介:spring
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秒 |
(base) zhaoqindeMacBook-Pro:~ zhaoqin$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d86c11321cef 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 ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d86c11321cef bolingcavalry/dockerhealthcheck:0.0.1-SNAPSHOT "java -Xms1g -Xmx1g …" 17 seconds ago Up 16 seconds (healthy) 8080/tcp healthcheck
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 ms 2019-10-20 03:05:02.384 INFO 1 --- [nio-8080-exec-1] c.b.d.DockerhealthcheckApplication : step probe return success 2019-10-20 03:05:17.584 INFO 1 --- [nio-8080-exec-2] c.b.d.DockerhealthcheckApplication : step probe return success 2019-10-20 03:05:32.748 INFO 1 --- [nio-8080-exec-3] c.b.d.DockerhealthcheckApplication : step probe return success
可見容器自啓動後,該接口每隔15秒就會調用一次;docker
2019-10-20 03:38:51.428 INFO 1 --- [nio-8080-exec-3] c.b.d.DockerhealthcheckApplication : step probe return success 2019-10-20 03:39:06.592 INFO 1 --- [nio-8080-exec-9] c.b.d.DockerhealthcheckApplication : step probe return fail 2019-10-20 03:39:21.757 INFO 1 --- [io-8080-exec-10] c.b.d.DockerhealthcheckApplication : step probe return fail 2019-10-20 03:39:36.912 INFO 1 --- [nio-8080-exec-3] c.b.d.DockerhealthcheckApplication : step probe return fail
(base) zhaoqindeMacBook-Pro:~ zhaoqin$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 070e56cc99f2 bolingcavalry/dockerhealthcheck:0.0.1-SNAPSHOT "java -Xms1g -Xmx1g …" 18 minutes ago Up 18 minutes (unhealthy) 0.0.0.0:8080->8080/tcp healthcheck
(base) zhaoqindeMacBook-Pro:~ zhaoqin$ docker events --filter event=health_status 2019-10-20T12:19:18.349588676+08:00 container health_status: unhealthy 2d538f8752ae1e94ce23f34b7fb71c8f2ea3a075df82943ffdbe62c49ad4d6c8 (image=bolingcavalry/dockerhealthcheck:0.0.1-SNAPSHOT, name=healthcheck) 2019-10-20T12:20:19.030857534+08:00 container health_status: healthy 2d538f8752ae1e94ce23f34b7fb71c8f2ea3a075df82943ffdbe62c49ad4d6c8 (image=bolingcavalry/dockerhealthcheck:0.0.1-SNAPSHOT, name=healthcheck)
至此,docker容器健康體驗完畢,咱們已經對此功能有了基本認識,接下來實戰中,咱們會嘗試讓本身的應用容器支持健康檢查功能;shell
本文由博客一文多發平臺 OpenWrite 發佈!瀏覽器