Docker 用起来不难,难的是长期稳定地跑在服务器上。本页不重复安装步骤,而是从镜像分层、容器生命周期、数据卷与网络、资源限制与日志治理几个层面,整理一套可以在生产环境直接落地的 Docker 日常运维思路。
理解只读层与可写层,控制镜像体积与构建缓存。
创建、启动、重启策略与优雅停止的实际差异。
持久化方案选型,bridge 与自定义网络的取舍。
CPU/内存限制、日志轮转与磁盘占满的预防。
镜像不是越精简越好,而是要让后续接手的人看得懂。基础镜像固定版本标签、构建步骤按变更频率从低到高排列、把依赖安装与业务代码复制分开,这三点决定了缓存命中率与构建速度。
镜像分层结构:每一层只读,容器运行时叠加可写层
| 参数 | 作用 | 运维建议 |
|---|---|---|
| --restart | 容器退出后的重启策略 | 常驻服务用 unless-stopped |
| -v / --mount | 挂载数据卷或宿主机目录 | 生产优先用命名卷,路径挂载需谨慎 |
| --memory / --cpus | 限制容器资源上限 | 按业务峰值预留,避免互相挤占 |
| --log-opt | 日志驱动与轮转配置 | 设置 max-size 与 max-file 防磁盘写满 |
容器本身是无状态的,所有需要长期保留的东西都应落在卷上。数据库、上传目录、配置文件建议用命名卷统一管理,备份时直接打包卷目录即可,不必进入容器内部操作。
网络方面,自定义 bridge 网络支持容器名互访,比默认 bridge 更适合多容器协作;对外暴露端口时配合反向代理统一入口,避免宿主机端口散乱难以梳理。
先用 docker logs 查看退出原因,再看主进程是否为前台运行。后台守护型进程会导致容器认为任务结束而退出。
检查 /var/lib/docker 占用,为容器配置日志轮转参数,并定期清理悬空镜像与停止的容器。
拉取新镜像后重建容器,配合反向代理做健康检查与流量切换,保留旧镜像便于快速回滚。
从镜像规范到日志治理,逐项补齐运维细节,才能让容器长期稳定地跑在生产环境里。