docker总结——容器

一、运行容器 attach VS exec

attach 与 exec 主要区别如下:

  • attach 直接进入容器 启动命令 的终端,不会启动新的进程。
  • exec 则是在容器中打开新的终端,并且可以启动新的进程。
  • 如果想直接在终端中查看启动命令的输出,用 attach;其他情况使用 exec。

docker exec -it <container> bash|sh是执行 exec 最常用的方式

ps: 如果只是为了查看启动命令的输出,可以使用 docker logs 命令;-f的作用与tail -f类似,能够持续打印输出

二、容器分类

  • 服务类的容器
    • 以 daemon 的形式运行,对外提供服务。比如 web server,数据库等。通过 -d 以后台方式启动这类容器是非常合适的。如果要排查问题,可以通过exec -it进入容器。
  • 工具类的容器
    • 通常给能我们提供一个临时的工作环境,通常以run -it方式运行

三、容器的状态和操作

  • pause/unpause暂时让容器暂停工作一段时间,比如要对容器的文件系统打个快照,或者 dcoker host 需要使用 CPU,处于暂停状态的容器不会占用 CPU 资源
  • --restart=always意味着无论容器因何种原因退出(包括正常退出),就立即重启。该参数的形式还可以是 --restart=on-failure:3,意思是如果启动进程退出代码非0,则重启容器,最多重启3次
  • docker rm一次可以指定多个容器,如果希望批量删除所有已经退出的容器,可以执行如下命令:docker rm -v $(docker ps -aq -f status=exited)
  • docker rm是删除容器,而docker rmi是删除镜像

四、限制容器对资源的使用

4.1 限制内存

  • -m--memory:设置内存的使用限额,例如 100M, 2G
  • --memory-swap:设置内存+swap的使用限额
  • docker run -m 200M --memory-swap=300M ubuntu其含义是允许该容器最多使用 200M 的内存和100M的 swap。默认情况下,上面两组参数为 -1,即对容器内存和 swap 的使用没有限制。

测试: docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M

  • --vm1:启动 1 个内存工作线程。
  • --vm-bytes 280M:每个线程分配 280M 内存。

4.2 限制CPU

  • 通过-c--cpu-shares设置容器使用 CPU 的权重。如果不指定,默认值为 1024
  • 通过 cpu share 可以设置容器使用 CPU 的优先级。与内存限额不同,通过 -c 设置的 cpu share 并不是 CPU 资源的绝对数量,而是一个相对的权重值。某个容器最终能分配到的 CPU 资源取决于它的 cpu share 占所有容器 cpu share 总和的比例
  • 需要特别注意的是,这种按权重分配 CPU 只会发生在 CPU 资源紧张的情况下。如果 container_A 处于空闲状态,这时,为了充分利用 CPU 资源,container_B 也可以分配到全部可用的 CPU

4.3 限制 Block IO

Block IO 指的是磁盘的读写,docker 可通过设置权重、限制 bps 和 iops 的方式控制容器读写磁盘的带宽

  • 目前 Block IO 限额只对 direct IO(不使用文件缓存)有效
  • 默认情况下,所有容器能平等地读写磁盘,可以通过设置 --blkio-weight参数来改变容器 block IO 的优先级
  • --blkio-weight--cpu-shares类似,设置的是相对权重值,默认为 500

4.4 限制 bps 和 iops

  • bps 是 byte per second,每秒读写的数据量。
  • iops 是 io per second,每秒 IO 的次数。

可通过以下参数控制容器的 bps 和 iops:

--device-read-bps,限制读某个设备的 bps。
--device-write-bps,限制写某个设备的 bps。
--device-read-iops,限制读某个设备的 iops。
--device-write-iops,限制写某个设备的 iops。

下面这个例子限制容器写 /dev/sda 的速率为 30 MB/s

docker run -it --device-write-bps /dev/sda:30MB ubuntu

五、容器的底层技术

5.1 cgroup 资源限额

cgroup 全称 Control Group。Linux 操作系统通过 cgroup 可以设置进程使用 CPU、内存 和 IO 资源的限额。相信你已经猜到了:前面我们看到的--cpu-shares-m--device-write-bps实际上就是在配置 cgroup

5.2 namespace 资源隔离

Linux 使用了六种 namespace,分别对应六种资源:Mount、UTS、IPC、PID、Network 和 User

  • Mount namespace让容器看上去拥有整个文件系统
  • UTS namespace让容器有自己的 hostname
  • IPC namespace让容器拥有自己的共享内存和信号量(semaphore)来实现进程间通信,而不会与 host 和其他容器的 IPC 混在一起
  • PID namespace让容器拥有自己独立的一套 PID
  • Network namespace让容器拥有自己独立的网卡、IP、路由等资源
  • User namespace让容器能够管理自己的用户,host 不能看到容器中创建的用户

小结

create      创建容器  
run         运行容器  
pause       暂停容器  
unpause     取消暂停继续运行容器  
stop        发送 SIGTERM 停止容器  
kill        发送 SIGKILL 快速停止容器  
start       启动容器  
restart     重启容器  
attach      attach 到容器启动进程的终端  
exec        在容器中启动新进程,通常使用 "-it" 参数  
logs        显示容器启动进程的控制台输出,用 "-f" 持续打印  
rm          从磁盘中删除容器

摘自:CloudMan

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值