容器生命周期与管理策略

前言

一、容器生命周期概述

二、容器创建与启动

[2.1 创建容器但不启动](#2.1 创建容器但不启动)

[2.2 启动容器](#2.2 启动容器)

[2.3 创建并运行容器](#2.3 创建并运行容器)

[2.4 查看容器状态](#2.4 查看容器状态)

[2.5 停止与重启容器](#2.5 停止与重启容器)

[2.6 删除容器](#2.6 删除容器)

三、容器交互与控制

[3.1 进入容器交互模式](#3.1 进入容器交互模式)

[3.2 查看容器日志](#3.2 查看容器日志)

[3.3 容器内部执行命令](#3.3 容器内部执行命令)

[3.4 暂停与恢复容器](#3.4 暂停与恢复容器)

四、容器信息查看与监控

[4.1 查看容器详细信息](#4.1 查看容器详细信息)

[4.2 实时监控容器资源](#4.2 实时监控容器资源)

[4.3 查看容器内运行的进程](#4.3 查看容器内运行的进程)

[4.4 容器文件系统变化追踪](#4.4 容器文件系统变化追踪)

五、容器导出、导入与迁移

[5.1 导出容器](#5.1 导出容器)

[5.2 导入容器](#5.2 导入容器)

[5.3 区别说明](#5.3 区别说明)

六、容器自动启动与自恢复

[6.1 开机自启配置](#6.1 开机自启配置)

[6.2 查看重启策略](#6.2 查看重启策略)

[6.3 批量启动所有容器](#6.3 批量启动所有容器)

七、容器快照与备份

[7.1 提交容器为新镜像](#7.1 提交容器为新镜像)

[7.2 快照后重新运行](#7.2 快照后重新运行)

[7.3 实战示例](#7.3 实战示例)

八、容器批量管理技巧

九、容器故障排查命令

十、总结

前言

在前一章中,我们学习了 Docker 的安装与基础命令,成功运行了第一个容器。 但在生产环境中,我们需要对容器进行更精细的控制,比如:

  • 如何批量创建或删除容器?

  • 如何让容器开机自启?

  • 如何查看容器日志与状态?

  • 如何导出容器、迁移容器或创建快照?

本篇将深入剖析 容器生命周期与管理策略,并提供实战命令演练。


一、容器生命周期概述

Docker 容器的生命周期一般分为以下阶段:

复制代码
创建(create) → 启动(start) → 运行中(running)
       ↓                     ↓
   停止(stop) ← 暂停(pause)
       ↓
   删除(rm)

💡 理解关键: Docker 容器本质上是运行在宿主机上的一个进程(PID),因此容器的生命周期与进程生命周期紧密相关。


二、容器创建与启动

2.1 创建容器但不启动

复制代码
docker create --name webtest nginx

创建容器后不会立即运行,可用 docker start 启动。


2.2 启动容器

复制代码
docker start webtest

💡 若容器已经存在,可直接启动;否则需使用 docker run 新建。


2.3 创建并运行容器

复制代码
docker run -d --name web1 -p 8080:80 nginx

参数说明:

参数 含义
-d 后台运行
--name 指定容器名称
-p 端口映射
nginx 镜像名称

2.4 查看容器状态

复制代码
docker ps        # 查看正在运行的容器
docker ps -a     # 查看所有容器(含已停止)

2.5 停止与重启容器

复制代码
docker stop web1
docker restart web1

2.6 删除容器

复制代码
docker rm web1

强制删除正在运行的容器:

复制代码
docker rm -f web1

⚠️ 注意: 删除操作不可逆,删除后容器中的数据将丢失(除非挂载数据卷)。


三、容器交互与控制

3.1 进入容器交互模式

复制代码
docker exec -it web1 /bin/bash

docker attach 不同,exec 不会干扰主进程。


3.2 查看容器日志

复制代码
docker logs -f web1

参数说明:

参数 说明
-f 实时查看日志输出
--tail 100 仅查看最后 100 行
-t 显示时间戳

示例:

复制代码
docker logs -t --tail 50 web1

3.3 容器内部执行命令

在不进入容器的情况下执行命令:

复制代码
docker exec web1 cat /etc/os-release

3.4 暂停与恢复容器

暂停容器(冻结进程):

复制代码
docker pause web1

恢复容器:

复制代码
docker unpause web1

实用场景: 暂时冻结容器以减少 CPU 消耗,适用于维护或测试。


四、容器信息查看与监控

4.1 查看容器详细信息

复制代码
docker inspect web1

输出包含容器 ID、IP、挂载卷、环境变量等完整元数据。

快速查看容器 IP 地址:

复制代码
docker inspect -f '{{.NetworkSettings.IPAddress}}' web1

4.2 实时监控容器资源

复制代码
docker stats

输出:

复制代码
CONTAINER ID   NAME     CPU %   MEM USAGE / LIMIT   NET I/O    BLOCK I/O   PIDS
2a7f...         web1     0.34%   64MiB / 2GiB        5MB / 4MB  0B / 0B     10

💡 相当于容器版 top 命令。


4.3 查看容器内运行的进程

复制代码
docker top web1

显示容器中所有正在运行的进程。


4.4 容器文件系统变化追踪

复制代码
docker diff web1

显示容器文件系统相对镜像的修改内容。

输出示例:

复制代码
C /etc/nginx/nginx.conf
A /var/www/html/index.html

五、容器导出、导入与迁移

5.1 导出容器

复制代码
docker export web1 > web1.tar

导出容器的文件系统(不包含元信息和层结构)。


5.2 导入容器

复制代码
cat web1.tar | docker import - web1:v1

将导出的容器打包为新的镜像。


5.3 区别说明

命令 导出对象 是否包含镜像历史层 适用场景
docker save 镜像 ✅ 是 迁移镜像
docker export 容器 ❌ 否 迁移容器文件系统

六、容器自动启动与自恢复

6.1 开机自启配置

在运行容器时添加:

复制代码
docker run -d --restart=always --name redis redis:latest

可选参数说明:

参数 说明
no 默认,不自动重启
on-failure 非 0 退出码时重启
always 无论如何都重启
unless-stopped 手动停止后不重启

6.2 查看重启策略

复制代码
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' redis

6.3 批量启动所有容器

复制代码
docker start $(docker ps -aq)

批量停止所有容器:

复制代码
docker stop $(docker ps -aq)

七、容器快照与备份

7.1 提交容器为新镜像

复制代码
docker commit web1 web1:v2

💡 作用: 将当前容器的修改保存成新的镜像版本。


7.2 快照后重新运行

复制代码
docker run -d -p 8081:80 web1:v2

这样你就创建了一个基于修改后状态的新容器。


7.3 实战示例

1️⃣ 进入容器修改网页文件:

复制代码
docker exec -it web1 bash
echo "Hello Docker v2" > /usr/share/nginx/html/index.html
exit

2️⃣ 提交修改:

复制代码
docker commit web1 nginx:v2

3️⃣ 创建新容器验证:

复制代码
docker run -d -p 8081:80 nginx:v2

访问 http://宿主机:8081 即可看到更新后的页面。


八、容器批量管理技巧

操作 命令 说明
停止全部容器 docker stop $(docker ps -aq) 批量停止
删除全部容器 docker rm $(docker ps -aq) 批量删除
删除全部镜像 docker rmi $(docker images -q) 清空镜像
清理未使用资源 docker system prune -a 清理系统缓存

⚠️ 谨慎使用! prune -a 会清除未被使用的镜像、容器、网络与缓存。


九、容器故障排查命令

命令 用途
docker logs <容器名> 查看日志
docker inspect <容器名> 查看容器元数据
docker events 查看 Docker 实时事件
docker ps -a 查看容器状态
docker stats 查看性能监控信息

💡 建议: 故障排查时依次检查:日志 → 状态 → 资源占用 → 网络连接。


十、总结

通过本篇学习,你应掌握以下内容:

✅ 容器的完整生命周期管理流程

✅ 容器创建、停止、删除、导出导入命令

✅ 日志查看、资源监控与快照创建

✅ 自动重启策略与批量操作技巧

✅ 容器迁移与版本化实战

相关推荐
---学无止境---3 小时前
Linux 内核等待队列(Wait Queue)机制深度分析
linux
wheeldown3 小时前
【Linux】Linux管道与进程池深度解析:从原理到实战
linux·运维·服务器
_extraordinary_3 小时前
Java Linux --- 基本命令,部署Java web程序到线上访问
java·linux·前端
Ronin3053 小时前
【Linux网络】网络命令
linux·网络·网络命令
数字化顾问4 小时前
探索 Docker/K8s 部署 MySQL 的创新实践与优化技巧——容器化部署深度解析
docker
熙客4 小时前
DevOps简介
运维·devops
XUE-52113144 小时前
BGP实验-路由反射器
linux·运维·网络
東雪蓮☆4 小时前
从安装到上手实战——Docker 基础命令全解析
运维·docker·容器
upgrador5 小时前
Linux内核与设备管理:USB存储驱动usb_storage/uas的安全卸载与复原
linux·运维·安全