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

相关推荐
duansamve15 小时前
Python3+Flask+PostgreSQL18+Vue3项目生产环境用docker如何部署?
python·docker·flask
mengge.cloud17 小时前
prometheus+k8s+弹性伸缩,综合项目
云原生·容器·kubernetes·prometheus
Z21-X18 小时前
云原生运维学习笔记:ECShop全链路容器化部署与Docker底层资源隔离深度剖析
运维·笔记·学习·云原生
进击的荆棘20 小时前
Linux系统——线程同步与互斥之线程池和安全
linux·运维·服务器·安全·单例模式·线程
瑞雪兆丰年兮21 小时前
JavaWeb-day11-SpringBootWeb案例(文件上传)
java·运维·服务器·javaweb·oss
xbzb21 小时前
从零容器化部署 ECShop:Harbor 私有仓库 + 自定义 PHP 镜像 + LNMP 三容器
容器·php·harbor·镜像·仓库·ecshop
那明眸似水21 小时前
云原生项目三:Docker秒级启动NextCloud个人网盘存储办公系统
linux·运维·docker·云原生·容器
腾飞开源1 天前
03_Kubernetes 核心概念拆解:从 Spec/Status 收敛到工作负载控制器的设计逻辑
云原生·容器·kubernetes
小南家的青蛙1 天前
微服务体系下DevOps运维岗位面试方案设计
运维·面试·职场和发展·devops
知已难寻1 天前
Docker 入门:容器技术与 Docker 基础
java·运维·服务器·docker·云原生·容器