容器的生命周期依赖于启动时执行的命令,只要命令不结束,容器也就不会退出。
# -d 后台运行
# --name 指定容器名字 可以通过docker rename 重命名
docker run -d --name
```bash
docker attach <container_id>
```
退出方式 Ctrl + P,Ctrl + Q
# -it 以交互模式执行
docker exec -it <container> bash|sh
区别 | | attach | exec | | —- | ————————– | ——————– | | 终端 | 直接进行容器启动命令的终端 | 在容器中打开新的终端 | | 进程 | 不启动新的进程 | 启动新的进程 | 可以通过docker logs -f 直接查看启动命令的输出 工具类的容器可以使用docker run -it的方式提供临时的工作环境。 服务类的容器则可以用 docker run -d的方式以daemon方式运行,exec -it进入容器
容器在docker host中实际上是一个进程,docker 命令本质上是发送对应信号。
启动时设置–restart=always就可以实现出错时自动重启,–restart=on-failure:3 最多重启三次
# 删除容器
docker rm
# 删除镜像
docker rmi
# --memory -m 限制内存的使用限度
# --memory-swap 设置内存+swap的使用限制
docker run --memory 200M --memory-swap=300 <container>
默认情况下对内存无限制
# --cpu-share 设置容器使用CPU的优先级。按权重分配只会发生在CPU资源紧张的情况下,空闲时无限制。
# --cpu 设置工作线程的数量
docker run --cpu-shares 1024 --cpu 1 <container>
docker run -it --blkio-weight 600 <container>
docker run -it --device-write-bps /dev/sda:30MB <container>
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 |
《每天五分钟玩转Docker容器技术》