第五篇:《Docker 容器生命周期管理》

镜像是静态的,容器才是真正运行的应用。理解容器的生命周期------从创建、启动、暂停到停止、删除------是使用 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 查看输出的习惯,能避免资源浪费和排查问题。

相关推荐
Dymc1 小时前
【Ubuntu系统指令启动】一招解决:Ubuntu 20.04 桌面双击 .desktop 文件不再“用文本编辑器打开”
linux·运维·ubuntu·一键运行
ai产品老杨1 小时前
统一视频接入与多品牌利旧:基于 Docker 与 GB28181/RTSP 的边缘计算 AI 视频中台架构设计与源码交付实践
人工智能·docker·音视频
蜀道山老天师1 小时前
Docker 进阶:数据持久化与容器网络互联(数据卷、挂载目录、端口映射、自定义网络)
运维·网络·docker·云原生·容器
qq_白羊座1 小时前
CI/CD 与 DevOps 二
运维·ci/cd·devops
IT策士1 小时前
Docker 从 0 到 1 再到 Kubernetes 实战:第6篇 容器生命周期管理
docker·容器·kubernetes
zhz52141 小时前
Docker 部署 MongoDB / MySQL / PostgreSQL 安全加固实录:TLS 双向认证、双因素鉴别与审计
mysql·mongodb·docker·postgresql·等保
Ms_lan1 小时前
同方工业携手桂花网:广州某养老院智慧健康监测实践案例
运维·服务器·网络
sailing-data1 小时前
【OS zephyr】make与cmake
linux·运维·服务器
❀搜不到2 小时前
ubuntu 更新cmake
linux·运维·ubuntu