Docker 命令详解
1. docker start - 启动容器
作用:启动已停止的容器,创建新的进程和 Namespace。
┌─────────────────────────────────────────────────────────┐
│ docker start 的执行过程 │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 1. 容器状态:Stopped │ │
│ │ │ │
│ │ 容器元数据存在,但进程已停止 │ │
│ │ Namespace 已销毁 │ │
│ └──────────────────────────────────────────────────┘ │
│ │ │
│ │ docker start │
│ ↓ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 2. 创建新进程和 Namespace │ │
│ │ │ │
│ │ • 创建新的 PID Namespace │ │
│ │ • 创建新的 Network Namespace │ │
│ │ • 创建新的 Mount Namespace │ │
│ │ • 创建新的 IPC Namespace │ │
│ │ • 创建新的 UTS Namespace │ │
│ │ • 创建新的 User Namespace │ │
│ │ • 创建新的 Cgroup Namespace │ │
│ │ • 启动容器主进程(PID 1) │ │
│ └──────────────────────────────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 3. 容器状态:Running │ │
│ │ │ │
│ │ 新进程 (PID: 12345) │ │
│ │ ├─ PID Namespace: [4026532000] │ │
│ │ ├─ Network Namespace: [4026532001] │ │
│ │ ├─ Mount Namespace: [4026532002] │ │
│ │ └─ ... (其他 Namespace) │ │
│ │ │ │
│ │ 关键:每次 start 都会创建新的进程和 Namespace! │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
2. docker stop - 停止容器
作用:停止运行中的容器,发送信号终止进程,进程退出后 Namespace 会被销毁。
3. docker restart - 重启容器
作用:先停止容器,再启动容器,相当于 stop + start。
┌─────────────────────────────────────────────────────────┐
│ docker restart 的执行过程 │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 1. 容器状态:Running │ │
│ │ │ │
│ │ 进程 (PID: 12345) │ │
│ │ Namespace: [4026532000] │ │
│ └──────────────────────────────────────────────────┘ │
│ │ │
│ │ docker restart │
│ ↓ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 2. 停止容器(containerStop) │ │
│ │ │ │
│ │ • 发送 SIGTERM │ │
│ │ • 等待进程退出 │ │
│ │ • 如果超时,发送 SIGKILL │ │
│ │ • 进程终止 │ │
│ │ • Namespace 销毁 │ │
│ └──────────────────────────────────────────────────┘ │
│ │ │
│ │ 容器状态:Stopped │
│ ↓ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 3. 启动容器(containerStart) │ │
│ │ │ │
│ │ • 创建新的 Namespace │ │
│ │ • 启动新的进程 (PID: 12346) │ │
│ │ • Namespace: [4026532001] ← 新的! │ │
│ └──────────────────────────────────────────────────┘ │
│ │ │
│ │ 容器状态:Running │
│ ↓ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 4. 结果 │ │
│ │ │ │
│ │ 旧进程:已终止 │ │
│ │ 新进程:已启动 │ │
│ │ 旧 Namespace:已销毁 │ │
│ │ 新 Namespace:已创建 │ │
│ │ │ │
│ │ 关键:restart = stop + start,创建新的进程! │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
4. docker rm - 删除容器
作用:删除容器,先停止容器(如果运行中),然后清理文件系统和元数据。
┌─────────────────────────────────────────────────────────┐
│ docker rm 的执行过程 │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 1. 检查容器状态 │ │
│ │ │ │
│ │ 如果容器正在运行: │ │
│ │ • 必须先用 docker stop 停止 │ │
│ │ • 或者使用 -f 强制删除(会先 kill) │ │
│ └──────────────────────────────────────────────────┘ │
│ │ │
│ │ 容器已停止 │
│ ↓ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 2. 停止容器(如果还在运行) │ │
│ │ │ │
│ │ • 发送 SIGTERM,等待退出 │ │
│ │ • 如果超时,发送 SIGKILL │ │
│ │ • 进程终止 │ │
│ │ • Namespace 销毁 │ │
│ └──────────────────────────────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 3. 清理资源 │ │
│ │ │ │
│ │ • 停止统计收集 │ │
│ │ • 释放文件系统层(RWLayer) │ │
│ │ • 清理网络链接 │ │
│ │ • 删除容器元数据 │ │
│ │ • 删除容器目录 │ │
│ └──────────────────────────────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 4. 容器已删除 │ │
│ │ │ │
│ │ • 进程:已终止 │ │
│ │ • Namespace:已销毁 │ │
│ │ • 文件系统:已清理 │ │
│ │ • 元数据:已删除 │ │
│ │ │ │
│ │ 关键:rm 会彻底删除容器,无法恢复! │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘