国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何對Docker容器進行健康檢查

這篇具有很好參考價值的文章主要介紹了如何對Docker容器進行健康檢查。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

如何對 Docker 容器進行健康檢查

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

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

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

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

▍1、 docker run 方式

這種方式是在 docker run 命令中,直接指明 healthcheck 相關設置,該方法修改起來比較方便快捷,但是要求使用者對命令行使用比較熟練。

[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

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

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

▍2、 Dockerfile 方式

可以在 Dockerfile 中通過使用HEALTHCHECK聲明應用自身的健康檢測配置。HEALTHCHECK配置了健康檢測命令,用這個命令來判斷容器主進程的服務狀態(tài)是否正常,從而比較真實的反應容器實際運行狀況。

HEALTHCHECK
指令格式:

  • HEALTHCHECK [選項] CMD <命令>
    設置檢查容器健康狀況的命令,注意CMD一直有
  • HEALTHCHECK NONE
    如果基礎鏡像有健康檢查指令,可以通過該配置屏蔽

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

使用包含HEALTHCHECK指令的 Dockerfile 構建出來的鏡像,在實例化 Docker 容器的時候,就具備了健康狀態(tài)檢查的功能。啟動容器后會自動進行健康檢查。

參數(shù)說明:

HEALTHCHECK 支持下列選項:

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

假設有個鏡像是個最簡單的 nginx 服務,我們希望增加健康檢查來判斷其 nginx服務是否在正常工作,我們可以使用 curl 來幫助檢查測試, Dockerfile 的HEALTHCHECK可以簡單這么寫:

[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 ~]# 

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

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

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

[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 中,可以使用以下方式來實現(xiàn)對容器的健康狀況檢查(下面以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

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

執(zhí)行成功后,等待數(shù)秒查詢?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

更復雜的使用請自行探索,一般也很少單獨使用。更多docker容器和運維方面的知識請前往博客主頁。文章來源地址http://www.zghlxwxcb.cn/news/detail-704691.html

到了這里,關于如何對Docker容器進行健康檢查的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 使用Docker快速搭建并優(yōu)化Redmine環(huán)境:日志管理與健康檢查指南

    Redmine是一種開源的項目管理和問題跟蹤工具,它以Web應用程序的形式提供。Redmine的主要功能包括項目管理、問題跟蹤、版本控制集成、Wiki和論壇等。它是用Ruby on Rails開發(fā)的,支持多語言和多數(shù)據(jù)庫。Redmine的靈活性和可擴展性使其成為許多組織和團隊用于協(xié)作和項目管理的

    2024年04月28日
    瀏覽(20)
  • 「快學Docker」監(jiān)控和日志記錄容器的健康和性能

    「快學Docker」監(jiān)控和日志記錄容器的健康和性能

    1. 容器健康狀態(tài)監(jiān)控 方法1:需要實時監(jiān)測容器的運行狀態(tài),包括 CPU 使用率、內(nèi)存占用、網(wǎng)絡流量等指標。 方法2:使用容器編排工具(如 Docker Compose 或 Kubernetes)來設置容器的健康檢查,確保異常容器能夠被及時重新部署或替換。 方法3:利用 Docker 自帶的健康檢查機制或第

    2024年02月05日
    瀏覽(31)
  • 當docker中容器運行時,如何將目錄和宿主機進行掛載

    容器已運行,但還想掛載文件 容器已經(jīng)運行起來了,突然想給容器的目錄進行掛載,通常是在運行容器時加上 -v? 命令 進行掛載。運行起來的容器想掛載文件夾可以通過修改容器在宿主機的配置文件進行解決。 在配置文件中加入新的掛載 1.查看容器存放目錄 2.進入該目錄

    2024年01月25日
    瀏覽(20)
  • 如何檢查docker和docker compose是否已經(jīng)安裝?

    要檢查 Docker 和 Docker Compose 是否已經(jīng)安裝在您的系統(tǒng)上,您可以在命令行中運行一些簡單的命令來驗證它們的安裝和版本。以下是具體的步驟: 檢查 Docker 是否安裝 在命令行中,運行以下命令來檢查 Docker 是否安裝以及其版本: 或者: 如果 Docker 已經(jīng)安裝,這些命令會顯示

    2024年02月02日
    瀏覽(19)
  • 如何檢查 Docker 鏡像是否存在漏洞

    如何檢查 Docker 鏡像是否存在漏洞

    今天我們來聊聊Docker鏡像。 你可能聽過Docker,但是你知道什么是Docker鏡像嗎? 如果你還不知道,別擔心,今天我們用幽默的方式來解釋一下 首先,Docker鏡像就像一份披薩的食譜。你可以把它看作是一個包含了所有制作披薩所需的材料和步驟的清單。 類似地,Docker鏡像包含了

    2023年04月24日
    瀏覽(19)
  • 電腦硬盤檢測怎么操作?如何檢查硬盤的健康情況?

    電腦硬盤檢測怎么操作?如何檢查硬盤的健康情況?

    【我的電腦硬盤中有許多重要的數(shù)據(jù),我想知道電腦硬盤的健康狀況怎么樣?有沒有小伙伴知道電腦硬盤檢測的方法?】 電腦硬盤是存儲數(shù)據(jù)的關鍵組件,而隨著時間的推移和使用頻率的增加,硬盤可能會出現(xiàn)各種故障。因此,了解如何進行電腦 硬盤檢測 是非常重要的。本

    2024年02月16日
    瀏覽(25)
  • 如何檢查Windows 11筆記本電腦電池健康狀況

    如何檢查Windows 11筆記本電腦電池健康狀況

    如果你擁有一臺運行微軟最新操作系統(tǒng)的便攜式電腦,那么檢查Windows 11筆記本電腦的電池健康狀況可能很重要。 電池壽命顯然是一件大事,無論你是在最好的商務筆記本電腦上工作,還是在目前市場上最好的游戲筆記本電腦上享受馬拉松式的Starfield會議。 值得慶幸的是,調

    2024年02月09日
    瀏覽(103)
  • docker基于已有容器和通過Dockerfile進行制作鏡像配置介紹

    目錄 一.制作鏡像的兩種方式 1.在已有容器中更新并提交這個鏡像 2.使用Dockerfile來制作 二.基于容器制作鏡像 1.格式 (1)主要格式 (2)可選參數(shù) 2.案例 基于容器創(chuàng)建鏡像設置標簽并進行驗證是否可用 (1)運行容器并寫入驗證內(nèi)容(改變?nèi)萜鞔鎯觾?nèi)容) (2)另起終端制

    2024年02月11日
    瀏覽(107)
  • 【Python編程工具】【ssh連接Docker容器】如何使用Docker容器里的python環(huán)境,如何調試在容器中的代碼

    【Python編程工具】【ssh連接Docker容器】如何使用Docker容器里的python環(huán)境,如何調試在容器中的代碼

    本篇博客將介紹如何在Docker容器中打開SSH連接服務,以及如何使用JetBrains Gateway軟件進行代碼調試。 JetBrains Gateway是一款緊湊型桌面應用,可讓您通過 JetBrains IDE 遠程工作,甚至無需下載這些IDE。通過在桌面端安裝這款軟件,您可以直接調試服務器上的代碼。 使用以下命令啟

    2024年01月25日
    瀏覽(21)
  • docker:如何將本地文件復制到docker容器內(nèi)

    docker:如何將本地文件復制到docker容器內(nèi)

    我們通過docker cp指令來將容器外文件傳遞到docker容器內(nèi) 1、查看容器ID 2、將本地文件復制到docker容器中 舉例: 或者通過容器名

    2024年02月11日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包