第五篇:《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 查看输出的习惯,能避免资源浪费和排查问题。

相关推荐
梦梦代码精4 小时前
《回收租赁系统技术选型避坑指南:业务闭环与二开自由度详解》
开发语言·低代码·docker·开源·代码规范
_itgo5 小时前
意图识别落地方案
运维·docker·容器
mengge.cloud5 小时前
0909华为云计算类综合服务小白实验教程
linux·运维·服务器·网络·华为云·云计算
QYR-分析7 小时前
蓝海赛道高速扩容!全球小型观察ROV市场格局、细分场景与发展趋势分析
大数据·运维·云计算
陈皮糖..7 小时前
从零搭建一个简易 AI 运维问答机器人(RAG + LangChain + Streamlit)
运维·人工智能·ai·langchain·机器人
制造业的搬运工8 小时前
AI服务器背板与传统背板差异:三大设计升级解析
运维·服务器·人工智能·科技·制造·pcb工艺
顶点多余8 小时前
仿muduo库实现高并发服务器项目
运维·服务器
脚踏实地,坚持不懈!8 小时前
Linux 6.18.7 内存分配与回收 —— 代码梳理
linux·运维·网络
2601_962300479 小时前
python在运维上可以干什么,请举几个具体的例子
运维·python·系统管理·网络监控·自动化脚本
Android系统攻城狮10 小时前
Linux Gstreamer深度解析之gst_audio_format_build_integer调用流程与实战(十二)
linux·运维·服务器·音视频·车载音视频·gstreamer进阶