91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

docker容器健康檢查怎么實現

發布時間:2021-12-13 14:39:58 來源:億速云 閱讀:252 作者:iii 欄目:云計算

本篇內容介紹了“docker容器健康檢查怎么實現”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

關于容器健康檢查

考慮這樣的情況:docker環境中,springboot應用的容器還在,但已無法提供服務(例如數據或文件被破壞,線程池等資源被耗盡等各種異常),此時需要一種方式快速得知這種狀態。 此時<font color="blue">容器健康檢查(即HEALTHCHECK)</font>就派上用場了,只要容器按照Docker的規則提供自身狀態信息,就可以將容器健康信息以多種方式告知外界;

版本要求

docker官方文檔說明,HEALTHCHECK功能從1.12版本開始提供,這里對docker社區版的版本號做個簡介:

  1. 1.12版本是2016年07月28日發布的;

  2. 1.13.1 版本2017年02月08日發布的,此版本之后,docker的版本命名規則有了變化,改為"YY.MM"格式;

  3. 17.03.0-ce版本是2017年03月01日發布的,從此開始了"YY.MM"格式的版本命名;

  4. 今天實戰的docker環境是19.03.2版本;

實戰環境信息

  1. 操作系統:macOS Catalina 10.15

  2. Docker:19.03.2

開始體驗

  1. 在控制臺輸入以下命令,即可創建一個帶有健康檢查信息的容器:

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
  1. 上述命令中帶有四個和健康檢查相關的參數,這里解釋一下:

參數名作用
health-cmd指定命令在容器內執行,用于檢查容器健康狀態
health-interval每次健康檢查的間隔時間,默認30秒
health-retries假設該值為3,表示若連續三次檢測的返回結果都是不健康,就判定該容器不健康,默認值為3
health-timeout超時時間,默認30秒
  1. 關于health-cmd參數,最常用的是shell命令,例如本例中就是<font color="blue">curl --silent --fail localhost:8080/getstate || exit 1</font>,意思是向容器的8080端口發起http請求,如果http響應的code為200,整個shell的返回值就是0,此時被docker判定為容器健康,如果http響應code不是200,shell的返回值就是1,此時被docker判定為容器不健康;

  2. 再打開一個控制臺窗口,執行<font color="blue">docker ps</font>查看容器狀態,注意STATUS字段,可見剛創建容器的時候是<font color="red">health: starting</font>狀態,稍后會變為<font color="red">healthy</font>狀態:

(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
  1. 本次實戰的鏡像提供了http接口<font color="blue">localhost:8080/getstate</font>,用于返回容器狀態,每次被調用都會在控制臺打印一行信息,容器日志如下:

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秒就會調用一次;

模擬不健康狀態

  1. 在前面的操作中我們知道,只要容器的http接口<font color="blue">localhost:8080/getstate</font>的返回碼是200,容器就被判定為健康;

  2. 想看看不健康狀態的樣子,只要http接口<font color="blue">localhost:8080/getstate</font>的返回碼不是200就行了;

  3. 此鏡像提供了另一個接口來方便觀察不健康狀態,假設宿主機的IP地址是102.168.0.3,在瀏覽器輸入<font color="blue">192.168.0.3:8080/setstate?state=false</font>,該接口調用完畢后,<font color="blue">localhost:8080/getstate</font>的返回碼就從200變成了403;

  4. 再去看容器的控制臺信息,這次內容有變化了,從<font color="blue">step probe return success</font>變成了<font color="red">step probe return fail</font>,此時getstate接口的返回碼是403:

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
  1. 前面在創建容器時的health-retries參數的值是10,意味著<font color="blue">localhost:8080/getstate</font>連續10次返回碼非200才會被判定為不健康,因此,在控制臺連續十次輸出<font color="blue">step probe return fail</font>之前,執行docker ps命令觀察容器狀態,應該還是<font color="red">healthy</font>,超過十次<font color="blue">step probe return fail</font>輸出之后,再去看容器狀態,就變成了<font color="red">healthy</font>:

(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
  1. 恢復健康狀態:在瀏覽器輸入<font color="blue">192.168.0.3:8080/setstate?state=true</font>,這樣<font color="blue">localhost:8080/getstate</font>接口的返回碼又變成了200,觀察控制臺,只要"step probe return success"輸出一次,容器健康狀態就恢復為healthy了;

觀察容器事件

  1. 在控制臺輸入<font color="blue">docker events --filter event=health_status</font>,即可觀察宿主機上所有的容器健康狀態事件;

  2. 按照上面的操作,在瀏覽器輸入<font color="blue">192.168.0.3:8080/setstate?state=true</font>或者<font color="blue">192.168.0.3:8080/setstate?state=false</font>,將容器的健康狀態轉變幾次,可以觀察到容器事件變化:

(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容器健康檢查怎么實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平顺县| 敦化市| 宜君县| 句容市| 疏附县| 龙口市| 城步| 昌邑市| 凉城县| 枣阳市| 隆化县| 易门县| 寻甸| 孝感市| 饶平县| 福贡县| 临洮县| 鄂温| 宜兴市| 佛山市| 布尔津县| 常宁市| 内丘县| 上林县| 塔城市| 永福县| 池州市| 顺昌县| 彭泽县| 宾阳县| 隆回县| 嘉善县| 咸阳市| 桃源县| 富裕县| 汶川县| 饶河县| 沅陵县| 新闻| 海城市| 嘉鱼县|