1.健康检查

在分布式系统中,经常需要利用健康检查机制来检查服务的可用性,防止其他服务调用时出现异常。自 1.12 版本之后,Docker 引入了原生的健康检查实现。

如何给Docke配置原生健康检查能力,在写dockerfile的时候,通过HEALTHCHECK指令就可以了

2.dockerfile如下:

FROM nginx:1.13

ADD test.sh /opt/test.sh

HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD /bin/bash /opt/test.sh

3.脚本如下:

vi /opt/test.sh

#!/bin/bash

cat /var/run/nginx.pid

if [ $? == 0 ];then

        echo 0

        exit 0

else

        echo 1

        exit 1

fi 

4.指令分析:

HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD /bin/bash /opt/test.sh

--interval 代表间隔,每隔10秒执行一次脚本

--timeout 脚本执行超时时间

--retries 脚本失败次数,3次失败,即30秒之后,标记容器为unhealthy

5.服务正常启动案例:

[root@k8s-node-1 opt]# docker run -d 10.0.0.11:5000/nginx:1.13.1

be97b9980431d326d9b745ec3f605c227caa085d50529926d27562ae1e339e39

[root@k8s-node-1 opt]# docker ps -a -l

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

be97b9980431 10.0.0.11:5000/nginx:1.13.1 "nginx -g 'daemon off" 4 seconds ago Up 3 seconds (health: starting) 80/tcp pensive_chandrasekhar

[root@k8s-node-1 opt]# docker ps -a -l

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

be97b9980431 10.0.0.11:5000/nginx:1.13.1 "nginx -g 'daemon off" 11 seconds ago Up 10 seconds (healthy) 80/tcp pensive_chandrasekhar

6.服务不正常启动案例:

[root@k8s-node-1 opt]# docker run -d 10.0.0.11:5000/nginx:1.13.1 tail -f /etc/hosts

b3b0b5a280930e40753da6174f22fd014510715c8757ad43928c2833a40a516d

[root@k8s-node-1 opt]# docker ps -a -l

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

b3b0b5a28093 10.0.0.11:5000/nginx:1.13.1 "tail -f /etc/hosts" 38 seconds ago Up 38 seconds (unhealthy) 80/tcp furious_poincare

7.容器死掉自动重启案例:

[root@k8s-node-1 opt]# docker run --restart=always -d 10.0.0.11:5000/nginx:1.13.1 sleep 40

fd1017e1ce4f063e4110689ae476f2307ab0d6ce23286f64b102a949b58f657a

[root@k8s-node-1 ~]# docker ps -a -l

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

fd1017e1ce4f 10.0.0.11:5000/nginx:1.13.1 "sleep 40" 33 seconds ago Up 32 seconds (unhealthy) 80/tcp tiny_mccarthy

[root@k8s-node-1 ~]# docker ps -a -l

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

fd1017e1ce4f 10.0.0.11:5000/nginx:1.13.1 "sleep 40" 56 seconds ago Up 14 seconds (health: starting) 80/tcp tiny_mccarthy

为你的docker容器增加一个健康检查机制的更多相关文章

  1. 通过命令验证docker容器相当一个轻量级的Linux运行环境,且每个容器内都有一个属于自己的文件系统,容器之间相互隔离

    一.docker的三个重要概念 1.镜像:打包项目带上环境,即镜像 Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的配置参数.镜像 ...

  2. 蚂蚁SOFA系列(2) - SOFABoot的Readiness健康检查机制

    作者:404,公众号404P,转载请注明出处. 前言 SOFABoot是蚂蚁金服的开源框架,在原有Spring Boot的基础上增强了不少能力,例如Readiness Check,类隔离,日志空间隔离 ...

  3. Knative Serving 健康检查机制分析

    作者|  阿里云智能事业群技术专家牛秋霖(冬岛) 导读:从头开发一个Serverless引擎并不是一件容易的事情,今天咱们就从Knative的健康检查说起.通过健康检查这一个点来看看Serverles ...

  4. Spring Cloud Alibaba Nacos 的 2 种健康检查机制!

    Spring Cloud Alibaba Nacos 作为注册中心不止提供了服务注册和服务发现功能,它还提供了服务可用性监测的机制.有了此机制之后,Nacos 才能感知服务的健康状态,从而为服务调用者 ...

  5. docker 容器跑一个应用

    虽然是个前端,但是公司比较推崇docker,感觉挺神奇,就也学了一些,再此做个笔记,以供日后回想. 我的想法是在一个centos环境中运行一个nginx服务.docker的安装就不说了,网上已经有好多 ...

  6. [Docker] 容器持久化数据的首选机制 Volume

    Volume 是 docker 容器生成持久化数据的首选机制.bind mounts 依赖主机机器的目录机构,volume 完全由 docker 管理.volume 较 bind mounts 有几个 ...

  7. Eureka心跳健康检查机制和Spring boot admin 节点状态一直为DOWN的排查(忽略某一个节点的健康检查)

    https://www.jdon.com/springcloud/eureka-health-monitoring.html 运行阶段执行健康检查的目的是为了从Eureka服务器注册表中识别并删除不可 ...

  8. 对已有的docker容器增加新的端口映射

    一般在运行容器时,我们都会通过参数 -p(使用大写的-P参数则会随机选择宿主机的一个端口进行映射)来指定宿主机和容器端口的映射,例如 docker run -it -d --name [contain ...

  9. docker 构建带健康检查的redis镜像

    =============================================== 2018/11/5_第1次修改                       ccb_warlock == ...

随机推荐

  1. python格式化字符串format的用法

    填充与对齐 填充常跟对齐一起使用 ^.<.>分别是居中.左对齐.右对齐,后面带宽度 :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充 比如 In [15]: '{:> ...

  2. 小D课堂 - 新版本微服务springcloud+Docker教程_2_01传统架构演进到分布式架构

    笔记 第二章 架构演进和分布式系统基础知识 1.传统架构演进到分布式架构     简介:讲解单机应用和分布式应用架构演进基础知识 (画图) 高可用 LVS+keepalive :负载均衡的知识点 1. ...

  3. python配置主机名

    .准备hosts模板 mkdir -p /k8s/profile cat >/k8s/profile/hosts<<EOF 192.168.0.91 test1 192.168.0. ...

  4. Hibernate5+Spring4整合

    (1) pom.xml <!--Spring Object/Relational Mapping --> <dependency> <groupId>org.spr ...

  5. 【JVM学习笔记】打破双亲委托机制的例子

    Tomcat也有自己的类加载器,比如Servlet,这些类加载器就改变了双亲委托模型的默认机制 (该主题有待深入)

  6. PI膜概述

    一.概述 1.简述 聚酞亚胺薄膜又称PI薄膜(polyimide filin)是一种含有酞亚胺或丁二酞亚胺的绝缘类高分子材料.是目前工程塑料中耐热性最好的品种之一. 2.发展简史 1908年,PI聚合 ...

  7. 一加手机刷入第三方Rec

    首先阐述一下刷机的整体流程: 备份数据(可选):短信.联系人.通话记录.图片.应用数据的云端同步. 解锁 刷入第三方Recovery(简称Rec). 进入第三方Rec,刷第三方ROM. 刷机成功 解锁 ...

  8. deepin与win10 设置共享文件

    在做预料训练时用的是基于linux环境下的kenlm训练工具,然后当时发现woc? 这这这这训练出来的语言模型居然拖不到win10下使用......当时特别二,就在linux下登录邮箱给自己发邮件23 ...

  9. 【Linux开发】彻底释放Linux线程的资源

    Linux系统中程序的线程资源是有限的,表现为对于一个程序其能同时运行的线程数是有限的.而默认的条件下,一个线程结束后,其对应的资源不会被释放,于是,如果在一个程序中,反复建立线程,而线程又默认的退出 ...

  10. 什么是java的线程安全?同步,异步

    线程是比进程更小的执行单位,是在进程基础上进行的进一步划分.所谓多线程是指进程在执行过程中可以产生多个同时存在.同时运行的线程.多进程机制可以合理利用资源,提高程序的运行效率.一个进程至少包含一个线程 ...