容器生命周期与管理策略
前言
一、容器生命周期概述
二、容器创建与启动
2.1 创建容器但不启动
2.2 启动容器
2.3 创建并运行容器
2.4 查看容器状态
2.5 停止与重启容器
2.6 删除容器
三、容器交互与控制
3.1 进入容器交互模式
3.2 查看容器日志
3.3 容器内部执行命令
3.4 暂停与恢复容器
四、容器信息查看与监控
4.1 查看容器详细信息
4.2 实时监控容器资源
4.3 查看容器内运行的进程
4.4 容器文件系统变化追踪
五、容器导出、导入与迁移
5.1 导出容器
5.2 导入容器
5.3 区别说明
六、容器自动启动与自恢复
6.1 开机自启配置
6.2 查看重启策略
6.3 批量启动所有容器
七、容器快照与备份
7.1 提交容器为新镜像
7.2 快照后重新运行
7.3 实战示例
八、容器批量管理技巧
九、容器故障排查命令
十、总结
前言
在前一章中,我们学习了 Docker 的安装与基础命令,成功运行了第一个容器。 但在生产环境中,我们需要对容器进行更精细的控制,比如:
-
如何批量创建或删除容器?
-
如何让容器开机自启?
-
如何查看容器日志与状态?
-
如何导出容器、迁移容器或创建快照?
本篇将深入剖析 容器生命周期与管理策略,并提供实战命令演练。
一、容器生命周期概述
Docker 容器的生命周期一般分为以下阶段:
创建(create) → 启动(start) → 运行中(running)↓ ↓停止(stop) ← 暂停(pause)↓删除(rm)
💡 理解关键: Docker 容器本质上是运行在宿主机上的一个进程(PID),因此容器的生命周期与进程生命周期紧密相关。
二、容器创建与启动
2.1 创建容器但不启动
docker create --name webtest nginx
创建容器后不会立即运行,可用
docker start
启动。
2.2 启动容器
docker start webtest
💡 若容器已经存在,可直接启动;否则需使用
docker run
新建。
2.3 创建并运行容器
docker run -d --name web1 -p 8080:80 nginx
参数说明:
参数 | 含义 |
---|---|
-d | 后台运行 |
--name | 指定容器名称 |
-p | 端口映射 |
nginx | 镜像名称 |
2.4 查看容器状态
docker ps # 查看正在运行的容器 docker ps -a # 查看所有容器(含已停止)
2.5 停止与重启容器
docker stop web1 docker restart web1
2.6 删除容器
docker rm web1
强制删除正在运行的容器:
docker rm -f web1
⚠️ 注意: 删除操作不可逆,删除后容器中的数据将丢失(除非挂载数据卷)。
三、容器交互与控制
3.1 进入容器交互模式
docker exec -it web1 /bin/bash
与
docker attach
不同,exec
不会干扰主进程。
3.2 查看容器日志
docker logs -f web1
参数说明:
参数 | 说明 |
---|---|
-f | 实时查看日志输出 |
--tail 100 | 仅查看最后 100 行 |
-t | 显示时间戳 |
示例:
docker logs -t --tail 50 web1
3.3 容器内部执行命令
在不进入容器的情况下执行命令:
docker exec web1 cat /etc/os-release
3.4 暂停与恢复容器
暂停容器(冻结进程):
docker pause web1
恢复容器:
docker unpause web1
✅ 实用场景: 暂时冻结容器以减少 CPU 消耗,适用于维护或测试。
四、容器信息查看与监控
4.1 查看容器详细信息
docker inspect web1
输出包含容器 ID、IP、挂载卷、环境变量等完整元数据。
快速查看容器 IP 地址:
docker inspect -f '{{.NetworkSettings.IPAddress}}' web1
4.2 实时监控容器资源
docker stats
输出:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT NET I/O BLOCK I/O PIDS 2a7f... web1 0.34% 64MiB / 2GiB 5MB / 4MB 0B / 0B 10
💡 相当于容器版
top
命令。
4.3 查看容器内运行的进程
docker top web1
显示容器中所有正在运行的进程。
4.4 容器文件系统变化追踪
docker diff web1
显示容器文件系统相对镜像的修改内容。
输出示例:
C /etc/nginx/nginx.conf A /var/www/html/index.html
五、容器导出、导入与迁移
5.1 导出容器
docker export web1 > web1.tar
导出容器的文件系统(不包含元信息和层结构)。
5.2 导入容器
cat web1.tar | docker import - web1:v1
将导出的容器打包为新的镜像。
5.3 区别说明
命令 | 导出对象 | 是否包含镜像历史层 | 适用场景 |
---|---|---|---|
docker save | 镜像 | ✅ 是 | 迁移镜像 |
docker export | 容器 | ❌ 否 | 迁移容器文件系统 |
六、容器自动启动与自恢复
6.1 开机自启配置
在运行容器时添加:
docker run -d --restart=always --name redis redis:latest
可选参数说明:
参数 | 说明 |
---|---|
no | 默认,不自动重启 |
on-failure | 非 0 退出码时重启 |
always | 无论如何都重启 |
unless-stopped | 手动停止后不重启 |
6.2 查看重启策略
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' redis
6.3 批量启动所有容器
docker start $(docker ps -aq)
批量停止所有容器:
docker stop $(docker ps -aq)
七、容器快照与备份
7.1 提交容器为新镜像
docker commit web1 web1:v2
💡 作用: 将当前容器的修改保存成新的镜像版本。
7.2 快照后重新运行
docker run -d -p 8081:80 web1:v2
这样你就创建了一个基于修改后状态的新容器。
7.3 实战示例
1️⃣ 进入容器修改网页文件:
docker exec -it web1 bash echo "Hello Docker v2" > /usr/share/nginx/html/index.html exit
2️⃣ 提交修改:
docker commit web1 nginx:v2
3️⃣ 创建新容器验证:
docker run -d -p 8081:80 nginx:v2
访问 http://宿主机:8081
即可看到更新后的页面。
八、容器批量管理技巧
操作 | 命令 | 说明 |
---|---|---|
停止全部容器 | docker stop $(docker ps -aq) | 批量停止 |
删除全部容器 | docker rm $(docker ps -aq) | 批量删除 |
删除全部镜像 | docker rmi $(docker images -q) | 清空镜像 |
清理未使用资源 | docker system prune -a | 清理系统缓存 |
⚠️ 谨慎使用!
prune -a
会清除未被使用的镜像、容器、网络与缓存。
九、容器故障排查命令
命令 | 用途 |
---|---|
docker logs <容器名> | 查看日志 |
docker inspect <容器名> | 查看容器元数据 |
docker events | 查看 Docker 实时事件 |
docker ps -a | 查看容器状态 |
docker stats | 查看性能监控信息 |
💡 建议: 故障排查时依次检查:日志 → 状态 → 资源占用 → 网络连接。
十、总结
通过本篇学习,你应掌握以下内容:
✅ 容器的完整生命周期管理流程
✅ 容器创建、停止、删除、导出导入命令
✅ 日志查看、资源监控与快照创建
✅ 自动重启策略与批量操作技巧
✅ 容器迁移与版本化实战