Docker 容器管理
容器是镜像的运行实例,本质上是一个被隔离的进程。管理容器的核心是掌握它的生命周期:创建、启动、暂停、停止、删除,以及进入容器、查看日志等日常操作。
创建与启动
docker create 只创建容器但不启动,docker start 启动已存在的容器;平时更常用 docker run 一步到位:
docker create --name web nginx # 创建容器(状态为 created)
docker start web # 启动容器
docker run -d --name web2 nginx # 创建并启动,-d 让容器在后台运行
生命周期常用命令
| 命令 | 作用 |
|---|---|
| docker start <容器> | 启动已停止的容器 |
| docker stop <容器> | 优雅停止:先发 SIGTERM,超时后再 SIGKILL(默认等待 10 秒) |
| docker restart <容器> | 重启容器 |
| docker pause / unpause <容器> | 暂停 / 恢复容器内所有进程(容器不停止) |
| docker kill <容器> | 直接发送 SIGKILL 强制停止 |
| docker rm <容器> | 删除已停止的容器(运行中的需加 -f) |
容器状态转换
容器有几种状态,命令与状态的对应关系如下:
| 状态 | 说明 | 进入该状态的方式 |
|---|---|---|
| created | 已创建、未启动 | docker create |
| running | 运行中 | docker start / run |
| paused | 已暂停 | docker pause |
| exited | 已退出(停止) | docker stop / kill,或主进程自行结束 |
| dead | 异常状态,无法正常停止 | 少见,用 docker rm -f 清理 |
查看容器
docker ps 默认只显示运行中的容器,加 -a 连已停止的一起列出:
docker ps
# 输出:CONTAINER ID IMAGE COMMAND STATUS PORTS NAMES
docker ps -a # 包含已退出的容器
docker ps -aq # 只输出容器 ID,适合批量操作
docker ps -a | grep web # 按名称关键字过滤
进入容器:exec 与 attach
docker exec 在运行中的容器里另起一个进程,最常用的是起一个交互式 shell:
docker exec -it web bash # 进入 web 容器的 bash(容器内需装有 bash)
ls /usr/share/nginx/html # 在容器内执行命令排查问题
exit # 退出 shell,不影响容器运行
docker attach 则是把当前终端挂到容器主进程(PID 1)上,看到的是主进程的输出;此时按 Ctrl+C 会把信号发给主进程,可能导致容器退出,所以调试主进程输出时才用它。
查看容器日志
容器主进程的标准输出会被 Docker 收集,用 docker logs 查看:
docker logs web # 查看容器全部日志
docker logs -f web # 持续跟踪日志(类似 tail -f)
docker logs --tail 50 web # 只看最后 50 行
小结
容器管理就是围绕 created → running → paused → exited 的状态流转,操作 start / stop / restart / rm;配合 ps -a 查状态、logs -f 看日志、exec 进容器排障,即可覆盖日常绝大多数容器操作。