运行容器

  1. #后台运行容器
  2. docker run -d <image>
  3. #进入容器
  4. docker attach [容器长ID/短ID/名]
  5. 可通过ctrl+p,ctrl+q组合键退出attach终端
  6. # exec会在容器中打开新的终端, 并且可以启动新的进程
  7. docker exec -it <container> bash|sh
  8. attach vs exec
  9. 如果想直接在终端中查看启动命令的输出, attach, 其他情况用exec
  10. (只查看启动命令的输出, 可以使用docker logs -f)

最佳实践:

  • 服务类容器以daemon后台形式运行, 如果要排查问题, 通过exec -it进入容器
  • 工具类容器通常以run -it方式运行

stop/start/restart容器

  1. # 停止容器
  2. docker stop <container>
  3. (docker host本质上是一个进程, 因此可以通过docker kill <container> 快速停止容器)
  4. # 重启
  5. docker restart <container>
  6. # 容器启动时可以设置restart参数(如 --restart=on-failure:3)
  7. docker run -d --restart=always <container>

pause/unpause容器

如果只是希望让容器暂停工作一段时间, 比如要对容器的文件系统打个快照, 或者docker host 需要使用CPU, 这是可以执行 docker pause 暂停容器, 可以通过docker unpause 恢复运行

删除容器

  1. docker rm <container1> <container2>
  2. # 删除所有已经退出的容器
  3. docker rm -v ${docker ps -aq f status=exited}

资源限制

docker提供限制机制避免某个容器占用太多资源以影响其他容器乃至整个host

内存限额

  1. # 设置内存的使用限额, 如100MB, 2GB
  2. -m --memory
  3. # 设置内存+swap的使用限额
  4. --memory-swap
  5. 示例: docker run -m 200M --memory-swap=300M ubuntu
  6. 含义是允许该容器最多使用200MB的内存和100MBswap, 默认情况下, 上面两组参数为-1, 即没有限制
  7. 若只指定-m, 而不制定--memory-swap, 那--memory-swap默认为-m的两倍

CPU限额

  • 默认设置下, 所有容器可以平等的使用host CPU资源并且没有限制
  • 可以通过-c或—cpu-shares设置容器使用CPU的权重, 如果不指定, 默认值为1024
  • 通过-c设置的cpu share并不是CPU资源的绝对数量, 而是一个相对的权重值, 某个容器最终能分配到的CPU资源取决于它的cpu share占所有容器 cpu share总和的比例, 换句话说, 通过cpu share可以设置容器使用CPU的优先级
    1. 示例
    2. docker run --name "container_A" -c 1024 ubuntu
    3. docker run --name "container_B" -c 512 ubuntu

Block IO 带宽限额

Block IO指的是磁盘的读写, docker可通过设置权重弄, 限制bps, iops的方式控制容器读写磁盘的贷款, 目前block io限额只对direct io有效
image.png

实现容器的底层技术

cgroup实现资源限额, namespace实现资源隔离

cgroup

image.png

namespace

image.png

容器常用命令

  • create
  • run
  • pause
  • unpause
  • stop
  • kill
  • start
  • restart
  • attach
  • exec
  • logs
  • rm