作业背景(场景)
你是某公司运维/DevOps 实习生。现在需要在一台 Linux 服务器上完成Web 服务上线、巡检、排障、数据传递、迁移备份、下线清理等生产常见流程。要求你使用 Docker 完成对应操作并提交证据。
统一要求:实验过程全程使用命令行完成(浏览器验证可作为补充截图)。
一、作业目标
-
容器操作:创建 / 启动 / 停止 / 查看
-
docker run 创建+启动合并 ,并且后台持续运行
-
容器交互:
docker exec -it -
文件复制:
docker cp(主机→容器、容器→主机) -
容器迁移:
docker export/docker import -
下线清理:删除容器、批量停止、删除所有容器、批量删除镜像
-
(加分)网络:bridge/host/container/none、自定义网络、端口映射
二、任务清单(按场景完成)
场景 1:上线发布(创建+启动合并,后台运行)
任务 1.1:用 nginx 镜像创建并启动容器(后台运行)
要求:
-
容器名:
web-prod-01 -
端口映射:宿主机
43000映射容器80 -
后台运行:必须使用
-d
bash
docker run -d --name web-prod-01 -p 43000:80 nginx:latest
参数说明:
-d:后台(detached)运行容器
--name web-prod-01:指定容器名称为 web-prod-01
-p 43000:80:将宿主机的 43000 端口映射到容器的 80 端口
nginx:latest:使用官方最新版 nginx 镜像
提交证据:
-
docker ps输出(能看到端口映射) -
浏览器访问
http://宿主机IP:43000的截图(或 curl 输出)


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

任务 2.2:启动该容器并查看状态
提交证据:
-
docker start <容器ID或名称>命令 -
docker ps -a输出(状态为 Up 或 Exited 需解释原因)


之所以状态为UP是因为:这个命令会以前台模式(foreground)启动 nginx;它的主进程(PID 1)是一个长期运行的服务(nginx),没有退出,只要 nginx 进程不崩溃或被停止,容器就会一直 Up。
任务 2.3:停止容器
提交证据:
-
docker stop <容器ID或名称> -
docker ps -a输出(状态为 Exited)
提示:如果 nginx 容器用
/bin/bash作为 PID1,有时会退出,要写明原因:PID=1 进程退出 → 容器退出。

如果在执行docker create -it nginx:latest /bin/bash时没加-it 也就是交互 那么在刚开启这个容器时 bash进程就会立即退出 无需手动停止该容器 容器就已经停止(exited)
场景 3:排障进入容器(容器交互)
任务 3.1:进入 web-prod-01 容器执行命令
要求进入容器执行:
-
ls -
cat /etc/os-release(若镜像无该文件,可换uname -a)
提交证据:
-
docker exec -it web-prod-01 /bin/sh或/bin/bash过程截图(含命令与输出) -
说明:退出容器后容器仍在运行(给出
docker ps)



场景 4:文件复制(主机↔容器)
任务 4.1:把宿主机文件复制到容器
要求:
-
在宿主机创建文件
~/test.txt,内容为学号+姓名(例:2025xxx 张三) -
复制到容器
/opt/目录
提交证据:
-
宿主机:
cat ~/test.txt -
docker cp ~/test.txt web-prod-01:/opt/ -
容器内验证:
cat /opt/test.txt(用 exec 进入或直接 exec 执行)



任务 4.2:从容器复制回宿主机
要求:
- 从容器复制
/opt/test.txt到宿主机~/abc123.txt
提交证据:
-
docker cp web-prod-01:/opt/test.txt ~/abc123.txt -
cat ~/abc123.txt

场景 5:容器迁移(导出与导入)
任务 5.1:导出容器为 tar 包
要求:
- 导出
web-prod-01为web-prod-01.tar
提交证据:
-
docker export web-prod-01 > web-prod-01.tar -
ls -lh web-prod-01.tar

任务 5.2:导入 tar 包生成新镜像
要求:
- 镜像名:
web-import:test
提交证据:
-
cat web-prod-01.tar | docker import - web-import:test -
docker images | grep web-import
说明题(必答):
export/import和save/load有什么区别?(写 3 句话以内)
export/import操作的是容器快照(不含历史层、元数据如 CMD/ENV);save/load操作的是镜像(保留完整分层和元数据);import生成的镜像没有历史记录,相当于扁平化镜像。

场景 6:下线与清理(删除与批量删除)
任务 6.1:删除指定容器
要求:
- 停止并删除
web-prod-01
提交证据:
-
docker stop web-prod-01 -
docker rm web-prod-01 -
docker ps -a | grep web-prod-01(无输出或说明不存在)

任务 6.2:批量停止所有容器(两种方式任选其一)
任选提交一种:
-
docker stop $(docker ps -q) -
docker ps -a | awk ... | xargs docker stop
提交证据:命令 + 执行后 docker ps


任务 6.3:删除所有容器
任选提交一种:
-
docker rm -f $(docker ps -aq) -
docker ps -a | awk ... | xargs docker rm
提交证据:命令 + docker ps -a(结果为空)

任务 6.4:批量删除镜像(两种方式任选其一)
任选提交一种:
-
删除所有镜像:
docker rmi -f $(docker images -q) -
只删除 none 镜像:
docker images | grep none | ...
提交证据:命令 + docker images(展示删除结果)

安全说明(必答): 为什么生产环境不建议直接执行"删除所有容器/镜像"?写出 2 点原因。
可能误删正在运行的关键业务容器,导致服务中断;
删除镜像可能导致无法快速回滚或重建服务,影响灾备能力。
三、网络部分
-
下面是一套**"Docker 网络模式(除 none)场景化作业"** ,专门给学生做实验用,覆盖 *bridge / host / container / 自定义网络(bridge 派生)* 四种模式。 每个模式都给了真实生产场景背景 → 学生操作任务 → 验证点 → 思考题
Docker 网络模式场景化作业
实验说明
-
实验环境:单台 Linux 主机(物理机/虚拟机均可)
-
镜像建议:
nginx、centos:7 -
禁止使用
--network none -
每个场景必须执行命令并给出验证结果
场景一:bridge 模式(默认模式)------Web 服务对外发布
场景背景(生产化)
公司在一台服务器上部署多个 Web 服务,需要:
-
容器之间相互隔离
-
对外通过端口映射提供服务
这是最常见的生产 Docker 网络模式。
任务
任务 1.1:使用 bridge 模式运行 nginx
bashdocker run -d --name web-bridge -p 8080:80 nginx任务 1.2:查看容器 IP
bashdocker inspect web-bridge
任务 1.3:访问服务
-
浏览器访问:
http://宿主机IP:8080 -
或命令:curl http://192.168.10.160:8080
验证要求
-
docker ps中能看到端口映射 -
能通过宿主机端口访问容器服务
-
容器拥有独立 IP


思考题(必答)
1️⃣ 为什么外部不能直接访问容器 IP? 2️⃣ bridge 模式下端口映射的作用是什么?
-
-
1️⃣容器 IP 属于 Docker 内部网桥(docker0),外部网络无法路由;
-
2️⃣让虚拟机 / 容器的网络接口直接连接到物理网络,和物理主机处于同一个网络网段中。
场景二:host 模式------高性能服务部署
场景背景(生产化)
公司部署一个高性能 Web 服务/监控服务:
-
对网络性能敏感
-
不希望端口映射带来额外开销
因此直接让容器使用宿主机网络。
任务
任务 2.1:使用 host 网络模式启动 nginx
任务 2.2:查看网络信息
验证要求
-
访问方式:
http://宿主机IP:80 -
不需要
-p参数 -
容器内看到的 IP 信息与宿主机一致
思考题(必答)
-
1️⃣ host 模式下,容器有没有独立 IP? 2️⃣ host 模式适合什么类型的应用? 3️⃣ host 模式的安全风险是什么?
-
1️⃣没有独立 IP,直接使用宿主机网络栈;
-
2️⃣适合高性能、低延迟服务(如监控 agent、实时通信);
-
3️⃣安全风险:容器可监听任意端口,可能冲突或暴露敏感端口。
场景三:container 模式------紧密耦合服务(Sidecar)
场景背景(生产化)
某系统由两个组件组成:
-
主服务(Service)
-
辅助服务(日志/监控/代理)
要求:
-
两个容器共享网络
-
使用
localhost通信
任务
任务 3.1:启动主容器
任务 3.2:查看主容器网络命名空间
任务 3.3:启动共享网络的辅助容器
任务 3.4:对比两个容器的网络
验证要求
-
两个容器 IP 完全一致
-
网络命名空间相同
-
可通过
localhost通信






思考题(必答)
1️⃣ container 模式与 host 模式的区别? 2️⃣ 为什么称这种模式为 Sidecar(边车模式)?
1️⃣container 模式共享另一个容器的网络命名空间;host 共享宿主机网络;
2️⃣"边车"指辅助服务像摩托车边车一样紧贴主服务,提供日志、代理等功能。
场景四:自定义 bridge 网络------多容器系统与固定 IP
场景背景(生产化)
公司部署一个多服务系统:
-
Web + App + DB
-
需要:
-
容器间直连
-
可指定 IP
-
网络与其他项目隔离
-
任务
任务 4.1:创建自定义网络
任务 4.2:在自定义网络中启动容器
任务 4.3:容器间通信测试
验证要求
-
自定义网络出现在
docker network list -
容器 IP 为指定值
-
容器间可直接通信


思考题(必答)
1️⃣ 为什么默认 bridge 不能指定 IP? 2️⃣ 自定义网络适合什么场景? 3️⃣ Docker 如何实现容器间二层通信?
1️⃣默认 bridge 网络不支持 --ip,因设计上不鼓励固定 IP;
2️⃣适合多服务微架构(如 Web + DB),需稳定通信和隔离;
3️⃣二层通信本质是基于数据链路层(MAC 地址)的通信,Docker 主要通过 网络命名空间、虚拟网络设备(veth pair)、网桥(docker0 / 自定义网桥)三大核心组件协同实现。
四、常见错误提醒
-
docker run -it centos:7 bash退出 bash → 容器会停(PID=1 结束) -
docker exec只能进入运行中 容器,先docker start -
docker rm只能删已停止容器(运行中要先 stop 或用-f) -
批量删除命令只允许实验环境,不要在生产机乱用


