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
提交证据:
-
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 需解释原因)
任务 2.3:停止容器
提交证据:
docker stop <容器ID或名称>docker ps -a输出(状态为 Exited)

提示:如果 nginx 容器用
/bin/bash作为 PID1,有时会退出,要写明原因:PID=1 进程退出 → 容器退出。
场景 3:排障进入容器(容器交互)
任务 3.1:进入 web-prod-01 容器执行命令
要求进入容器执行:
lscat /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.txtcat ~/abc123.txt
场景 5:容器迁移(导出与导入)
任务 5.1:导出容器为 tar 包
要求:
- 导出
web-prod-01为web-prod-01.tar
提交证据:
docker export web-prod-01 > web-prod-01.tarls -lh web-prod-01.tar
任务 5.2:导入 tar 包生成新镜像
要求:
- 镜像名:
web-import:test
提交证据:
cat web-prod-01.tar | docker import - web-import:testdocker images | grep web-import
说明题(必答):
export/import和save/load有什么区别?(写 3 句话以内)
操作对象不同:export/import针对容器,save/load针对镜像。
内容不同:export仅含容器文件系统,save含镜像完整历史层。
用途不同:export/import用于容器迁移,save/load用于镜像备份
场景 6:下线与清理(删除与批量删除)
任务 6.1:删除指定容器
要求:
- 停止并删除
web-prod-01
提交证据:
docker stop web-prod-01docker rm web-prod-01docker 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

任务 1.2:查看容器 IP

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

验证要求
docker ps中能看到端口映射- 能通过宿主机端口访问容器服务
- 容器拥有独立 IP

思考题(必答)
1️⃣ 为什么外部不能直接访问容器 IP?
因为容器 IP 是 Docker 虚拟网桥分配的私有 IP,仅宿主机可直接访问,外部网络无路由
2️⃣ bridge 模式下端口映射的作用是什么?
将宿主机端口与容器端口绑定,使外部能通过宿主机 IP: 端口访问容器服务
场景二:host 模式——高性能服务部署
场景背景(生产化)
公司部署一个高性能 Web 服务/监控服务:
- 对网络性能敏感
- 不希望端口映射带来额外开销
因此直接让容器使用宿主机网络。
学生任务
任务 2.1:使用 host 网络模式启动 nginx

任务 2.2:查看网络信息

验证要求
- 访问方式:
http://宿主机IP:80 - 不需要
-p参数 - 容器内看到的 IP 信息与宿主机一致


思考题(必答)
1️⃣ host 模式下,容器有没有独立 IP?
容器没有独立 IP,直接使用宿主机的 IP 和端口
2️⃣ host 模式适合什么类型的应用?
适合对网络性能要求高的应用(如高性能 Web 服务、监控服务)
3️⃣ host 模式的安全风险是什么?
容器可直接访问宿主机网络资源,可能泄露宿主机信息
场景三:container 模式——紧密耦合服务(Sidecar)
场景背景(生产化)
某系统由两个组件组成:
- 主服务(Service)
- 辅助服务(日志/监控/代理)
要求:
- 两个容器共享网络
- 使用
localhost通信
学生任务
任务 3.1:启动主容器
任务 3.2:查看主容器网络命名空间
任务 3.3:启动共享网络的辅助容器

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

验证要求
- 两个容器 IP 完全一致
- 网络命名空间相同
- 可通过
localhost通信
思考题(必答)
1️⃣ container 模式与 host 模式的区别?
ontainer 模式共享另一个容器的网络,而 host 模式共享宿主机网络
2️⃣ 为什么称这种模式为 Sidecar(边车模式)?
辅助容器像 “边车” 一样依附于主容器,共享网络资源并提供辅助功能(如日志、代理),故称为 Sidecar 模式。
场景四:自定义 bridge 网络——多容器系统与固定 IP
场景背景(生产化)
公司部署一个多服务系统:
- Web + App + DB
- 需要:
- 容器间直连
- 可指定 IP
- 网络与其他项目隔离
学生任务
任务 4.1:创建自定义网络

任务 4.2:在自定义网络中启动容器

任务 4.3:容器间通信测试!

验证要求
- 自定义网络出现在
docker network ls - 容器 IP 为指定值
- 容器间可直接通信
思考题(必答)
1️⃣ 为什么默认 bridge 不能指定 IP?
Docker 默认 bridge 的 IP 分配由 Docker daemon 自动管理,无手动指定功能。
2️⃣ 自定义网络适合什么场景?
适合多容器组成的复杂系统(如 Web+App+DB),需固定 IP 和网络隔离
3️⃣ Docker 如何实现容器间二层通信?
Docker 通过虚拟网桥(bridge)和 veth pair 实现容器间二层通信,容器接入同一网桥即可直接通信
更多推荐
所有评论(0)