Docker容器场景化实操演示
场景
你是某公司运维/DevOps 实习生。现在需要在一台 Linux 服务器上完成**Web 服务上线、巡检、排障、数据传递、迁移备份、下线清理**等生产常见流程。要求你使用 Docker 完成对应操作并提交证据。
场景 1:上线发布(创建+启动合并,后台运行)
任务 1.1:用 nginx 镜像创建并启动容器(后台运行)
要求:
* 容器名:`web-prod-01`
* 端口映射:宿主机 `43000` 映射容器 `80`
* 后台运行:必须使用 `-d`
docker ps` 输出(能看到端口映射)

浏览器访问 `http://宿主机IP:43000`

场景 2:基础操作(创建、启动、停止、查看)
任务 2.1:使用 docker create 创建容器(默认停止)
要求:
* 使用 `docker create -it nginx:latest /bin/bash`(或按你环境可用镜像)
* 证明容器状态是 `Created`
docker ps -a` 输出(状态为 Created)

任务 2.2:启动该容器并查看状态

【小贴士】:
Up状态:容器主进程持续运行,是正常提供服务的状态,通常由持续性启动命令(如后台服务)导致;Exited状态:容器主进程已退出,Exit Code 0多为正常完成一次性任务,非 0 则是异常(如配置错误、资源不足、端口冲突),需通过docker logs排查原因。
任务 2.3:停止容器
* `docker stop <容器ID或名称>`
* `docker ps -a` 输出(状态为 Exited)

场景 3:排障进入容器(容器交互)
任务 3.1:进入 web-prod-01 容器执行命令
* `ls`
* `cat /etc/os-release`

场景 4:文件复制(主机↔容器)
任务 4.1:把宿主机文件复制到容器
要求:
1. 在宿主机创建文件 `~/test.txt`,内容为学号+姓名(例:`2025xxx 张三`)
2. 复制到容器 `/opt/` 目录
过程如下:
* 宿主机:`cat ~/test.txt`
* `docker cp ~/test.txt web-prod-01:/opt/`
* 容器内验证:`cat /opt/test.txt`

任务 4.2:从容器复制回宿主机
要求:
* 从容器复制 `/opt/test.txt` 到宿主机 `~/abc123.txt`

场景 5:容器迁移(导出与导入)
任务 5.1:导出容器为 tar 包
过程如下
`docker export web-prod-01 > web-prod-01.tar`
* `ls -lh web-prod-01.tar`

任务 5.2:导入 tar 包生成新镜像
过程如下:
* `cat web-prod-01.tar | docker import - web-import:test`
* `docker images | grep web-import`

export/import` 和 `save/load` 有什么区别?
save/load针对镜像(含所有层和元数据),export/import针对容器(仅导出容器文件系统);save可打包多个镜像,export仅导出单个容器快照;load保留镜像完整信息(标签 / 历史),import会生成无历史的新镜像。
场景 6:下线与清理(删除与批量删除)
任务 6.1:删除指定容器
* `docker stop web-prod-01`
* `docker rm web-prod-01`
* `docker ps -a | grep web-prod-01`

任务 6.2:批量停止所有容器
`docker stop $(docker ps -q)`

任务 6.4:批量删除镜像
docker rmi -f $(docker images -q)`



为什么生产环境不建议直接执行“删除所有容器/镜像”?
1. 不可逆的业务中断,引发生产故障
2. 误删关键资源,破坏系统环境
生产环境建议:① 按需删除(指定容器 ID / 镜像名,而非批量);② 删除前备份数据、确认容器 / 镜像非核心资源;③ 通过容器编排工具(如 Docker Compose、K8s)管理资源,避免手动执行高危删除命令。
Docker 网络模式场景
场景背景(生产化) 公司在一台服务器上部署多个 Web 服务,需要: - 容器之间相互隔离 - 对外通过端口映射提供服务
任务 1.1:使用 bridge 模式运行 nginx

任务 1.2:查看容器 IP

任务 1.3:访问服务 - 浏览器访问:`http://宿主机IP:8080`

场景二:host 模式——高性能服务部署
场景背景(生产化) 公司部署一个**高性能 Web 服务/监控服务**: - 对网络性能敏感 - 不希望端口映射带来额外开销 因此直接让容器使用宿主机网络 任务 2.1:使用 host 网络模式启动 nginx任务 2.2:查看网络信息

1️⃣ host 模式下,容器有没有独立 IP?
没有,host模式下,容器会完全共享宿主机的网络命名空间,容器没有自己的网卡、IP 地址、端口范围,直接使用宿主机的 IP 和端口; 在容器内执行 ifconfig/ip addr,看到的是宿主机的网卡和 IP,而非容器专属的; 容器内的网络操作(比如监听端口),本质就是在宿主机的网络栈上操作。
2️⃣ host 模式适合什么类型的应用?
对网络性能要求极致的应用;需要直接使用宿主机多端口 / 动态端口的应用;测试 / 调试场景
3️⃣ host 模式的安全风险是什么?
host模式的核心风险来自网络隔离性的丧失,端口暴露风险(最核心);权限与网络攻击面扩大;与宿主机进程的冲突风险;跨容器的网络干扰
场景三:container 模式——紧密耦合服务(Sidecar)
场景背景(生产化) 某系统由两个组件组成: - 主服务(Service) - 辅助服务(日志/监控/代理) 要求: - 两个容器**共享网络** - 使用 `localhost` 通信
任务 3.1:启动主容器

任务 3.2:查看主容器网络命名空间

任务 3.3:启动共享网络的辅助容器

任务 3.4:对比两个容器的网络

验证:两个容器可通过localhost通信

1️⃣ container 模式与 host 模式的区别?
| 特性 | container 模式 | host 模式 |
|---|---|---|
| 网络命名空间归属 | 复用指定容器的网络命名空间 | 复用宿主机的网络命名空间 |
localhost 指向 | 指向共享的目标容器,同命名空间容器互通 | 指向宿主机,容器与宿主机 localhost 等价 |
| IP / 端口特性 | 与目标容器共用 IP,端口由目标容器管理 | 与宿主机共用 IP,直接占用宿主机端口 |
| 隔离性 | 仅与共享容器共享网络,与其他容器 / 宿主机隔离 | 无网络隔离,容器网络行为等价于宿主机进程 |
| 适用场景 | 容器间 localhost 通信(如 Sidecar 模式) | 高性能网络需求、需直接使用宿主机网络资源 |
2️⃣ 为什么称这种模式为 Sidecar(边车模式)? Sidecar 模式借鉴边车摩托车的 “主车 + 辅助边车” 架构
-
主容器:承担核心业务功能(如 Web 服务);
-
Sidecar 容器:通过
container模式共享主容器的网络命名空间,提供辅助功能(如日志收集、监控、流量代理); -
两者独立部署但资源共享,Sidecar 可通过
localhost无侵入访问主容器服务,不影响主容器核心逻辑,就像边车依附主车提供额外能力。
场景四:自定义 bridge 网络——多容器系统与固定 IP
场景背景(生产化)
公司部署一个多服务系统:
- Web + App + DB
- 需要:
- 容器间直连
- 可指定 IP
- 网络与其他项目隔离
任务 4.1:创建自定义网络任务 4.2:在自定义网络中启动容器
任务 4.3:容器间通信测试y要求定义网络出现在 `docker network ls`

验证要求 自定义网络出现在 `docker network ls` 容器 IP 为指定值 容器间可直接通信 1️⃣ 为什么默认 bridge 不能指定 IP? 核心是 Docker 限制了默认 bridge 的 IPAM 配置,设计目标是极简易用,手动指定易导致冲突和机制破坏; 2️⃣ 自定义网络适合什么场景? 需要固定 IP / 域名解析、多容器隔离、自定义网络参数、容器集群通信的场景; 3️⃣ Docker 如何实现容器间二层通信? 核心是虚拟网桥(软件交换机)+ veth 对(容器和网桥的连接通道),数据包通过网桥基于 MAC 地址转发,macvlan/overlay 可满足特殊二层通信需求。
更多推荐
任务 2.2:查看网络信息
任务 4.2:在自定义网络中启动容器
任务 4.3:容器间通信测试y要求定义网络出现在 `docker network ls`
所有评论(0)