docker运行

容器长期运行

容器的生命周期依赖于启动时执行的命令,只要该命令不结束,容器也就不会退出。根据这个原理,我们就可以通过执行一个长期运行的命令来保持容器的运行状态。

进入容器的两种方法

attach

docker attach CONTAINER_ID

exec

docker exec -it <container> bash|sh

attach VS exec

两者的主要区别如下:

  • attach直接进入容器启动命令的终端,不会启动新的进程;
  • exec 则是在容器中打开新的终端,并且可以启动新的进程。

查看启动命令的输出:

docker logs -f <container> # -f类似tail -f,持续打印输出

stop/start/restart 容器

停止/启动/重启
注:对于服务类容器,我们通常希望在容器因某种错误而停止运行的情况下,能够自动重启。通过启动容器时设置 --restart参数就可以达到效果。
举例:

docker run -d --restart=always httpd
docker run -d --restart=on-failure:3

pause/unpause 容器

暂停容器/恢复容器
处于暂停的容器不会赞同cpu资源,知道通过docker unpause恢复运行

容器状态图

在这里插入图片描述

docker run = docker created + docker start

容器退出包括正常的退出和异常退出。这里举了两个例子:启动进程正常退出或者发生OOM,此时Docker会根据 --restart 的策略判断是否需要重启容器。但是如果容器执行了docker stop 或 docker kill 退出,则不会自动重启。

资源限制

内存限额

容器可以使用的内存:物理内存和swap

  • -m或–memory:设置内存的使用限额, 例如:100MB, 2GB
  • –memory-swap: 设置内存+swap的使用限额。
docker run -m 200M --memory-swap=300 ubuntu

其含义是允许容器最多使用200MB的内存和100MB的swap。

CPU 限额

docker 可以通过 -c 或–cpu-shares 设置容器使用CPU的权重。这个值不是CPU资源的绝对数量,而是一个相对的权重值。某个cpu最终能分配到的CPU资源取决于它的CPU share占所有cpu share总和的比例。

注意:这种按权重分配CPU只会发生在cpu资源紧张的情况下。

Block IO带宽限额

Block IO指的是磁盘的读写,docker 可通过设置权重、限制bps和iops的方式控制容器读写磁盘的带宽。
注:目前Block IO限额只对direct IO(不使用文件缓存)有效。

  • block IO权重
    通过设置–blkio-weight参数来改变容器block IO的优先级。
docker run -ti --name container_A --blkio-weight 600 ubuntu
docker run -ti --name container_B --blkio-weight 300 ubuntu
  • 限制bps和iops
    bps:byte per second,每秒读写的数据量
    iops:io per second,每秒IO的次数
    • –device-read-bps:
    • –device-write-bps:
    • –device-read-iops:
    • –device-write-iops:
      下面这个例子限制容器写/dev/sda的速率为30MB/s
docker run -ti --devce-write-bps /dev/sda:30MB ubuntu

猜你喜欢

转载自blog.csdn.net/cbmljs/article/details/92804089