docker容器生命周期管理核心是掌握created、running、paused、exited、dead五种状态及对应命令:docker create创建未启动容器,docker start进入running,docker pause冻结进程,docker stop优雅终止,docker rm清理exited容器。
管理 docker 容器生命周期,核心是掌握五个关键状态(created、running、paused、exited、dead)及其转换逻辑,并配合命令与监控手段实现可控运行和及时响应。
掌握容器核心状态与对应操作
容器不是“开或关”二元状态,而是有明确阶段划分:
-
created:容器已初始化文件系统,但未启动。用
docker create创建,此时网络未激活、进程未运行 -
running:PID 1 进程正常执行,端口监听生效,可读写层工作。可通过
docker run -d或docker start进入该状态 -
paused:进程被冻结(cgroups freezer 实现),内存保留但不消耗 CPU。适合临时隔离问题容器,用
docker pause触发 -
exited:进程已退出,退出码显示在
docker ps -a的 STATUS 列(如 Exited (1))。可能是应用主动退出,也可能是 OOMKilled 导致 - dead:容器因严重错误(如存储驱动异常、OCI 运行时崩溃)无法恢复,需手动清理或重启 dockerd
用对命令控制状态流转
每个状态变化都对应明确命令,避免误操作导致服务中断:
- 创建但不启动:
docker create --name my-app nginx:1.25-slim→ 状态为 created - 启动已有容器:
docker start my-app→ 进入 running;若需后台运行且自动重启,加--restart=unless-stopped - 优雅停止:
docker stop my-app默认发送 SIGTERM,等待 10 秒后强制 SIGKILL。适合有清理逻辑的应用 - 强制终止:
docker kill my-app直接发 SIGKILL,适用于无响应或卡死场景 - 暂停与恢复:
docker pause my-app/docker unpause my-app,不释放内存,适合快速诊断 - 清理资源:
docker rm my-app只能删 exited 容器;运行中需加-f,但应优先查清原因再删
实时监控运行状态与资源使用
仅靠 docker ps 不足以判断健康度,需结合多维度观察:
- 看状态概览:
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"快速识别 Restarting 或长时间 Exited 的异常容器 - 查详细信息:
docker inspect my-app查看State.Running、State.ExitCode、State.OOMKilled和启动/结束时间,定位是否被内存杀掉 - 盯实时资源:
docker stats --no-stream my-app获取当前 CPU、内存用量与限制比值;持续观察用docker stats my-app流式刷新 - 捕获事件:
docker events --filter 'event=start' --filter 'event=die'监听容器启停行为,可用于审计或触发告警
安全与运维的常态化要点
生命周期管理不是一次性操作,而是贯穿日常的实践习惯:
- 构建阶段就用 slim 或 distroless 镜像,减少攻击面;禁用
latest标签,固定镜像版本 - 运行时设置资源限制:
--memory=512m --cpus=1.0,防止单个容器耗尽宿主机资源 - 容器内以非 root 用户运行,禁用不必要的 Linux capabilities(如
--cap-drop=ALL) - 启用只读根文件系统:
--read-only,配合--tmpfs挂载临时目录,提升安全性 - 所有 stop/kill/rm 操作记录日志,配合审计工具(如
auditd)追踪谁在何时做了什么











