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 进容器排障,即可覆盖日常绝大多数容器操作。

笔记加载中…