Docker容器基础知识

一、增加linux的dns(永久)

1、运行命令:

cd /etc/sysconfig/network-scripts/
ls

2、找到该目录下的网卡配置文件如:ifcfg-ens32,在其中添加三行,如果文件中已经有了DNS,就先删除再添加:

PEERD=no
DNS1=8.8.8.8
DNS2=114.144.114.114

3、添加完之后运行命令:

#重启网络服务,使更改生效
service network restart

4、重启系统看dns是否还存在

二、docker安装

1、用yum国内源

备份:mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

2、添加docker yum源

sudo yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo

之后运行yum makecache生成缓存

3、删除以前版本的docker

删除上次的docker目录
rm -rf /var/lib/docker/
rm -rf /var/run/docker/

sudo yum remove docker docker-common docker-selinux docker-engine

4、用yum安装

执行以下命令安装依赖包:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
安装docker-ce
sudo yum install docker-ce

5、启动 Docker CE

sudo systemctl enable docker
sudo systemctl start docker
— sudo:是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具
— systemctl:是一个系统管理守护进程、工具和库的集合,用于取代System V、service和chkconfig命令,初始进程主要负责控制systemd系统和服务管理器。通过Systemctl –help可以看到该命令主要分为:查询或发送控制命令给systemd服务,管理单元服务的命令,服务文件的相关命令,任务、环境、快照相关命令,systemd服务的配置重载,系统开机关机相关的命令

6、建立 docker 用户组

默认情况下, docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统 上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。
–建立 docker 组:
sudo groupadd docker
–将当前用户加入 docker 组:
sudo usermod -aG docker qinhe 退出当前终端并重新登录,进行如下测试。

7、重启 docker 服务

sudo service docker restart

切换当前会话到新 group 或者重启 X 会话
newgrp - docker

8、镜像加速器

国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国
内很多云服务商都提供了国内加速器服务,例如:
https://cr.console.aliyun.com/?spm=a2c4e.11153940.blogcont29941.9.538f69d6xKBg35#/accelerator

如何配置镜像加速器
针对Docker客户端版本大于1.10.0的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://cup2aba1.mirror.aliyuncs.com“]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

上面配置可能是错的:

用这个:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s https://cup2aba1.mirror.aliyuncs.com

sudo sed -i “s|ExecStart=/usr/bin/dockerd|ExecStart=/usr/bin/dockerd –registry-mirror=https://cup2aba1.mirror.aliyuncs.com|g” /etc/systemd/system/docker.service
sudo systemctl daemon-reload
sudo service docker restart

在命令行 执行 docker info ,如果从结果中看到了如下内容,说明配置成功。

这里写图片描述

9、测试 Docker 是否安装正确

docker run hello-world

Unable to find image ‘hello-world:latest’ locally
latest: Pulling from library/hello-world
ca4f61b1923c: Pull complete
Digest: sha256:be0cd392e45be79ffeffa6b05338b98ebb16c87b255f48e297ec7f98e123905c
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the “hello-world” image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://cloud.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
若能正常输出以上信息,则说明安装成功。

用阿里云镜像会很慢,可以用这个:
http://hub-mirror.c.163.com/

10、配置阿里云镜像仓库

创建阿里云镜像仓库:

这里写图片描述

–登录阿里云docker registry:
sudo docker login –[email protected] registry.cn-hangzhou.aliyuncs.com
登录registry的用户名是您的阿里云账号全名,密码是您开通服务时设置的密码。
你可以在镜像管理首页点击右上角按钮修改docker login密码。

–将镜像推送到registry:
sudo docker login –[email protected] registry.cn-hangzhou.aliyuncs.com
sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/qinhe/qinhe_repository:[镜像版本号]
sudo docker push registry.cn-hangzhou.aliyuncs.com/qinhe/qinhe_repository:[镜像版本号]
其中[ImageId],[镜像版本号]请你根据自己的镜像信息进行填写。

–从registry中拉取镜像:
sudo docker pull registry.cn-hangzhou.aliyuncs.com/qinhe/qinhe_repository:[镜像版本号]

–注意您的网络环境
从ECS推送镜像时,可以选择走内网,速度将大大提升,并且将不会损耗您的公网流量。
如果您申请的机器是在经典网络,请使用 registry-internal.cn-hangzhou.aliyuncs.com 作为registry的域名登录, 并作为镜像名空间前缀
如果您申请的机器是在vpc网络的,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为registry的域名登录, 并作为镜像名空间前缀

–sample:
使用docker tag重命名镜像,并将它通过推送至registry:
①、sudo docker login –[email protected] registry.cn-hangzhou.aliyuncs.com
输入密码
②、sudo docker images
这里写图片描述

③、tag
sudo docker tag hello-world registry.cn-hangzhou.aliyuncs.com/qinhe/qinhe_repository/hello-world:he
这里写图片描述

④、push
sudo docker push registry.cn-hangzhou.aliyuncs.com/qinhe/qinhe_repository/hello-world:he
出错:仓库名不对
这里写图片描述

⑤、tag
sudo docker tag hello-world registry.cn-hangzhou.aliyuncs.com/qinhe/qinhe_repository:he

这里写图片描述

⑥、push
sudo docker push registry.cn-hangzhou.aliyuncs.com/qinhe/qinhe_repository:he
成功
这里写图片描述

⑦、阿里云仓库

这里写图片描述

11、pull centos7

docker pull centos:7 

12、run centos7

docker run -it –rm centos:7 bash
docker run 就是运行容器的命令,具体格式我们会在 容器 一节进行详细讲解,我们这里简
要的说明一下上面用到的参数。
-it :这是两个参数,一个是 -i :交互式操作,一个是 -t 终端。我们这里打算进入bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
–rm :这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm 。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 –rm 可以避免浪费空间。
bash :放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash 。进入容器后,我们可以在 Shell 下操作,执行任何所需的命令。这里,我们执行了 cat/etc/os-release ,这是 Linux 常用的查看当前系统版本的命令,最后我们通过 exit 退出了这个容器。

-d: 后台运行容器,并返回容器ID;某些时候需要进入容器进行操作,包括使用 docker attach 命令或 docker exec 命令,推荐 大家使用 docker exec 命令
–name=”nginx-lb”: 为容器指定一个名称;
–dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
–dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h “mars”: 指定容器的hostname;
-e username=”ritchie”: 设置环境变量;
–env-file=[]: 从指定文件读入环境变量;
–cpuset=”0-2” or –cpuset=”0,1,2”: 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
–net=”bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
–link=[]: 添加链接到另一个容器;
–expose=[]: 开放一个端口或一组端口
docker run -d –name centos centos:7
运行了就关闭了,因为 Docker容器后台运行,就必须有一个前台进程.容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的
可以这样:
docker run -itd –name centos centos:7
或者:
docker run -it –name centos centos:7
然后ctrl+Q+P 退出交互式终端但不退出容器
或者:
docker run -it –name centos centos:7 ping 127.0.0.1
查看日志:
docker logs -ft –tail=1 37

这里写图片描述

四、如何通过Dockerfile快速构建镜像

接下来,我们通过构建一个Tomcat镜像,来演示Dockerfile的使用方法,当然前提是你的电脑安装了Docker环境,如何安装Docker环境就不在此赘述了。

1、创建一个Dockerfile

Dockerfile命名必须为“Dockerfile”,Docker镜像构建时,会查找指定目录中的Dockerfile。

2、编写Dockerfile

(1)环境配置
FROM ubuntu:14.04
通过FROM指令,Docker编译程序能够知道通过哪个基础镜像执行来进行编译。所有的Dockerfile都必须以FROM指令开始。通过该指令,我们相当于有了一个最基本的Ubuntu系统。
(2)其他环境配置
MAINTAINER example [email protected]
另外我们需要指定时区,否则我们做出的镜像可能会跟当前时间不符。
RUN echo “Asia/Shanghai” > /etc/timezone;dpkg-reconfigure -f noninteractive tzdata
我们可以像在电脑上安装Tomcat一样,把Tomcat安装在Docker容器中。
(3)Tomcat必要软件安装。
我们此时使用的Ubuntu系统其实是很简陋的系统,上面很多系统都没有。所以我先安装一些必要的软件。
RUN apt-get update && apt-get install -y curl vim net-tools && \
rm -rf /var/lib/apt/lists/* && mkdir -p /app
RUN指令用来在Docker的编译环境中运行指定命令。这里我安装了curl、vim、net-tools,其中curl用来获取java和tomcat的安装包,vim和net-tools用来调试,并创建了/app目录。
(4)指定工作目录
使用 WORKDIR /app 可以将工作目录定位到/app 目录下
(5)获取安装软件
我们使用第 (3)步安装的 curl 工具来获取安装包。
RUN curl -L ‘http://download.oracle.com/otn-pub/java/jdk/7u65-b17/jdk-7u65-linux-x64.tar.gz’ -H ‘Cookie: oraclelicense=accept-securebackup-cookie; gpw_e24=Dockerfile’ | tar -xz \
&& curl -L ‘http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.8/bin/apache-tomcat-7.0.8.tar.gz’ | tar -xz
以上命令将会从指定地址下载安装包,并解压到当前目录(上一步我们指定了工作空间为/app,所以会解压到此目录下)
(6)指定运行脚本
截止到上一步,我们已经将需要的准备工作都做好了,剩下的还有Java环境变量的设置,Tomcat环境变量设置(非必须)和Tomcat的启动。
COPY tomcat7.sh /app/tomcat7.sh
RUN chmod +x /app/tomcat7.sh
上面的两行命令会将与Dockerfile同级目录的tomcat7.sh文件上传到docker容器中的/app目录下,并且给该文件赋予可执行的权限。
看一眼该脚本的内容便一目了然了。
Java环境变量配置

export JAVA_HOME=/app/jdk1.7.0_65 
export PATH=$JAVA_HOME/bin:$PATH 
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar # Tomcat环境变量配置 
export TOMCAT_HOME=/app/apache-tomcat-7.0.8 
export PATH=$TOMCAT_HOME/bin:$PATH # 启动 Tomcat 
exec $TOMCAT_HOME/bin/catalina.sh run

(7)指定端口
EXPOSE 8080
通常情况下,Tomcat启动后会监听8080端口,在容器中也一样。
EXPOSE指令用于标明,这个镜像中的应用将会侦听某个端口,并且希望能将这个端口映射到主机的网络界面上
(8)指定脚本的运行
至此,我们要做的准备工作就做完了。使用下面这条命令,运行我们在第6步创建的脚本,一个简单的Tomcat的Dockerfile就编写完成了。
ENTRYPOINT [“/app/tomcat7.sh”]
ENTRYPOINT 用于标明一个镜像作为容器运行时,最后要执行的程序或命令。

3.构建镜像

进入Dockerfile所在目录,运行命令 docker build -t mytomcat .(注意最后有个点用来表示当前目录,初次构建速度会比较慢,需要多等一会。)

这里写图片描述

出现如下信息就构建成功了

这里写图片描述

4.运行Docker容器

docker run -i -t -p 5000:8080 mytom
其中,docker run 用于运行一个容器
• -t 在容器指定一个伪终端或者终端;
• -i 进行命令交互;
• -p 匹配镜像内的网络端口号,即我们可以通过宿主机中访问5000端口来达到访问容器8080端口的目的。

5.查看构建好的镜像和运行的容器

docker images #查看镜像
这里写图片描述

docker ps -a #查看所有的容器
这里写图片描述

6.查看服务是否运行

在宿主机中我们输入localhost:5000访问,出现如下界面,表示Tomcat成功运行。

这里写图片描述

至此,我们就成功的创建了一个Tomcat镜像了,当然这里只是为了简单演示,所以镜像做的比较简单,官方的Tomcat镜像比这复杂的多,在熟悉了Dockerfile后可以去看看官方的做法。

7.其他

在做镜像的时候有那么多步骤,根本不可能一次将所有的步骤完成,所以,这里教给大家一个小技巧。
在编写完Dockerfile到第二步的时候,其实可以先使用一个脚本先运行着,然后进入容器内部进行操作。笔者在编写Dockerfile时先使用如下命令
COPY run.sh /app/run.sh
RUN chmod +x /app/run.sh
ENTRYPOINT [“/app/run.sh”]
run.sh脚本的内容如下

!/bin/bash sleep 15 while true do echo “true” sleep 180 done

其实就是一段死循环代码代替原有的tomcat7.sh,接着就可以build和run我们的容器了。容器运行起来后使用docker exec -it container_id bash 进入docker容器。此时就和我们平时装软件的方式一样了,做完一个步骤,在Dockerfile中记录一条,这样Dockerfile也就做出来了。(ps:exit退出容器。)
特别注意的一点,如果做好镜像以后,在镜像中有需要保存的数据(持久化目录)需要我们在Dockerfile中指定持久化目录。为了能够保存(持久化)数据以及共享容器间的数据,Docker提出了Volume的概念。简单来说,Volume就是目录或者文件,它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。并且我们运行容器的时候需要使用使用 -v 来声明Volume,如:
docker run -it -v /home/dock/logs:/usr/logs tomcat /bin/bash
冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径,这样容器内更改的数据就被写到宿主机上了。

五、dockerFile指令

FROM

功能为指定基础镜像,并且必须是第一条指令。
如果不以任何镜像为基础,那么写法为:FROM scratch。
同时意味着接下来所写的指令将作为镜像的第一层开始

语法:
FROM
FROM :
FROM :
三种写法,其中和 是可选项,如果没有选择,那么默认值为latest

RUN
功能为运行指定的命令
RUN命令有两种格式
1. RUN
2. RUN [“executable”, “param1”, “param2”]
第一种后边直接跟shell命令
• 在linux操作系统上默认 /bin/sh -c
• 在windows操作系统上默认 cmd /S /C
第二种是类似于函数调用。
可将executable理解成为可执行文件,后面就是两个参数。

两种写法比对:
• RUN /bin/bash -c ‘source H O M E / . b a s h r c ; e c h o HOME
• RUN [“/bin/bash”, “-c”, “echo hello”]
注意:多行命令不要写多个RUN,原因是Dockerfile中每一个指令都会建立一层.
多少个RUN就构建了多少层镜像,会造成镜像的臃肿、多层,不仅仅增加了构件部署的时间,还容易出错。
RUN书写时的换行符是\

CMD

功能为容器启动时要运行的命令
语法有三种写法
1. CMD [“executable”,”param1”,”param2”]
2. CMD [“param1”,”param2”]
3. CMD command param1 param2
第三种比较好理解了,就时shell这种执行方式和写法
第一种和第二种其实都是可执行文件加上参数的形式

举例说明两种写法:
• CMD [ “sh”, “-c”, “echo H O M E C M D [ e c h o , HOME” ]
补充细节:这里边包括参数的一定要用双引号,就是”,不能是单引号。千万不能写成单引号。
原因是参数传递后,docker解析的是一个JSON array

RUN & CMD
不要把RUN和CMD搞混了。
RUN是构件容器时就运行的命令以及提交运行结果
CMD是容器启动时执行的命令,在构件时并不运行,构件时紧紧指定了这个命令到底是个什么样子

LABEL
功能是为镜像指定标签

语法:
LABEL = = = …
一个Dockerfile种可以有多个LABEL,如下:
LABEL “com.example.vendor”=”ACME Incorporated”
LABEL com.example.label-with-value=”foo”
LABEL version=”1.0”
LABEL description=”This text illustrates \
that label-values can span multiple lines.”
但是并不建议这样写,最好就写成一行,如太长需要换行的话则使用\符号
如下:
LABEL multi.label1=”value1” \
multi.label2=”value2” \
other=”value3”

说明:LABEL会继承基础镜像种的LABEL,如遇到key相同,则值覆盖

MAINTAINER
指定作者
语法:
MAINTAINER

EXPOSE
功能为暴漏容器运行时的监听端口给外部
但是EXPOSE并不会使容器访问主机的端口
如果想使得容器与主机的端口有映射关系,必须在容器启动的时候加上 -P参数

ENV
功能为设置环境变量
语法有两种
1. ENV
2. ENV = …
两者的区别就是第一种是一次设置一个,第二种是一次设置多个

ADD
一个复制命令,把文件复制到景象中。
如果把虚拟机与容器想象成两台linux服务器的话,那么这个命令就类似于scp,只是scp需要加用户名和密码的权限验证,而ADD不用。

语法如下:
1. ADD …
2. ADD [“”,… “”]

路径的填写可以是容器内的绝对路径,也可以是相对于工作目录的相对路径
可以是一个本地文件或者是一个本地压缩文件,还可以是一个url

如果把写成一个url,那么ADD就类似于wget命令

如以下写法都是可以的:
• ADD test relativeDir/
• ADD test /relativeDir
• ADD http://example.com/foobar /
尽量不要把写成一个文件夹,如果是一个文件夹了,复制整个目录的内容,包括文件系统元数据

COPY
看这个名字就知道,又是一个复制命令
语法如下:
1. COPY …
2. COPY [“”,… “”]
与ADD的区别
COPY的只能是本地文件,其他用法一致

ENTRYPOINT
功能是启动时的默认命令

语法如下:
1. ENTRYPOINT [“executable”, “param1”, “param2”]
2. ENTRYPOINT command param1 param2

如果从上到下看到这里的话,那么你应该对这两种语法很熟悉啦。
第二种就是写shell
第一种就是可执行文件加参数

与CMD比较说明(这俩命令太像了,而且还可以配合使用):
1. 相同点:
• 只能写一条,如果写了多条,那么只有最后一条生效
• 容器启动时才运行,运行时机相同

  1. 不同点:
    • ENTRYPOINT不会被运行的command覆盖,而CMD则会被覆盖
    • 如果我们在Dockerfile种同时写了ENTRYPOINT和CMD,并且CMD指令不是一个完整的可执行命令,那么CMD指定的内容将会作为ENTRYPOINT的参数
    如下:
    FROM ubuntu
    ENTRYPOINT [“top”, “-b”]
    CMD [“-c”]
    • 如果我们在Dockerfile种同时写了ENTRYPOINT和CMD,并且CMD是一个完整的指令,那么它们两个会互相覆盖,谁在最后谁生效
    如下:
    FROM ubuntu
    ENTRYPOINT [“top”, “-b”]
    CMD ls -al
    那么将执行ls -al ,top -b不会执行。

Docker官方使用一张表格来展示了ENTRYPOINT 和CMD不同组合的执行情况
(下方表格来自docker官网)

这里写图片描述

VOLUME

可实现挂载功能,可以将内地文件夹或者其他容器种得文件夹挂在到这个容器种

语法为:
VOLUME [“/data”]

说明:
[“/data”]可以是一个JsonArray ,也可以是多个值。所以如下几种写法都是正确的
VOLUME [“/var/log/”]
VOLUME /var/log
VOLUME /var/log /var/db
一般的使用场景为需要持久化存储数据时
容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。
所以当数据需要持久化时用这个命令。

USER

设置启动容器的用户,可以是用户名或UID,所以,只有下面的两种写法是正确的
• USER daemo
• USER UID
注意:如果设置了容器以daemon用户去运行,那么RUN, CMD 和 ENTRYPOINT 都会以这个用户去运行

WORKDIR

语法:
WORKDIR /path/to/workdir

设置工作目录,对RUN,CMD,ENTRYPOINT,COPY,ADD生效。如果不存在则会创建,也可以设置多次。

如:
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
pwd执行的结果是/a/b/c

WORKDIR也可以解析环境变量
如:
ENV DIRPATH /path
WORKDIR D I R P A T H / DIRNAME
RUN pwd
pwd的执行结果是/path/$DIRNAME

ARG
语法:
ARG [=]
设置变量命令,ARG命令定义了一个变量,在docker build创建镜像的时候,使用 –build-arg =来指定参数
如果用户在build镜像时指定了一个参数没有定义在Dockerfile种,那么将有一个Warning
提示如下:
[Warning] One or more build-args [foo] were not consumed.

我们可以定义一个或多个参数,如下:
FROM busybox
ARG user1
ARG buildno

也可以给参数一个默认值:
FROM busybox
ARG user1=someuser
ARG buildno=1

如果我们给了ARG定义的参数默认值,那么当build镜像时没有指定参数值,将会使用这个默认值

ONBUILD
语法:
ONBUILD [INSTRUCTION]
这个命令只对当前镜像的子镜像生效。
比如当前镜像为A,在Dockerfile种添加:
ONBUILD RUN ls -al
这个 ls -al 命令不会在A镜像构建或启动的时候执行

此时有一个镜像B是基于A镜像构建的,那么这个ls -al 命令会在B镜像构建的时候被执行。

STOPSIGNAL
语法:
STOPSIGNAL signal
STOPSIGNAL命令是的作用是当容器推出时给系统发送什么样的指令

HEALTHCHECK
容器健康状况检查命令
语法有两种:
1. HEALTHCHECK [OPTIONS] CMD command
2. HEALTHCHECK NONE
第一个的功能是在容器内部运行一个命令来检查容器的健康状况
第二个的功能是在基础镜像中取消健康检查命令

[OPTIONS]的选项支持以下三中选项:
–interval=DURATION 两次检查默认的时间间隔为30秒
–timeout=DURATION 健康检查命令运行超时时长,默认30秒
–retries=N 当连续失败指定次数后,则容器被认为是不健康的,状态为unhealthy,默认次数是3

注意:
HEALTHCHECK命令只能出现一次,如果出现了多次,只有最后一个生效。

CMD后边的命令的返回值决定了本次健康检查是否成功,具体的返回值如下:
0: success - 表示容器是健康的
1: unhealthy - 表示容器已经不能工作了
2: reserved - 保留值

例子:
HEALTHCHECK –interval=5m –timeout=3s \
CMD curl -f http://localhost/ || exit 1

健康检查命令是:curl -f http://localhost/ || exit 1
两次检查的间隔时间是5秒
命令超时时间为3秒

欢迎加我的微信
这里写图片描述

猜你喜欢

转载自blog.csdn.net/u014229652/article/details/81545297