镜像是静态的,容器才是真正运行的应用。理解容器的生命周期------从创建、启动、暂停到停止、删除------是使用 Docker 的核心技能。本文将详细介绍容器的各种状态、常用管理命令以及资源限制参数,帮助你自如地操控容器。
一、容器的状态模型
Docker 容器在其生命周期中会经历多种状态。执行 docker ps -a 时,STATUS 列会显示当前状态:

状态转换图(文字描述):
text
docker create → Created → docker start → Running → (主进程结束) → Exited
↓ ↓
docker rm docker stop (SIGTERM) → Exited
docker kill (SIGKILL) → Exited
docker pause → Paused → docker unpause
二、核心容器管理命令
2.1 创建容器(但不启动)
bash
docker create --name mynginx -p 8080:80 nginx
此时容器处于 Created 状态,可用 docker start 启动。
2.2 运行容器(创建+启动一体)
bash
docker run [选项] 镜像 [命令] [参数...]
最常用选项:
选项 作用
-d, --detach 后台运行容器
-it 交互式运行(如进入 shell)
--name 给容器命名
-p, --publish 端口映射 宿主机:容器
-v, --volume 挂载卷
--rm 容器退出后自动删除
--restart 重启策略(no/always/on-failure/unless-stopped)
示例:
bash
# 后台运行一个 Nginx,映射 8080 端口
docker run -d --name web -p 8080:80 nginx
# 交互式运行 Ubuntu,进入 bash
docker run -it --name ubuntu-test ubuntu bash
# 一次性运行后自动删除
docker run --rm alpine echo "Hello"
# 设置重启策略
docker run -d --restart=always --name always-up nginx
2.3 查看容器
bash
# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止)
docker ps -a
# 仅显示容器 ID(常用于脚本)
docker ps -q
# 查看最后创建的 N 个容器
docker ps -n 5
2.4 启动、停止、重启、暂停
bash
# 启动已创建的容器
docker start web
# 优雅停止(发送 SIGTERM,等待超时后 SIGKILL)
docker stop web
# 强制停止(直接发送 SIGKILL)
docker kill web
# 重启
docker restart web
# 暂停/恢复(进程冻结,不释放资源)
docker pause web
docker unpause web
2.5 删除容器
bash
# 删除已停止的容器
docker rm web
# 强制删除运行中的容器(会先停止)
docker rm -f web
# 删除所有已停止的容器
docker container prune
# 删除所有容器(包括运行中,危险!)
docker rm -f $(docker ps -aq)
2.6 进入容器(调试用)
bash
# 执行命令(不进入交互式 shell)
docker exec web ls /etc/nginx
# 进入交互式 shell(如果容器有 bash)
docker exec -it web /bin/bash
# 对于 Alpine 等没有 bash 的,使用 sh
docker exec -it alpine sh
docker attach 也可以进入容器,但会直接 attach 到主进程,通常不推荐(退出时会停止容器)。docker exec 是更安全的方式。
2.7 查看容器日志
bash
# 查看全部日志
docker logs web
# 实时跟踪日志(类似 tail -f)
docker logs -f web
# 显示最后 100 行
docker logs --tail 100 web
# 带时间戳
docker logs -t web
2.8 查看容器资源使用
bash
# 实时资源统计
docker stats web
# 查看容器详细信息(JSON 格式)
docker inspect web
# 过滤特定信息,如 IP 地址
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web
三、容器资源限制
通过 docker run 参数限制容器的 CPU、内存等资源,防止单个容器耗尽宿主机资源。

示例:
bash
# 限制最多使用 512MB 内存,1.5 个 CPU 核心
docker run -d --memory=512m --cpus=1.5 nginx
注意:不设置任何限制时,容器可以耗尽宿主机全部资源,生产环境务必设置。
四、容器与宿主机文件复制
bash
# 从容器复制文件到宿主机
docker cp web:/etc/nginx/nginx.conf ./nginx.conf
# 从宿主机复制文件到容器
docker cp ./index.html web:/usr/share/nginx/html/index.html
五、实战:一个完整的管理流程
bash
# 1. 运行一个 Redis 容器
docker run -d --name myredis --restart always redis
# 2. 查看容器是否正常运行
docker ps | grep myredis
# 3. 进入容器执行命令
docker exec -it myredis redis-cli ping
# 4. 查看日志
docker logs --tail 10 myredis
# 5. 停止并删除
docker stop myredis
docker rm myredis
# 6. 验证已删除
docker ps -a | grep myredis
六、常见问题与解决

七、小结
容器的生命周期管理是日常使用 Docker 最频繁的操作。掌握 docker run、docker stop、docker rm 等命令以及资源限制参数,可以让你灵活控制容器行为。同时,养成使用 --rm 清理临时容器、用 docker logs 查看输出的习惯,能避免资源浪费和排查问题。