网站首页 > 基础教程 正文
开篇导读
许多刚接触 Docker 的开发者都有一个误区:
“镜像构建完就万事大吉,run 一下就部署成功了。”
实际上,在生产环境中,我们面对的是:
- 容器突然崩了?
- 容器内怎么调试?
- 怎么优雅重启?
- 怎么持久化数据、防止配置丢失?
本讲就是为了解决这些现实问题而来!
我们将从容器的生命周期出发,结合常用命令、实战技巧,带你完整掌握 Docker 容器的管理与调试方式。
一、容器生命周期全景图
Docker 容器的典型生命周期如下:
CREATE → START → RUNNING → STOP → EXIT → REMOVE
关键命令一览:
命令 | 作用 |
docker create | 创建容器但不运行 |
docker start | 启动已创建容器 |
docker run | 创建并启动容器(最常用) |
docker stop | 优雅停止容器 |
docker kill | 强制终止容器 |
docker rm | 删除容器实例 |
二、容器创建与启动详解
推荐的标准运行格式
docker run -d --name my-nginx -p 8080:80 nginx
解释:
- -d:后台运行
- --name:自定义容器名
- -p:端口映射
暂停与恢复容器
docker pause <container>
docker unpause <container>
这对于短暂停止计算资源的容器(例如跑批)很有帮助。
三、如何查看容器状态与日志?
状态查看
docker ps -a
- STATUS 字段显示当前容器状态
- 如 Exited (0) 5 minutes ago 表示已退出
日志查看
docker logs my-nginx
docker logs -f my-nginx # 实时追踪
常见问题排查
- 应用未启动 → logs 查看错误信息
- 容器一闪而过 → 可能没有 CMD 或 ENTRYPOINT
- 使用 docker inspect 查看详细元信息:
docker inspect my-nginx
四、进入容器内部调试
方法一:exec
docker exec -it my-nginx /bin/bash
- -it 表示交互模式
- 如果容器是基于 Alpine 的,可能只支持 /bin/sh
方法二:attach
docker attach my-nginx
注意:attach 会直接接管容器主进程,退出可能会终止容器。建议用 exec。
五、数据与配置持久化管理
Docker 容器默认是无状态的,重启就可能丢失数据。
挂载数据卷(volume)
docker run -d -v /my/local/dir:/app/data my-image
- 左边是宿主机路径,右边是容器内部路径
- 推荐使用命名卷:
docker volume create mydata
docker run -v mydata:/app/data my-image
挂载配置文件
docker run -v $(pwd)/config/nginx.conf:/etc/nginx/nginx.conf nginx
这在测试不同配置时非常高效!
六、容器自动清理与资源管理
清理退出的容器
docker container prune
限制资源(CPU/内存)
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 的使用,打牢容器操作的根基。
- 上一篇: Mac安装Docker及使用
- 下一篇: Flask Docker Demo 项目指南
猜你喜欢
- 2025-05-15 Filebeat es 同步服务器日志到es
- 2025-05-15 docker容器的使用以及部署mysql
- 2025-05-15 一、docker部署ollama同时分别运行gemma3:27b bge-m3 deepseek-r1
- 2025-05-15 聊聊部署在docker容器里面的springboot项目如何启用arthas
- 2025-05-15 Docker容器化部署Java应用的最佳实践
- 2025-05-15 「linux」如何使用docker部署c/c++程序
- 2025-05-15 Docker安装MySQL 8、Redis并确保数据持久化的详细步骤
- 2025-05-15 Flask Docker Demo 项目指南
- 2025-05-15 Mac安装Docker及使用
- 2025-05-15 开发利器丨如何使用ELK设计微服务中的日志收集方案?
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)