运行容器
#后台运行容器
docker run -d <image>
#进入容器
docker attach [容器长ID/短ID/名]
可通过ctrl+p,ctrl+q组合键退出attach终端
# exec会在容器中打开新的终端, 并且可以启动新的进程
docker exec -it <container> bash|sh
attach vs exec
如果想直接在终端中查看启动命令的输出, 用attach, 其他情况用exec
(只查看启动命令的输出, 可以使用docker logs -f)
最佳实践:
- 服务类容器以daemon后台形式运行, 如果要排查问题, 通过exec -it进入容器
- 工具类容器通常以run -it方式运行
stop/start/restart容器
# 停止容器
docker stop <container>
(docker host本质上是一个进程, 因此可以通过docker kill <container> 快速停止容器)
# 重启
docker restart <container>
# 容器启动时可以设置restart参数(如 --restart=on-failure:3)
docker run -d --restart=always <container>
pause/unpause容器
如果只是希望让容器暂停工作一段时间, 比如要对容器的文件系统打个快照, 或者docker host 需要使用CPU, 这是可以执行 docker pause
删除容器
docker rm <container1> <container2>
# 删除所有已经退出的容器
docker rm -v ${docker ps -aq f status=exited}
资源限制
docker提供限制机制避免某个容器占用太多资源以影响其他容器乃至整个host
内存限额
# 设置内存的使用限额, 如100MB, 2GB
-m 或 --memory
# 设置内存+swap的使用限额
--memory-swap
示例: docker run -m 200M --memory-swap=300M ubuntu
含义是允许该容器最多使用200MB的内存和100MB的swap, 默认情况下, 上面两组参数为-1, 即没有限制
若只指定-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的优先级
示例
docker run --name "container_A" -c 1024 ubuntu
docker run --name "container_B" -c 512 ubuntu
Block IO 带宽限额
Block IO指的是磁盘的读写, docker可通过设置权重弄, 限制bps, iops的方式控制容器读写磁盘的贷款, 目前block io限额只对direct io有效
实现容器的底层技术
cgroup
namespace
容器常用命令
- create
- run
- pause
- unpause
- stop
- kill
- start
- restart
- attach
- exec
- logs
- rm