Docker使用详细说明
提示
Docker使用详细说明
1. docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
2. docker centos安装
- 卸载原docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 更新系统并安装依赖
yum update
yum install -y yum-utils
- 安装docker repo
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 安装
yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker.service
systemctl enable containerd.service
- 卸载
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
- 非root用户设置
sudo groupadd docker
sudo usermod -aG docker $USER
sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
sudo chmod g+rwx "$HOME/.docker" -R
3. docker命令
3.1 docker run
--add-host list Add a custom host-to-IP mapping (host:ip) # 新增一条数据到/etc/hosts
-a, --attach list Attach to STDIN, STDOUT or STDERR # 显示执行结果到当前终端
--blkio-weight uint16 Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)
--blkio-weight-device list Block IO weight (relative device weight) (default [])
--cap-add list Add Linux capabilities
--cap-drop list Drop Linux capabilities
--cgroup-parent string Optional parent cgroup for the container
--cgroupns string Cgroup namespace to use (host|private)
'host': Run the container in the Docker host's cgroup namespace
'private': Run the container in its own private cgroup namespace
'': Use the cgroup namespace as configured by the
default-cgroupns-mode option on the daemon (default)
--cidfile string Write the container ID to the file
--cpu-period int Limit CPU CFS (Completely Fair Scheduler) period
--cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota
--cpu-rt-period int Limit CPU real-time period in microseconds
--cpu-rt-runtime int Limit CPU real-time runtime in microseconds
-c, --cpu-shares int CPU shares (relative weight)
--cpus decimal Number of CPUs # 设置CPU限制等, 与上下CPu开头等配合
--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
--cpuset-mems string MEMs in which to allow execution (0-3, 0,1)
-d, --detach Run container in background and print container ID # 让当前image后台执行
--detach-keys string Override the key sequence for detaching a container
--device list Add a host device to the container
--device-cgroup-rule list Add a rule to the cgroup allowed devices list
--device-read-bps list Limit read rate (bytes per second) from a device (default [])
--device-read-iops list Limit read rate (IO per second) from a device (default [])
--device-write-bps list Limit write rate (bytes per second) to a device (default [])
--device-write-iops list Limit write rate (IO per second) to a device (default [])
--disable-content-trust Skip image verification (default true)
--dns list Set custom DNS servers # 设置自定义DNS服务地址
--dns-option list Set DNS options
--dns-search list Set custom DNS search domains
--domainname string Container NIS domain name
--entrypoint string Overwrite the default ENTRYPOINT of the image
-e, --env list Set environment variables # 设置环境变量
--env-file list Read in a file of environment variables
--expose list Expose a port or a range of ports
--gpus gpu-request GPU devices to add to the container ('all' to pass all GPUs) # 容器 gpu限制
--group-add list Add additional groups to join
--health-cmd string Command to run to check health # 对容器内的服务进行健康检查命令
--health-interval duration Time between running the check (ms|s|m|h) (default 0s) # 健康检查间隔
--health-retries int Consecutive failures needed to report unhealthy # 检查检查重试次数
--health-start-period duration Start period for the container to initialize before starting health-retries countdown (ms|s|m|h) (default 0s) # 重启时间间隔
--health-timeout duration Maximum time to allow one check to run (ms|s|m|h) (default 0s) # 检查检查超时时间
--help Print usage
-h, --hostname string Container host name
--init Run an init inside the container that forwards signals and reaps processes
-i, --interactive Keep STDIN open even if not attached # 打开终端输入
--ip string IPv4 address (e.g., 172.30.100.104)
--ip6 string IPv6 address (e.g., 2001:db8::33)
--ipc string IPC mode to use
--isolation string Container isolation technology
--kernel-memory bytes Kernel memory limit
-l, --label list Set meta data on a container
--label-file list Read in a line delimited file of labels
--link list Add link to another container
--link-local-ip list Container IPv4/IPv6 link-local addresses
--log-driver string Logging driver for the container
--log-opt list Log driver options
--mac-address string Container MAC address (e.g., 92:d0:c6:0a:29:33)
-m, --memory bytes Memory limit # 内存限制
--memory-reservation bytes Memory soft limit
--memory-swap bytes Swap limit equal to memory plus swap: '-1' to enable unlimited swap
--memory-swappiness int Tune container memory swappiness (0 to 100) (default -1)
--mount mount Attach a filesystem mount to the container
--name string Assign a name to the container # 设置image执行别名
--network network Connect a container to a network # 连接到一个网络
--network-alias list Add network-scoped alias for the container
--no-healthcheck Disable any container-specified HEALTHCHECK
--oom-kill-disable Disable OOM Killer
--oom-score-adj int Tune host's OOM preferences (-1000 to 1000)
--pid string PID namespace to use
--pids-limit int Tune container pids limit (set -1 for unlimited)
--platform string Set platform if server is multi-platform capable
--privileged Give extended privileges to this container
-p, --publish list Publish a container's port(s) to the host # 发布端口
-P, --publish-all Publish all exposed ports to random ports
--pull string Pull image before running ("always"|"missing"|"never") (default "missing")
--read-only Mount the container's root filesystem as read only
--restart string Restart policy to apply when a container exits (default "no") # 是否自动重启
--rm Automatically remove the container when it exits # 执行完成后删除容器
--runtime string Runtime to use for this container
--security-opt list Security Options
--shm-size bytes Size of /dev/shm
--sig-proxy Proxy received signals to the process (default true)
--stop-signal string Signal to stop a container (default "SIGTERM")
--stop-timeout int Timeout (in seconds) to stop a container
--storage-opt list Storage driver options for the container
--sysctl map Sysctl options (default map[])
--tmpfs list Mount a tmpfs directory
-t, --tty Allocate a pseudo-TTY # 打开终端
--ulimit ulimit Ulimit options (default [])
-u, --user string Username or UID (format: <name|uid>[:<group|gid>]) # 指定用户运行
--userns string User namespace to use
--uts string UTS namespace to use
-v, --volume list Bind mount a volume # 挂载文件到image中
--volume-driver string Optional volume driver for the container
--volumes-from list Mount volumes from the specified container(s)
-w, --workdir string Working directory inside the container # 指定工作目录
- 后台运行
-d
- 前端运行
-i -t
或者-it
, 或者指定-a stdin -a stdout -i -t
值输出STDIN, STDOUT(不输出STDERR) - 设置容器运行别名
-name nginx
. 镜像运行时有3个名字: 长UUID('f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778'), 短UUID('f78375b1c487'), 别名('ngnix') - 输出容器ID到当前机器指定文件
--cidfile /data/nginx/containner_id
- 指定运行image和tag.
docker run ubuntu:18.04
- 指定网络, 连接到其他容器
--network
(指定连接类型),--network-alias
(设置本机网络别名)
none: 不启用连接
bridge(默认): 通过本地虚拟网卡桥接, 必须通过IP通讯
host: 与宿主机建立通讯网络, 没有独立IP地址, 共享宿主机网络接口 (性能最高, 不利于管理和自定义)
container: 与指定容器公用一个网络堆栈docker run -d --name redis example/redis --bind 127.0.0.1
docker run --rm -it --network container:redis example/redis-cli -h 127.0.0.1
自定义网络: 1. 创建网络类型为bridge的网络docker network create -d bridge my-net
, 2.docker run -d --name=php --network my_net --network-alias php -v /www:/usr/local/nginx/html php
容器连接到该网络, 3. 第二容器连接到该网络docker run -d --name=nginx --network my_net --network-alias nginx -v /www:/usr/local/nginx/html -p 80:80 nginx
, 4. 容器尝试pingdocker exec -it nginx ping php
设置/etc/hosts文件:docker run -it --add-host db-static:86.75.30.9 ubuntu cat /etc/hosts
- 设置是否自动重启
--restart
:no
容器退出不自动重启, 默认设置.on-failure[:max-retries]
: 非正常退出尝试重启多少次.always
: 非正常退出就自动重启.unless-stopped
: 无论是否正常退出都重启,包括启动守护进程时, 除非守护进程进入停止状态 - 退出后自动清理
-rm
- 重写Dockerfile默认设置
CMD(默认执行命令和选项):
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
ENTRYPOINT(执行入口命令):docker run -it --entrypoint /bin/bash example/redis -c ls -l
比较复杂, 不建议使用
- 暴露端口:
-p 80:80
- 设置环境变量:
docker run -e "deep=purple" -e today --rm alpine env
- 挂载文件:
-v, --volume=[host-src:]container-dest[:<options>]
. option:rw|ro, z|Z等 - 指定用户: root(id=0)是容器默认用户,但镜像开发者可以自己扩展用户. 可以通过
--user
设置默认用户来重启Dockerfile中的USER设置. 一般像mysql. es等会用到
3.2 docker attach
附加当前终端的STDIN, STDOUT, STDERR到容器. 就可以看到容器的输出信息了, docker attach
3.2 docker build
创建一个docker镜像通过Dockerfile和上下文
- 当前文件夹下创建镜像. 必须当前文件夹下有Dockerfile. 并且会将当前文件夹下所有文件拷贝到镜像中
docker build .
- 通过 - 构建, 没有上下文. 不会拷贝当前文件夹下文件到镜像
docker build - < /root/Dockerfile
- 设置标签
docker build -t test/mytest:v0.0.1 .
- 指定Dockerfile文件
docker build -f /root/Dockerfile .
3.2 docker commit
从以运行的容器创建一个镜像.
docker commit c3f279d17e0a svendowideit/testimage:version3
3.3 docker cp
在本地和镜像直接拷贝文件/文件夹
docker cp CONTAINER:/root/test ./ # 拷贝镜像中文件到当前文件夹
docker cp ./a.text CONTAINER:/root/test # 拷贝文件到镜像指定文件夹
3.4 docker create
通过指定镜像和运行特殊命令来启动一个容器. 容器会打印日志到STDOUT, 与docker run -d
类似但不会自动运行, 需要执行docker start <container_id>
docker create -t -i --name fedora fedora bash
docker start fedora
3.5 docker diff
列出镜像运行以来文件变更
标记 | 描述 |
---|---|
A | 新增的文件或文件夹 |
D | 删除的文件或文件夹 |
C | 修改的文件或文件夹 |
3.6 docker events
列出docker事件信息
docker events --until 2021-12-14
3.7 docker exec
在一个运行的容器中执行一个新的命令, docker exec -it fedora /bin/bash
-d
: 后台运行-e
: 设置环境变量-i
: 关联容器STDIN到附加-t
: 打开一个tty终端-u
: 使用用户或者UID-w
: 容器类工作目录
3.8 docker export
导出当前容器到本地文件
docker export fedora > fedora.tar
docker export --output="fedora.tar" fedora
3.9 docker history
显示镜像执行命令的历史
docker history ubuntu:latest
3.10 docker images
显示所有下载的镜像名称和标签
3.11 docker import
导入打包的容器到本地, 并指定新的镜像名和tag
docker import /path/to/exampleimage.tgz - importImageLocal:new
3.12 docker info
显示docker安装版本等信息
3.13 docker inspect
显示容器详情
docker inspect fedora
3.14 docker kill
关闭镜像
docker kill fedora
3.15 docker load
加载镜像打包文件
docker load < busybox.tar.gz
docker load --input fedora.tar
3.16 docker login
登录到docker registry.
docker login -u test -p 123456 localhost:8080
3.17 docker logout
登出到docker registry.
docker logout localhost:8080
3.18 docker logs
显示容器内STDOUT和STDERR打印的内容
docker logs -f -tail 200 xrp-sc-pos
3.19 docker pause
暂停多个镜像内所有进程
docker pause test1 test2
3.20 docker port
显示特殊的端口映射(端口号不一致)
docker port test
docker port test 7890/tcp
3.21 docker ps
列出所有容器
docker ps -a # 所有容器, 默认是只显示运行中容器
3.22 docker pull
从registry拉取一个镜像或者存储库
docker pull debian
docker pull debian:jessie
docker pull myregistry.local:5000/testing/test-image
3.23 docker push
推送镜像到registry
docker container commit c16378f943fe rhel-httpd:latest
docker image tag rhel-httpd:latest registry-host:5000/myadmin/rhel-httpd:latest
docker image push registry-host:5000/myadmin/rhel-httpd:latest
3.24 docker rename
重命名镜像
docker rename my_container my_new_container
3.25 docker restart
重启镜像
docker restart my_container
3.26 docker rm
删除容器
docker rm --force redis # 强制删除运行中容器
docker rm $(docker ps --filter status=exited -q) # 删除所有退出的容器
docker rm -v redis # 删除容器和挂载
3.27 docker rmi
删除镜像
docker rmi fd484f19954f
3.29 docker save
保存当前镜像
docker save busybox > busybox.tar
docker save --output busybox.tar busybox
docker save -o fedora-all.tar fedora
与docker export
对比:save
: 导入为load
, 保存的是镜像(配置好的文件等可执行信息). 保存后导入可以做层回滚(docker tag <LAYER_ID> <IMAGE NAME>
)export
: 导入为import
, 保存的是容器(镜像的运行时状态), 导出后丢失历史和元数据
3.30 docker search
查询镜像信息
docker search busybox
3.31 docker start
启动一个或者多个停止的容器
docker start a b
3.32 docker stats
列出一个或者多个容器资源使用状态
docker stats a b
3.33 docker stop
停止一个或多个运行中的容器
docker stop a b
3.34 docker tag
创建一个新的标签到原镜像
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
3.35 docker top
显示容器运行进程
docker top a b
3.36 docker unpause
取消暂停一个或多个容器
docker unpause CONTAINER [CONTAINER...]
3.37 docker update
更新容器配置, 一般用来更新docker容器限制
docker update --cpu-shares 512 abebf7571666
3.38 docker version
显示docker版本
3.39 docker wait
阻塞直到容器停止, 并打印退出编码
4. DockerFile
4.1 FROM
FROM <image>[:<tag>] [AS <name>]
# 例子:
ARG CODE_VERSION=latest
FROM base:${CODE_VERSION}
CMD /code/run-app
FROM extras:${CODE_VERSION}
CMD /code/run-extras
- 作为Dockerfile开头, 前面只能有 ARG指令
- 单个Dockerfile可出现多次, 用来创建多个镜像或者将一个生成阶段作为另外一个生成阶段的以来. 只需要在每个FROM指令之前记录提交的最后一个图像ID输出. 每条FROM指令清除前一指令创建的任何状态
- 设置一个name为新的构建阶段指定一个名称, 后续的FROM和COPY
--from=<name>
指令中使用, 引用此阶段构建的镜像
4.2 RUN
RUN <command> #shell form, 默认再shell运行 `/bin/sh -c`
RUN ["executable", "param1", "param2"] #exec form, 运行
RUN /bin/bash -c 'source $HOME/.bashrc; \ # 通过 `\`换行
echo $HOME'
RUN ["/bin/bash", "-c", "echo hello"]
- 当前镜像上新层中执行任何命令并提交结果. 提交镜像将用于Dockerfile下一步
- 默认shell可通过
SHELL
命令修改- 分层的
RUN
指令和生成的commit是Docker的核心概念, 在Docker中提交很便宜, 容器可在镜像历史的任何时间点创建- 使用shell form可避免shell字符串过滤, 并使用不包含指定shell可执行文件的基础镜像运行命令
- 使用exec form不调用shell, 如果要使用shell, 则使用RUN [ "sh", "-c", "echo $HOME" ]
4.3 CMD
CMD ["executable","param1","param2"] # exec form, 首选执行方式
CMD ["param1","param2"] # ENTRYPOINT的默认参数
CMD command param1 param2 # shell form
- 一个Dockerfile只有一个CMD指令, 如果有多个, 那么最后一个生效
CMD
主要为执行容器提供默认值. 这些默认值可以包含可执行文件, 也可以省略可执行文件(必须指定一个ENTRYPOINT
)指令- 如果为
ENTRYPOINT
指令提供默认参数.CMD
和ENTRYPOINT
指令都应使用JSON数组格式指定- 使用exec form不调用shell, 如果要使用shell, 则使用CMD [ "sh", "-c", "echo $HOME" ]
4.4 LABEL
LABEL <key>=<value> <key>=<value> <key>=<value> ...
LABEL
给镜像添加元数据- 可从基础镜像或者父镜像继承, 如果有重写, 已最近设置值为准
- 可以通过
docker image inspect myimage
查看- 可以有多个
LABEL
指令
4.5 EXPOSE
EXPOSE <port> [<port>/<protocol>...]
EXPOSE 80/tcp
EXPOSE 80/udp
docker run -p 80:80/tcp -p 80:80/udp ...
EXPOSE
通知Docker容器运行时监听指定端口, 也可以指定该端口监听TCP/UDP协议. 未设置则未TCP- 实际并不发布端口, 只是标记会发布哪些端口. 运行时通过
-p
来绑定端口- 可以有多个
EXPOSE
指令
4.5 ENV
ENV <key>=<value> ...
ENV MY_NAME="John Doe"
ENV MY_DOG=Rex\ The\ Dog
ENV
设置环境变量, 该值将在构建阶段的所有后续指令环境中, 可在多个指令中内联替换- 环境变量想持久化到容器, 在运行时可修改.
- 环境变量持久化会引起其他命令的行为:
a)
ENV DEBIAN_FRONTEND=noninteractive
会改变apt-get
的行为.
b) 如果只在运行时有效, 不包含到镜像中, 使用单行命令RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y ...
c) 或者使用ARG
命令, 他不会保存到最终镜像:ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y ...
ENV
可有多个
4.6 ADD
ADD [--chown=<user>:<group>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
ADD hom* /mydir/ # 添加hom开头的文件
ADD hom?.txt /mydir/ # 添加hom加单个字符的文件
ADD test.txt relativeDir/ # 添加test.txt到 <WORKDIR>/relativeDir/ 文件夹下
ADD
指令拷贝新的文件, 文件夹, 远程文件到目标路径- 来源文件路径解释为构建路径上下文
- 新增文件以UID和GID为0的创建, 可以通过
--chown
指定用户名,组名ADD
可有多个
4.7 COPY
COPY [--chown=<user>:<group>] <src>... <dest>
COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]
COPY
指令拷贝新的文件, 文件夹到目标路径- 来源文件路径解释为构建路径上下文
- 新增文件以UID和GID为0的创建, 可以通过
--chown
指定用户名,组名COPY
可有多个, 与ADD
不同为:ADD
支持远程文件
4.8 ENTRYPOINT
ENTRYPOINT ["executable", "param1", "param2"] # exec form, 首选执行方式
ENTRYPOINT command param1 param2 # shell form
# apache docker 镜像配置例子
FROM debian:stable
RUN apt-get update && apt-get install -y --force-yes apache2
EXPOSE 80 443
VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"]
ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
ENTRYPOINT
运行定义容器执行命令docker run fedora echo 'aaa'
会以exec form的形式追加到ENTRYPOINT
的参数中, 并覆盖已有参数, 也可以--entrypoint
来覆盖默认指令(只运行二进制执行, 不允许shell模式)- shell form不会接收
CMD
指令和docker run
执行参数并将/bin/sh -c
子命令执行, 它不传递信号(不是以PID=1启动, 不会接收UNIX型号, 也就是不会接收docker stop
命令)- 可以又多个, 但最后一个生效
没有ENTRYPOINT | ENTRYPOINT exec_entry p1_entry | ENTRYPOINT [“exec_entry”, “p1_entry”] | |
---|---|---|---|
没有CMD | 错误, 不允许 | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry |
CMD [“exec_cmd”, “p1_cmd”] | exec_cmd p1_cmd | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry exec_cmd p1_cmd |
CMD [“p1_cmd”, “p2_cmd”] | p1_cmd p2_cmd | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry p1_cmd p2_cmd |
CMD exec_cmd p1_cmd | /bin/sh -c exec_cmd p1_cmd | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry /bin/sh -c exec_cmd p1_cmd |
4.9 VOLUME
VOLUME ["/data"]
VOLUME
指令使用指定名称创建一个挂载点, 并标记为本机或其他容器外部挂载点docker run -v
可以指定创建任何一个挂载点
4.10 USER
USER <user>[:<group>]
USER <UID>[:<GID>]
USER
指令设置用户名/用户组来执行镜像Dockerfile后续的CMD
,RUN
,ENTRYPOINT
等指令- 如果用户没有私有组, 那么用户所属组为root组
- 如果设置用户的组, 那么用户组下只有当前用户, 其他配置的组关系等会被忽略
- 可有多个, 设置后后续使用当前用户执行命令
4.11 WORKDIR
WORKDIR /path/to/workdir
WORKDIR
为后续CMD
,RUN
,ENTRYPOINT
,COPY
,ADD
等指令设置工作文件夹, 如果文件夹路径不存在则创建- 可以多个, 如果是相对路径, 则是前一
WORKDIR
的相对路径- 可以接收环境变量
WORKDIR $DIRPATH/$DIRNAME
4.12 ARG
ARG <name>[=<default value>]
# 使用docker build --build-arg user=what_user .构建时
FROM busybox
USER ${user:-some_user} # USER指令接收的值为some_user
ARG user
USER $user # USER指令接收的值为what_user
FROM ubuntu
ARG CONT_IMG_VER # 定义ARG
ENV CONT_IMG_VER=${CONT_IMG_VER:-v1.0.0} # 定义ENV, 如果传递ARG, 那么ENV=ARG, 否则为默认值v1.0.0
RUN echo $CONT_IMG_VER
ARG
定义在构建镜像时传递的参数及其默认值, 不建议密码等通过ARG
传递, 因为可以通过docker hisotry
查看到- 可以定义多个
- 从
ARG
定义的那一行之后才会生效- 构建镜像时通过
--build-arg
设置arg参数值, 如果arg不存在会告警, 例子docker build --build-arg user=what_user .
ARG
只在当前构建阶段生效, 如果想多个阶段生效, 每个阶段重复定义- 如果
ARG
和ENV
重复定义相同参数, 优先ARG
生效(类似shell, 参数覆盖环境变量)- 预定义了
HTTP_PROXY,http_proxy,HTTPS_PROXY,https_proxy,FTP_PROXY,ftp_proxy,NO_PROXY,no_proxy
, 直接传递参数, 无需定义. 这些参数不会再docker history
中展示, 降低信息泄露风险ARG
不会保存到镜像, 但是又会影响镜像生成, 最好结合ENV
设置默认值, 防止镜像编译缓存失效.
4.13 ONBUILD
ONBUILD <INSTRUCTION>
- 在本地镜像构建之后不执行, 在其他镜像基于本镜像构建时构建, 那么就会在其之前执行
ONBUILD
的命令, 视为父Dockerfile给子Dockerfile的指令- 不会在孙Dockerfile中继承.
4.14 STOPSIGNAL
STOPSIGNAL signal
- 设置容器退出的信号
4.15 HEALTHCHECK
HEALTHCHECK [OPTIONS] CMD command # 执行命令进行健康检查
HEALTHCHECK NONE # 不执行健康检查
HEALTHCHECK
设置命令告诉Docker检查容器内是否在活动- 如果设置, 初始化为starting, 当健康检查通过healthy, 当一定次数联系失败, 转为unhealthy
4.16 SHELL
SHELL ["executable", "parameters"]
SHELL
允许覆盖默认的shell, 并且必须为JSON form, 默认为["/bin/sh", "-c"]- 用来切换shell环境, 后续
RUN
,CMD
,ENTRYPOINT
生效