启动容器
容器的生命周期依赖于启动时执行的命令,只要命令不结束,容器也就不会退出。
- 指定启动时执行的命令方式:
- CMD指令
- ENTRYPOINT 指令
- 在docker run 命令行中指定
# -d 后台运行 # --name 指定容器名字 可以通过docker rename 重命名 docker run -d --name
- 指定操作的容器的三种方式:
- 长ID
- 短ID
- 名称 –name
- 两种进入容器的方法
- docker attach
```bash docker attach <container_id> ``` 退出方式 Ctrl + P,Ctrl + Q
- docker exec
# -it 以交互模式执行 docker exec -it <container> bash|sh
区别 | | attach | exec | | —- | ————————– | ——————– | | 终端 | 直接进行容器启动命令的终端 | 在容器中打开新的终端 | | 进程 | 不启动新的进程 | 启动新的进程 | 可以通过docker logs -f 直接查看启动命令的输出 工具类的容器可以使用docker run -it的方式提供临时的工作环境。 服务类的容器则可以用 docker run -d的方式以daemon方式运行,exec -it进入容器
stop/start/restart
容器在docker host中实际上是一个进程,docker 命令本质上是发送对应信号。
- docker kill = SIGKILL
- docker stop = SIGTERM
- docker start
- docker restart
启动时设置–restart=always就可以实现出错时自动重启,–restart=on-failure:3 最多重启三次
pause/unpause 暂停和恢复容器
删除容器
# 删除容器
docker rm
# 删除镜像
docker rmi
资源限制
- 内存限制
# --memory -m 限制内存的使用限度 # --memory-swap 设置内存+swap的使用限制 docker run --memory 200M --memory-swap=300 <container>
默认情况下对内存无限制
- CPU 限制
# --cpu-share 设置容器使用CPU的优先级。按权重分配只会发生在CPU资源紧张的情况下,空闲时无限制。 # --cpu 设置工作线程的数量 docker run --cpu-shares 1024 --cpu 1 <container>
- Block IO带宽限制
目前block io 只对不使用文件缓存的direct io有
- block io 权重
docker run -it --blkio-weight 600 <container>
- bps & iops
docker run -it --device-write-bps /dev/sda:30MB <container>
- block io 权重
资源限制的底层技术
-
cgroup 资源限额 cgroup 全称 control group。linux 操作系统可以通过它设置进程使用cpu、内存和IO资源的限制。
/sys/fs/cgroup
-
namespace 资源隔离 每个容器上的文件系统、网卡等资源只是看上去是属于容器自己的,但在host上可能是唯一的。 linux 实现这种方式的技术是namespace,管理着host中全局唯一的资源。
namespace docker Mount namespace 文件系统 IPC namespace 内存和信号量实现进程间通信 PID namespace 容器独立的PID Network namespace 网卡IP路由 User namespace 用户管理 UTS namespace 容器的hostname
Reference
《每天五分钟玩转Docker容器技术》