开篇导读
许多刚接触 Docker 的开发者都有一个误区:
"镜像构建完就万事大吉,run 一下就部署成功了。"
实际上,在生产环境中,我们面对的是:
- 容器突然崩了?
- 容器内怎么调试?
- 怎么优雅重启?
- 怎么持久化数据、防止配置丢失?
本讲就是为了解决这些现实问题而来!
我们将从容器的生命周期出发,结合常用命令、实战技巧,带你完整掌握 Docker 容器的管理与调试方式。
一、容器生命周期全景图
Docker 容器的典型生命周期如下:
bash
CREATE → START → RUNNING → STOP → EXIT → REMOVE
关键命令一览
命令 | 作用 |
---|---|
docker create | 创建容器但不运行 |
docker start | 启动已创建容器 |
docker run | 创建并启动容器(最常用) |
docker stop | 优雅停止容器 |
docker kill | 强制终止容器 |
docker rm | 删除容器实例 |
二、容器创建与启动详解
✅ 推荐的标准运行格式
bash
docker run -d --name my-nginx -p 8080:80 nginx
解释:
- -d:后台运行
- --name:自定义容器名
- -p:端口映射
⏸️ 暂停与恢复容器
bash
docker pause <container>
docker unpause <container>
这对于短暂停止计算资源的容器(例如跑批)很有帮助。
三、如何查看容器状态与日志?
状态查看
bash
docker ps -a
- STATUS 字段显示当前容器状态
- 如 Exited (0) 5 minutes ago 表示已退出
日志查看
bash
docker logs my-nginx
docker logs -f my-nginx # 实时追踪
常见问题排查
- 应用未启动 → logs 查看错误信息
- 容器一闪而过 → 可能没有 CMD 或 ENTRYPOINT
- 使用 docker inspect 查看详细元信息:
bash
docker inspect my-nginx
四、进入容器内部调试
方法一:exec
bash
docker exec -it my-nginx /bin/bash
- -it 表示交互模式
- 如果容器是基于 Alpine 的,可能只支持 /bin/sh
方法二:attach
bash
docker attach my-nginx
⚠️ 注意:attach 会直接接管容器主进程,退出可能会终止容器。建议用 exec。
️ 五、数据与配置持久化管理
Docker 容器默认是无状态的,重启就可能丢失数据。
✅ 挂载数据卷(volume)
bash
docker run -d -v /my/local/dir:/app/data my-image
- 左边是宿主机路径,右边是容器内部路径
- 推荐使用命名卷:
bash
docker volume create mydata
docker run -v mydata:/app/data my-image
✅ 挂载配置文件
bash
docker run -v $(pwd)/config/nginx.conf:/etc/nginx/nginx.conf nginx
这在测试不同配置时非常高效!
六、容器自动清理与资源管理
清理退出的容器
bash
docker container prune
限制资源(CPU/内存)
bash
docker run -m 512m --cpus="1.0" my-image
这对于防止容器抢占资源至关重要,尤其是在多租户场景下。
七、常用容器管理命令表
操作 | 命令 |
---|---|
创建并运行容器 | docker run |
列出容器 | docker ps -a |
启动/停止容器 | docker start/stop |
删除容器 | docker rm |
查看日志 | docker logs |
进入容器 | docker exec -it |
查看元数据 | docker inspect |
清理垃圾 | docker system prune |
八、总结
- 容器的生命周期管理和调试技巧,是开发者迈入容器化的第一道大门。
- 掌握容器的运行状态、进入调试、日志查看、数据挂载,是提升 DevOps 水平的基础。
- 推荐大家多多练习 exec、logs、volume 的使用,打牢容器操作的根基。