容器生命周期
容器从创建到删除会经历几种状态。文字版状态流转如下:running 状态的容器不能直接删除,必须先停止,或者用 docker rm -f 强制删除。
docker run 常用参数
一个组合示例:
重启策略对比
设置示例:
进入运行中的容器
用docker exec 在容器内执行命令。最常见的是打开一个交互式 Shell:
bash,改用 sh:
docker exec 启动的是容器内的附加进程。退出这个 Shell 不会影响容器主进程的运行。查看与诊断
容器列表
-a 显示包括已停止在内的所有容器。
详细信息
docker inspect 输出容器的完整 JSON 配置。配合 jq 提取常用字段:
进程与资源
停止与删除
docker stop 与 docker kill 的区别:
docker stop先发SIGTERM,给应用优雅退出的机会。默认等待 10 秒后再发SIGKILL强杀。docker kill直接发送信号,默认是SIGKILL,进程立即被杀掉。
容器内进程模型
容器主进程是 PID 1。PID 1 在 Linux 中有特殊语义:它默认不处理未注册的信号,也需要负责回收僵尸子进程。 直接用应用做 PID 1,可能出现收不到SIGTERM、无法优雅退出的问题。
解决方案是在容器中使用轻量级 init 进程,例如 tini 或 dumb-init:
--init 会让 Docker 自动注入 tini 作为 PID 1,应用成为其子进程,信号转发和僵尸进程回收都由 tini 处理。
延伸阅读
- Docker 基础:容器与镜像的基本概念
- Docker 镜像:构建运行容器所需的镜像
- Docker 资源限制:限制容器 CPU 与内存
- Docker 故障排查:容器异常的排查套路
- Kubernetes 基础:容器管理的进阶形态