《基于Kubernetes的容器云平台实战》——1.3 Docker基本概念
659
2022-05-29
2.2 容器生命周期管理
容器生命周期管理是Docker引擎的核心功能,既包括对容器元数据的操作管理,也涵盖了对操作系统API的包装调用。这部分功能是由引擎守护程序、Containerd和标准化的运行时工具配合完成的,具体的命令有:run、create、start、rename、update、pause、unpause、stop、kill、restart、rm、prune、wait等。
1.运行容器
docker container run [options] image[:tag|@digest] [cmd] [arg...]
该命令用于启动容器进程,等于create和start的组合。当命令无选项时,容器以镜像模板加默认属性的方式创建。下面对docker container run命令的主要选项分别进行介绍。
(1)基本选项
--name指定容器名字。如不指定,引擎将随机分配一个。-d/--detach(默认模式),以后台模式运行,容器标准输出和错误流被送到日志驱动。容器结束或退出后不会从文件系统中删除,除非带有--rm,它才会被自动清除(附带清除匿名卷)。-i/--interactive则将容器标准流都关联到当前终端(-a指定关联其中的几个),-t为容器分配伪终端,--sig-proxy=false关闭键盘输入系统信号(比如Ctrl-C)的转发功能。如容器从管道得到标准输入时,不能带-t选项。--cidfile,指示引擎将创建的容器的ID写入指定文件中。
--init指定容器中PID为1的进程,负责回收僵尸进程,正确处理系统信号,该选项不加参数时,使用引擎自带的docker-init可执行程序。
--restart定义退出重启策略,默认no不重启。on-failure[:max-retries]表示返回码不为0时且重启次数在限定范围内,则执行重启。always,在容器退出以及引擎启动时重启。unless-stopped,只在退出时重启。重启延迟时间从100ms开始逐次加倍,最长时间1min,启动后10s重置。重启次数记录在元数据中,可用inspect查看。--stop-signal,定制停止容器时发送的默认SIGTERM信号。--stop-timeout,定制默认10s停止容器超时时间。
--log-driver为容器指定与当前引擎不同的日志驱动。默认驱动是json-file,可选值有none、syslog、journald、gelf、fluentd、awslogs和splunk。配合--log-opt选项为具体驱动配置运行参数。
(2)用于覆盖image创建时默认配置的选项
该命令行上的cmd和参数能够覆盖Dockerfile里的CMD指令,而--entrypoint选项值能够覆盖Dockerfile中的ENTRYPOINT指令值。
Dockerfile中有端口映射,--expose=[],表示补充新的暴露端口;-p=[],覆盖端口映射规则。它们的参数格式为ip:hPort:cPort | ip::cPort | hPort:cPort | cPort,其中主机hPort和容器cPort都可以是范围值,能带TCP/UDP限定协议。-P表示暴露全部。
--env/-e为补充设置环境变量,--env-file为从文件中读取补充的环境变量。-w/--workdir,覆盖WORKDIR指令。-l/--label,补充元数据标签。--label-file,从文件中读取补充的元数据标签。
-v/--volume将宿主机路径和预定义卷绑定挂载到容器中的绝对路径,格式为[src:]dest[:
-u/--user设置容器进程UID和GID,可为用户名或ID,如用ID则容器中可无此用户。格式为:user | user:group | uid | uid:gid | user:gid | uid:group。
(3)与健康检查相关的选项
--health-cmd,覆盖镜像定义时健康检查配置,以exec方式周期执行容器中命令,返回0判定为健康。--health-start-period,在容器启动时设定的容忍间隔,避免误判。--health-interval,周期检查间隔。--health-retries,返回码不为0时的重试次数。--health-timeout,检查超时时间。--no-healthcheck,关闭健康检查。
(4)与命名空间相关的选项
与命名空间相关的选项有:--uts、--pid、--ipc、--network和--userns。空串值表示默认创建私有命名空间,‘host’表示共享宿主机对应命名空间。
--pid、--ipc和--network可带容器Name或ID以共享其命名空间,此时不能再设置独立主机名和MAC地址等。--pids-limit设置PID命名空间最大pid数量。
--network还支持bridge(默认值,此时可用端口映射)和none,前者在私有空间中挂接虚拟网卡到全局网桥,后者则只有loopback。docker network create命令创建的网络对象名字或ID也能用于此选项。
--dns=[]、--dns-search和--dns-option定制容器中/etc/resolv.conf内容、dns服务器列表和搜索选项。--add-host host:ip在容器里的/etc/host中添加localhost和已分配地址之外的映射。--mac-address指定网卡的MAC地址,否则将根据IP地址生成。--ip和--ip6指定网卡IPv4或IPv6地址,bridge模式下默认自动分配。--link-local-ip=[]指定网卡链路本地IPv4/IPv6地址。
(5)与安全相关的一些选项
--security-opt设置安全相关配置,值为key=value形式,可打开或关闭SELinux、apparmor、seccomp和new priviliages功能,可配置SELinux的label、seccomp的描述文件和apparmor的profile。--cap-add和--cap-drop为容器添加或删除capabilities。ALL表示添加或删除所有capabilities。其他key名字列在页面http://man7.org/linux/man-pages/man7/capabilities.7.html上。
--privileged=true|false设置容器在宿主机上是否有特权,默认无。--device为容器添加设备文件,设备名字后面可带“:rwm”这样的描述以限定读、写和mknod能力。--device-cgroup-rule='c 42:* rmw'用于修改默认设备文件读写权限。对于容器进程执行时归属的补充组,可通过--group-add来添加。
有很多命令选项用于设置自定义的CGroups资源限制参数。
容器默认使用新建的CGroup节点,--cgroup-parent指定使用其他节点。
(6)与内存资源相关的选项
-m/--memory限制容器内存使用量,最小4MB,单位可以是b、k、m和g(对应B、KB、MB和GB)。--memory-swap限制容器内存加交换区使用总量,应比内存限制大。--memory-reservation设置使用量软门限,应比-m硬门限小,以触发内存回收。--kernel-memory设置内核内存使用量。--oom-kill-disable,设置是否对容器关闭oom killer。--oom-score-adj调整容器的OOM优先级。--memory-swappiness调整容器的匿名页可交换比例,范围为10~100。--shm-size设置挂载的/dev/shm大小,默认为64MB。
(7)与CPU资源相关的选项
-c/--cpu-shares设置CPU使用权重,默认为1024,各容器根据比例使用CPU。--cpu-period设置CFS模式下调度间隔,单位为微秒,默认为100ms。--cpu-quota指定CFS模式下每调度间隔中的限额,单位为微秒,与cpu-period配合使用。--cpus设置可用CPU数,可为小数,获得cpu-period和cpu-quota配合使用时的相同效果,默认0为无限制。--cpuset-cpus限制容器可执行CPU核ID的集合。--cpuset-mems在NUMA系统上限制容器可用内存节点集合。--cpu-rt-period和--cpu-rt-runtime用微秒表示,上一级CGroup中须设置有此参数,且比此值大。
(8)与块I/O资源相关的选项
--blkio-weight设置块设备I/O权重,默认为500,取值范围为10~1000。
--blkio-weight-device以设备名指定块I/O权重,格式为
[
2.新建容器
docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]
该命令用于创建容器配置并返回ID,后续用start来启动该容器。除-d、--detach和--sig-proxy几个选项外,与run命令选项几乎一样。
3.启动容器
docker container start [OPTIONS] CONTAINER [CONTAINER...]
该命令除了用于启动已创建的容器配置之外,还用于恢复已保存检查点(实验性功能)。--interactive/-i,交互式执行。--attach/-a,挂接输出/错误流,转发信号。
4.更新容器配置
docker container update [OPTIONS] CONTAINER [CONTAINER...]
此命令更新容器CPU、内存、I/O资源限制和重启策略。选项参考run命令:--blkio-weight、--cpu-period、--cpu-quota、--cpu-rt-period、-c/--cpu-shares、--cpu-rt-runtime、--cpus、--cpuset-cpus、--cpuset-mems、-m/--memory、--kernel-memory、--memory-reservation、--memory-swap和--restart。
5.重命名容器
docker container rename CONTAINER NEW_NAME
该命令用于重命名一个容器。被更名的容器可以处于运行、暂停或者终止状态。
6.暂停/恢复容器
docker container pause CONTAINER [CONTAINER...]
docker container unpause CONTAINER [CONTAINER...]
在Linux下,使用CGroup的freezer子系统控制器来暂停或者恢复容器进程。
7.停止/重启容器
docker container stop [OPTIONS] CONTAINER [CONTAINER...]
stop停止一个或多个容器。停止信号默认为SIGTERM,除非创建容器时指定,实际停止前默认等待10s(创建时可定制)。-t/--time指示等待时间。
docker container kill [OPTIONS] CONTAINER [CONTAINER...]
kill向容器主进程发送SIGKILL信号,或由-s/--signal选项给出的信号。
docker container restart [OPTIONS] CONTAINER [CONTAINER...]
restart用于先停止指定的一个或者多个容器,再启动它们。
8.删除容器
docker container rm [OPTIONS] CONTAINER [CONTAINER...]
该命令可以删除一个或者多个指定的容器。如果容器处于运行状态,必须使用-f/--force来强制删除。-v/--volumes会删除只与该容器关联的匿名卷。
docker container prune [OPTIONS]
该命令删除所有停止状态的容器。-f/--force在删除之前无提示。可使用--filter过滤需删除的容器,过滤条件有until和label,用法与docker ps中的一样。
9.等待容器运行结束
docker container wait CONTAINER [CONTAINER...]
使用这个命令以阻塞方式等待一个或者多个容器执行结束,并打印其返回码。
Docker 容器 Kubernetes
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。