亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Docker容器進(jìn)行健康檢查的三種方式

 更新時(shí)間:2023年06月15日 15:08:03   作者:margu_168  
這篇文章主要介紹了如何對(duì)Docker容器進(jìn)行健康檢查,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

如何對(duì) Docker 容器進(jìn)行健康檢查

熟悉使用過(guò)kubernetes的人應(yīng)該知道,kubernetes支持對(duì)pod進(jìn)行健康檢查的功能,這對(duì)生產(chǎn)業(yè)務(wù)來(lái)說(shuō)其實(shí)是非常有用處的,能快速發(fā)現(xiàn)服務(wù)不可用,并進(jìn)行快速重啟恢復(fù)。其實(shí)不使用kubernetes這種容器管理工具,docker自身也能實(shí)現(xiàn)對(duì)容器的健康檢查。
從docker 1.12 版本之后,Docker 實(shí)現(xiàn)了原生的健康檢查實(shí)現(xiàn)。對(duì)于容器而言,最簡(jiǎn)單的健康檢查是進(jìn)程級(jí)的健康檢查,即檢驗(yàn)進(jìn)程是否存活。Docker Daemon 會(huì)自動(dòng)監(jiān)控容器中的 PID1 進(jìn)程,如果 docker run 命令中指明了 restart policy,可以根據(jù)重啟策略自動(dòng)重啟已結(jié)束的容器。但是在很多實(shí)際應(yīng)用中,僅使用進(jìn)程級(jí)健康檢查方式還遠(yuǎn)遠(yuǎn)不夠。比如,容器中進(jìn)程雖然還在運(yùn)行卻由于其他種種原因無(wú)法繼續(xù)響應(yīng)用戶(hù)請(qǐng)求(如應(yīng)用死鎖),這樣的問(wèn)題是無(wú)法通過(guò)進(jìn)程級(jí)監(jiān)控發(fā)現(xiàn)的。

容器啟動(dòng)之后,初始狀態(tài)會(huì)為 starting (啟動(dòng)中)。Docker Engine 會(huì)等待 interval 時(shí)間,開(kāi)始執(zhí)行健康檢查命令,并周期性執(zhí)行。如果單次檢查返回值非 0 或者運(yùn)行需要比指定 timeout 時(shí)間還長(zhǎng),則本次檢查被認(rèn)為失敗;如果健康檢查連續(xù)失敗超過(guò)了 retries 重試次數(shù),狀態(tài)就會(huì)變?yōu)?unhealthy (不健康)。

1) 過(guò)程中有一次健康檢查成功,Docker 會(huì)將容器標(biāo)記為healthy (健康)狀態(tài)

2) 當(dāng)容器的健康狀態(tài)發(fā)生變化時(shí),Docker Engine 會(huì)發(fā)出一個(gè) health_status 事件。通過(guò)檢查容器監(jiān)控狀態(tài)這里介紹以下三種方式

1、 docker run 方式

這種方式是在 docker run 命令中,直接指明 healthcheck 相關(guān)設(shè)置,該方法修改起來(lái)比較方便快捷,但是要求使用者對(duì)命令行使用比較熟練。

[root@k8s-m1 ~]# docker ps -l
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS                        PORTS     NAMES
80726f760696   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute (healthy)   80/tcp    nginx-test
[root@k8s-m1 ~]#  docker run  -d --name=nginx-test --health-cmd="curl http://localhost/ || exit 1" --health-interval=5s --health-retries=6  --health-timeout=3s nginx

對(duì)命令行不熟悉的,可以通過(guò)執(zhí)行docker run --help | grep health

命令查看相關(guān)的參數(shù)及解釋如下:
– health-cmd string 運(yùn)行檢查健康狀況的命令
–health-interval duration 運(yùn)行間隔時(shí)間(ms|s|m|h)(缺省為 0s)
–health-retries int 需要報(bào)告不健康的連續(xù)失敗次數(shù)
–health-start-period duration 容器在開(kāi)始健康之前初始化的起始周期(ms|s|m|h)(默認(rèn) 0)
–health-timeout duration 允許一次檢查運(yùn)行的最大時(shí)間(ms|s|m|h)(默認(rèn)為 0s)
–no-healthcheck 禁用任何容器指定的HEALTHCHECK,會(huì)使 Dockerfile 構(gòu)建設(shè)置的HEALTHCHECK
功能失效

2、 Dockerfile 方式

可以在 Dockerfile 中通過(guò)使用HEALTHCHECK聲明應(yīng)用自身的健康檢測(cè)配置。HEALTHCHECK配置了健康檢測(cè)命令,用這個(gè)命令來(lái)判斷容器主進(jìn)程的服務(wù)狀態(tài)是否正常,從而比較真實(shí)的反應(yīng)容器實(shí)際運(yùn)行狀況。

  • HEALTHCHECK

指令格式:

  • HEALTHCHECK [選項(xiàng)] CMD <命令>

設(shè)置檢查容器健康狀況的命令,注意CMD一直有HEALTHCHECK NONE
如果基礎(chǔ)鏡像有健康檢查指令,可以通過(guò)該配置屏蔽

注 :和cmd、entrypoint一樣,在 Dockerfile 中HEALTHCHECK只可以出現(xiàn)一次,如果寫(xiě)了多個(gè),只有最后一個(gè)生效。
HEALTHCHECK 返回值,決定了該次健康檢查的成功與否:0:成功;1:失??;2:保留(不要使用這個(gè)值)

使用包含HEALTHCHECK指令的 Dockerfile 構(gòu)建出來(lái)的鏡像,在實(shí)例化 Docker 容器的時(shí)候,就具備了健康狀態(tài)檢查的功能。啟動(dòng)容器后會(huì)自動(dòng)進(jìn)行健康檢查。

參數(shù)說(shuō)明:

HEALTHCHECK 支持下列選項(xiàng):

  • --interval=<間隔>:兩次健康檢查的間隔,默認(rèn)為 30 秒;
  • --timeout=<間隔>:健康檢查命令運(yùn)行超時(shí)時(shí)間,如果超過(guò)這個(gè)時(shí)間,本次健康檢查就被視為失敗,默認(rèn) 30 秒;
  • --retries=<次數(shù)>:當(dāng)連續(xù)失敗指定次數(shù)后,則將容器狀態(tài)視為 unhealthy,默認(rèn)3次,如果正常的話(huà)好像會(huì)一直檢查下去,可自行測(cè)試。
  • --start-period=<間隔>: 應(yīng)用的啟動(dòng)的初始化時(shí)間,在啟動(dòng)過(guò)程中的健康檢查失效不會(huì)計(jì)入,默認(rèn) 0 秒,需要一定啟動(dòng)時(shí)間的服務(wù)最好設(shè)置;

假設(shè)有個(gè)鏡像是個(gè)最簡(jiǎn)單的 nginx 服務(wù),我們希望增加健康檢查來(lái)判斷其 nginx服務(wù)是否在正常工作,我們可以使用 curl 來(lái)幫助檢查測(cè)試, Dockerfile 的HEALTHCHECK可以簡(jiǎn)單這么寫(xiě):

[root@k8s-m1 ~]vim Dockerfile
FROM nginx
HEALTHCHECK --interval=5s --timeout=3s  CMD curl  http://localhost/ || exit 1
[root@k8s-m1 ~]docker build -t nginx:v1 .
[root@k8s-m1 ~]docker run -d --name webtest -p 80:80 nginx:v1  
[root@k8s-m1 ~]# docker ps -l
CONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS                            PORTS                NAMES
c4dcff064e99   nginx:v1   "/docker-entrypoint.…"   5 seconds ago   Up 4 seconds (health: starting)   0.0.0.0:80->80/tcp   webtest
[root@k8s-m1 ~]# docker ps -l
CONTAINER ID   IMAGE      COMMAND                  CREATED          STATUS                   PORTS                NAMES
c4dcff064e99   nginx:v1   "/docker-entrypoint.…"   10 seconds ago   Up 9 seconds (healthy)   0.0.0.0:80->80/tcp   webtest
[root@k8s-m1 ~]# 

這里設(shè)置了每 5 秒檢查一次,如果健康檢查命令超過(guò) 3 秒沒(méi)響應(yīng),并且重試 3 次都沒(méi)響應(yīng)就視為失敗,并且使用curl http://localhost/ || exit 1,可以根據(jù)自己的業(yè)務(wù)自行調(diào)整檢查命令。構(gòu)建好后啟動(dòng)一個(gè)容器實(shí)例,看到最初的狀態(tài)為(health: starting),在等待幾秒鐘后,再次docker ps -l,就可以看到健康狀態(tài)變化為了(healthy)。

當(dāng)然如果健康檢查連續(xù)失敗超過(guò)了重試次數(shù),狀態(tài)就會(huì)變?yōu)?code>(unhealthy)

為了幫助排障,健康檢查命令的輸出(包括stdout以及stderr)都會(huì)被存儲(chǔ)于健康狀態(tài)里,可以用 docker inspect來(lái)查看。

[root@k8s-m1 ~]#  docker inspect --format '{{json .State.Health}}' webtest | python -m json.tool
{
    "Status": "healthy",
    "FailingStreak": 0,
    "Log": [
        {
            "Start": "2023-06-12T10:33:48.163431699+08:00",
            "End": "2023-06-12T10:33:48.303906069+08:00",
            "ExitCode": 0,
            "Output": "  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n\r  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0\r100   615  100   615    0     0   600k      0 --:--:-- --:--:-- --:--:--  600k\n<!DOCTYPE html>\n<html>\n<head>\n<title>Welcome to nginx!</title>\n<style>\nhtml { color-scheme: light dark; }\nbody { width: 35em; margin: 0 auto;\nfont-family: Tahoma, Verdana, Arial, sans-serif; }\n</style>\n</head>\n<body>\n<h1>Welcome to nginx!</h1>\n<p>If you see this page, the nginx web server is successfully installed and\nworking. Further configuration is required.</p>\n\n<p>For online documentation and support please refer to\n<a href=\"http://nginx.org/\">nginx.org</a>.<br/>\nCommercial support is available at\n<a href=\"http://nginx.com/\">nginx.com</a>.</p>\n\n<p><em>Thank you for using nginx.</em></p>\n</body>\n</html>\n"

3、 docker-composer 方式

在 docker-compose 中,可以使用以下方式來(lái)實(shí)現(xiàn)對(duì)容器的健康狀況檢查(下面以nginx為例,也可以參考Harbor的docker-compose文件):

version: '3'
services:
  myapp:
    image: nginx
    container_name: healthcheck
    healthcheck:
      test: ["CMD", "curl", "-fs", "http://localhost/"]
      interval: 6s
      timeout: 3s
      retries: 3

#設(shè)置初次檢查等待6s,每次檢查超時(shí)設(shè)置為3s,總共檢查3次,如果3次都失敗則判斷為健康檢查不通過(guò)。過(guò)程中有一次檢查通過(guò)則判斷為健康。

執(zhí)行成功后,等待數(shù)秒查詢(xún)?nèi)萜鞯臓顟B(tài):

[root@k8s-m1 hewei]# docker ps -l
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS                            PORTS     NAMES
46e1d11e2431   nginx     "/docker-entrypoint.…"   3 seconds ago   Up 3 seconds (health: starting)   80/tcp    healthcheck
[root@k8s-m1 hewei]# docker ps -l
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                            PORTS     NAMES
46e1d11e2431   nginx     "/docker-entrypoint.…"   6 seconds ago   Up 8 seconds (health: starting)   80/tcp    healthcheck
[root@k8s-m1 hewei]# docker-compose  ps
   Name                  Command                  State       Ports 
--------------------------------------------------------------------
healthcheck   /docker-entrypoint.sh ngin ...   Up (healthy)   80/tcp

更復(fù)雜的使用請(qǐng)自行探索,一般也很少單獨(dú)使用。更多docker容器和運(yùn)維方面的知識(shí)請(qǐng)前往博客主頁(yè)。

到此這篇關(guān)于如何對(duì)Docker容器進(jìn)行健康檢查的文章就介紹到這了,更多相關(guān)Docker容器健康檢查內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • iptables使用及docker的iptables規(guī)則

    iptables使用及docker的iptables規(guī)則

    Docker在創(chuàng)建容器時(shí),會(huì)自動(dòng)添加一些iptables規(guī)則來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)隔離和轉(zhuǎn)發(fā)等功能,本文主要介紹了iptables使用及docker的iptables規(guī)則,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • 一步步詳解如何在Ubuntu?18.04上安裝Docker

    一步步詳解如何在Ubuntu?18.04上安裝Docker

    Docker是基于Go語(yǔ)言實(shí)現(xiàn)的云開(kāi)源項(xiàng)目,下面這篇文章主要給大家介紹了關(guān)于如何在Ubuntu?18.04上安裝Docker的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Docker安裝MySQL并使用Navicat連接的操作方法

    Docker安裝MySQL并使用Navicat連接的操作方法

    這篇文章主要介紹了Docker安裝MySQL并使用Navicat連接,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • 在docker下刪除兩個(gè)id相同的鏡像的操作

    在docker下刪除兩個(gè)id相同的鏡像的操作

    這篇文章主要介紹了在docker下刪除兩個(gè)id相同的鏡像的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Docker容器網(wǎng)絡(luò)更改的實(shí)現(xiàn)

    Docker容器網(wǎng)絡(luò)更改的實(shí)現(xiàn)

    本文主要介紹了Docker容器網(wǎng)絡(luò)更改的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • docker 免root權(quán)限登陸的解決方案

    docker 免root權(quán)限登陸的解決方案

    這篇文章主要介紹了docker 免root權(quán)限登陸的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Docker本地鏡像的導(dǎo)出導(dǎo)入兩種方案介紹

    Docker本地鏡像的導(dǎo)出導(dǎo)入兩種方案介紹

    這篇文章主要介紹了Docker本地鏡像的導(dǎo)出導(dǎo)入兩種方案的相關(guān)資料,兩種方法分別是export/import和save/load兩種方案,文中并對(duì)比了它們的差別和應(yīng)用場(chǎng)景,需要的朋友可以參考下
    2025-03-03
  • Docker安裝RabbitMQ的超詳細(xì)步驟

    Docker安裝RabbitMQ的超詳細(xì)步驟

    RabbitMQ是一套開(kāi)源的消息隊(duì)列服務(wù)軟件,是由LShift提供的一個(gè) Advanced Message Queuing Protocol的開(kāi)源實(shí)現(xiàn),由以高性能、健壯以及可伸縮性出名的 Erlang 寫(xiě)成,這篇文章主要給大家介紹了關(guān)于Docker安裝RabbitMQ的超詳細(xì)步驟,需要的朋友可以參考下
    2022-08-08
  • docker-compose之基本語(yǔ)法解讀

    docker-compose之基本語(yǔ)法解讀

    這篇文章主要介紹了docker-compose之基本語(yǔ)法解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • iptables如何限制宿主機(jī)跟Docker IP和端口訪問(wèn)(安全整改)

    iptables如何限制宿主機(jī)跟Docker IP和端口訪問(wèn)(安全整改)

    本文詳細(xì)介紹了如何通過(guò)iptables對(duì)網(wǎng)絡(luò)訪問(wèn)進(jìn)行限制,包括限制特定IP或網(wǎng)段訪問(wèn)特定服務(wù),以及在Docker環(huán)境下,如何設(shè)置DOCKER-USER鏈限制IP和端口訪問(wèn),確保網(wǎng)絡(luò)安全
    2024-10-10

最新評(píng)論