最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker 的健康檢測機制

 更新時間:2018年12月29日 09:42:24   作者:阿文  
這篇文章主要介紹了Docker 的健康檢測機制。即檢驗進程是否存活,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

對于容器而言,最簡單的健康檢查是進程級的健康檢查,即檢驗進程是否存活。Docker Daemon會自動監(jiān)控容器中的PID1進程,如果docker run命令中指明了restart policy,可以根據(jù)策略自動重啟已結(jié)束的容器。在很多實際場景下,僅使用進程級健康檢查機制還遠遠不夠。比如,容器進程雖然依舊運行卻由于應(yīng)用死鎖無法繼續(xù)響應(yīng)用戶請求,這樣的問題是無法通過進程監(jiān)控發(fā)現(xiàn)的。

通常我們?yōu)榱朔乐谷萜鲾嚯娀虍惓jP(guān)閉后不能自動開機,我們可以加上

--restart=always 

例如

[root@aliyun ~]# docker run --restart=always -d --name blog -d -v /www:/www -v /wwwlogs:/var/log/wwwlogs -p 65423:65422 -p 80:80 -p 443:443 677
7714a84063ee6d405c80b891254bba0e5930f5d271c5ad76cfd6e2f0058d8056

這樣容器就可以自動重啟,但是有時候程序進入死鎖狀態(tài),或者死循環(huán)狀態(tài),應(yīng)用進程并不退出,但是該容器已經(jīng)無法提供服務(wù)了。在 1.12 以前,Docker 不會檢測到容器的這種狀態(tài),從而不會重新調(diào)度,導致可能會有部分容器已經(jīng)無法提供服務(wù)了卻還在接受用戶請求。

而自 1.12 之后,Docker 提供了 HEALTHCHECK 指令,通過該指令指定一行命令,用這行命令來判斷容器主進程的服務(wù)狀態(tài)是否還正常,從而比較真實的反應(yīng)容器實際狀態(tài)。

當在一個鏡像指定了 HEALTHCHECK 指令后,用其啟動容器,初始狀態(tài)會為 starting,在 HEALTHCHECK 指令檢查成功后變?yōu)?healthy,如果連續(xù)一定次數(shù)失敗,則會變?yōu)?unhealthy。

HEALTHCHECK 支持下列選項:

  • –interval=<間隔>:兩次健康檢查的間隔,默認為 30 秒;
  • –timeout=<時長>:健康檢查命令運行超時時間,如果超過這個時間,本次健康檢查就被視為失敗,默認 30 秒;
  • –retries=<次數(shù)>:當連續(xù)失敗指定次數(shù)后,則將容器狀態(tài)視為 unhealthy,默認 3 次。和 CMD, ENTRYPOINT 一樣,HEALTHCHECK 只可以出現(xiàn)一次,如果寫了多個,只有最后一個生效。

在 HEALTHCHECK [選項] CMD 后面的命令,格式和 ENTRYPOINT 一樣,分為 shell 格式,和 exec 格式。命令的返回值決定了該次健康檢查的成功與否:0:成功;1:失敗;2:保留,不要使用這個值。

下面我們看下這個 dockerfile 文件

FROM centos
LABEL maintainer "awen Email: <hi@awen.me>"
WORKDIR /opt/

COPY CentOS7-Base-163.repo /etc/yum.repos.d/CentOS-Base.repo
COPY nginx /etc/init.d/nginx

ENV NGINX_V=1.13.5 \
  OPENSSL_V=1.0.2l \
  PCRE_V=8.41 \
  ZLIB_V=1.2.11 

RUN yum -y update \
  && yum -y install openssh-server openssl gcc gcc-c++ pcre-devel openssl-devel zlib-devel wget make perl tar net-tools \
  && wget -c -4 https://nginx.org/download/nginx-$NGINX_V.tar.gz \
  && wget -c -4 https://www.openssl.org/source/openssl-$OPENSSL_V.tar.gz \
  && wget -c -4 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-$PCRE_V.tar.gz \
  && wget -c -4 http://zlib.net/zlib-$ZLIB_V.tar.gz \
  && groupadd -r www && useradd -r -g www www \
  && tar zxvf zlib-$ZLIB_V.tar.gz \
  && cd zlib-$ZLIB_V \
  && ./configure \
  && make \
  && make install \
  && cd /opt \
  && tar zxvf pcre-$PCRE_V.tar.gz \
  && cd pcre-$PCRE_V \
  && ./configure \
  && make \
  && make install \
  && cd /opt \
  && tar zxvf openssl-$OPENSSL_V.tar.gz \
  && tar zxvf nginx-$NGINX_V.tar.gz \
  && cd nginx-$NGINX_V \
  && ./configure --prefix=/usr/local/nginx --user=www --group=www --with-pcre=/opt/pcre-$PCRE_V --with-http_ssl_module --with-zlib=/opt/zlib-$ZLIB_V --with-openssl=/opt/openssl-$OPENSSL_V --with-http_v2_module --with-http_ssl_module \
  && make \
  && make install \
  && rm -rf /opt/* \
  && mkdir -p /usr/local/nginx/ssl \
  && mkdir -p /usr/local/nginx/conf/vhost \
  && mkdir -p /var/log/wwwlogs/ \
  && mkdir -p /www/ \
  && ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' \
  && ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N '' \
  && ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' \
  && ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N '' \
  && echo "RSAAuthentication yes" >> /etc/ssh/sshd_config \
  && echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config  \
  && sed -i "s/PasswordAuthentication yes/PasswordAuthentication no/g" /etc/ssh/sshd_config \
  && sed -i "s/UsePAM yes/UsePAM no/g" /etc/ssh/sshd_config \
  && sed -i "s/#Port 22/Port 65422/g" /etc/ssh/sshd_config \
  && yum clean all \
  && mkdir /var/run/sshd \
  && chmod +x /etc/init.d/nginx \
  && rm -rf /root/*.cfg \
  && echo "Asia/Shanghai" > /etc/localtime


COPY ssl/* /usr/local/nginx/ssl/ 
COPY vhost/* /usr/local/nginx/conf/vhost/
COPY nginx.conf /usr/local/nginx/conf/
COPY ssh/* /root/.ssh/


VOLUME ["/www","/var/log/wwwlogs","/usr/local/nginx/ssl","/usr/local/nginx/conf/vhost"]

EXPOSE 65422 80 443

HEALTHCHECK CMD curl -fs http://localhost/ || exit 1
ENTRYPOINT /etc/init.d/nginx start && chown -R www:www /var/log/wwwlogs/ && /usr/sbin/sshd -D

其中

HEALTHCHECK CMD curl -fs http://localhost/ || exit 1

就是增加的健康監(jiān)測配置,然后編譯后啟動,查看進程會發(fā)現(xiàn)其狀態(tài)是 starting

[root@aliyun ~]# docker ps -a
CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS              PORTS                                NAMES
7714a84063ee    677         "/bin/sh -c '/etc/ini"  3 seconds ago    Up 2 seconds (health: starting)  0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:65423->65422/tcp  blog

稍等查看,會發(fā)現(xiàn)其狀態(tài)為 healthy

[root@aliyun ~]# docker ps -a
CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS            PORTS                                NAMES
7714a84063ee    677         "/bin/sh -c '/etc/ini"  About a minute ago  Up About a minute (healthy)  0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:65423->65422/tcp  blog

我們可以通過 inspect 查看 最近3次的狀態(tài)

[root@aliyun ~]# docker inspect --format '{{json .State.Health}}' blog | python -m json.tool
{
  "FailingStreak": 0,
  "Log": [
    {
      "End": "2017-10-11T11:15:27.516562686+08:00",
      "ExitCode": 0,
      "Output": "<html>\r\n<head><title>301 Moved Permanently</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>301 Moved Permanently</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n",
      "Start": "2017-10-11T11:15:27.470554485+08:00"
    },
    {
      "End": "2017-10-11T11:15:57.563377729+08:00",
      "ExitCode": 0,
      "Output": "<html>\r\n<head><title>301 Moved Permanently</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>301 Moved Permanently</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n",
      "Start": "2017-10-11T11:15:57.516690754+08:00"
    },
    {
      "End": "2017-10-11T11:16:27.609685416+08:00",
      "ExitCode": 0,
      "Output": "<html>\r\n<head><title>301 Moved Permanently</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>301 Moved Permanently</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n",
      "Start": "2017-10-11T11:16:27.563533362+08:00"
    },
    {
      "End": "2017-10-11T11:16:57.654441173+08:00",
      "ExitCode": 0,
      "Output": "<html>\r\n<head><title>301 Moved Permanently</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>301 Moved Permanently</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n",
      "Start": "2017-10-11T11:16:57.609810588+08:00"
    },
    {
      "End": "2017-10-11T11:17:27.701113019+08:00",
      "ExitCode": 0,
      "Output": "<html>\r\n<head><title>301 Moved Permanently</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>301 Moved Permanently</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n",
      "Start": "2017-10-11T11:17:27.654580727+08:00"
    }
  ],
  "Status": "healthy"
}

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • docker?inspect?操作詳解

    docker?inspect?操作詳解

    docker?inspect是docker客戶端的原生命令,用于查看docker對象的底層基礎(chǔ)信息。包括容器的id、創(chuàng)建時間、運行狀態(tài)、啟動參數(shù)、目錄掛載、網(wǎng)路配置等等。另外,該命令也可以用來查看docker鏡像的信息,這篇文章主要介紹了docker?inspect?詳解,需要的朋友可以參考下
    2023-01-01
  • docker搭建tomcat運行環(huán)境的實現(xiàn)步驟

    docker搭建tomcat運行環(huán)境的實現(xiàn)步驟

    很多時候我們測試web系統(tǒng)需要一個tomcat運行環(huán)境,這時docker就派上用場了,本篇文章主要介紹了docker搭建tomcat運行環(huán)境的實現(xiàn)步驟,感興趣的可以了解一下
    2017-01-01
  • Docker容器應(yīng)用中,10個要不得的壞習慣

    Docker容器應(yīng)用中,10個要不得的壞習慣

    這篇文章主要介紹了Docker容器的應(yīng)用中,10個要不得的壞習慣,幫助大家更好的理解和使用docker,感興趣的朋友可以了解下
    2020-08-08
  • docker 查看容器的掛載目錄操作

    docker 查看容器的掛載目錄操作

    這篇文章主要介紹了docker 查看容器的掛載目錄操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • docker內(nèi)部ping和ip命令的使用方式

    docker內(nèi)部ping和ip命令的使用方式

    這篇文章主要介紹了docker內(nèi)部ping和ip命令的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Docker安裝redis并且設(shè)置密碼,以及進入容器修改密碼方式

    Docker安裝redis并且設(shè)置密碼,以及進入容器修改密碼方式

    這篇文章主要介紹了Docker安裝redis并且設(shè)置密碼,以及進入容器修改密碼方式,
    2024-01-01
  • 使用docker部署spring boot并接入skywalking的方法

    使用docker部署spring boot并接入skywalking的方法

    這篇文章給大家介紹如何使用手動和docker的方式使用 skywalking的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2021-04-04
  • Docker數(shù)據(jù)存儲之Bind mounts詳解

    Docker數(shù)據(jù)存儲之Bind mounts詳解

    今天小編就為大家分享一篇關(guān)于Docker數(shù)據(jù)存儲之Bind mounts詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • docker 搭建hadoop以及hbase集群詳解

    docker 搭建hadoop以及hbase集群詳解

    本篇文章主要介紹了docker 搭建hadoop以及hbase集群詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • docker部署lnmp-wordpress的實現(xiàn)步驟

    docker部署lnmp-wordpress的實現(xiàn)步驟

    本文主要介紹了docker部署lnmp-wordpress的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論

睢宁县| 吉安市| 海南省| 磴口县| 法库县| 通州市| 大石桥市| 太康县| 唐河县| 应城市| 宁陵县| 祁门县| 顺平县| 桃园市| 綦江县| 临颍县| 灵丘县| 拉孜县| 墨竹工卡县| 丹巴县| 平阴县| 鄂托克前旗| 榆社县| 共和县| 安溪县| 兴安盟| 丽江市| 铜鼓县| 宕昌县| 株洲县| 松桃| 上蔡县| 垣曲县| 三门峡市| 昌图县| 潼南县| 成安县| 磐安县| 隆化县| 永修县| 达日县|