提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、作业目标
- 二、任务清单(按场景完成)
-
- [场景 1:上线发布(创建+启动合并,后台运行)](#场景 1:上线发布(创建+启动合并,后台运行))
-
- [任务 1.1:用 nginx 镜像创建并启动容器(后台运行)](#任务 1.1:用 nginx 镜像创建并启动容器(后台运行))
- [场景 2:基础操作(创建、启动、停止、查看)](#场景 2:基础操作(创建、启动、停止、查看))
- [任务 2.1:使用 docker create 创建容器(默认停止)](#任务 2.1:使用 docker create 创建容器(默认停止))
-
- [任务 2.2:启动该容器并查看状态](#任务 2.2:启动该容器并查看状态)
- [任务 2.3:停止容器](#任务 2.3:停止容器)
- [场景 3:排障进入容器(容器交互)](#场景 3:排障进入容器(容器交互))
-
- [任务 3.1:进入 web-prod-01 容器执行命令](#任务 3.1:进入 web-prod-01 容器执行命令)
- [场景 4:文件复制(主机↔容器)](#场景 4:文件复制(主机↔容器))
-
- [任务 4.1:把宿主机文件复制到容器](#任务 4.1:把宿主机文件复制到容器)
- [任务 4.2:从容器复制回宿主机](#任务 4.2:从容器复制回宿主机)
- [场景 5:容器迁移(导出与导入)](#场景 5:容器迁移(导出与导入))
-
- [任务 5.1:导出容器为 tar 包](#任务 5.1:导出容器为 tar 包)
- [任务 5.2:导入 tar 包生成新镜像](#任务 5.2:导入 tar 包生成新镜像)
- [`export/import` 和 `save/load` 有什么区别?](#
export/import和save/load有什么区别?)
- [场景 6:下线与清理(删除与批量删除)](#场景 6:下线与清理(删除与批量删除))
-
- [任务 6.1:删除指定容器](#任务 6.1:删除指定容器)
- [任务 6.2:批量停止所有容器(两种方式任选其一)](#任务 6.2:批量停止所有容器(两种方式任选其一))
- [任务 6.3:删除所有容器](#任务 6.3:删除所有容器)
- [任务 6.4:批量删除镜像(两种方式任选其一)](#任务 6.4:批量删除镜像(两种方式任选其一))
- 三、网络部分
-
- [Docker 网络模式场景化作业](#Docker 网络模式场景化作业)
- [场景一:bridge 模式(默认模式)------Web 服务对外发布](#场景一:bridge 模式(默认模式)——Web 服务对外发布)
-
- [任务 1.1:使用 bridge 模式运行 nginx](#任务 1.1:使用 bridge 模式运行 nginx)
- [1️⃣ 为什么外部不能直接访问容器 IP?](#1️⃣ 为什么外部不能直接访问容器 IP?)
- [2️⃣ bridge 模式下端口映射的作用是什么?](#2️⃣ bridge 模式下端口映射的作用是什么?)
- [场景二:host 模式------高性能服务部署](#场景二:host 模式——高性能服务部署)
-
- [任务 2.1:使用 host 网络模式启动 nginx](#任务 2.1:使用 host 网络模式启动 nginx)
- [1️⃣ host 模式下,容器有没有独立 IP?](#1️⃣ host 模式下,容器有没有独立 IP?)
- [2️⃣ host 模式适合什么类型的应用?](#2️⃣ host 模式适合什么类型的应用?)
- [3️⃣ host 模式的安全风险是什么](#3️⃣ host 模式的安全风险是什么)
- [场景三:container 模式------紧密耦合服务(Sidecar)](#场景三:container 模式——紧密耦合服务(Sidecar))
-
- [任务 3.1:启动主容器](#任务 3.1:启动主容器)
- [场景四:自定义 bridge 网络------多容器系统与固定 IP](#场景四:自定义 bridge 网络——多容器系统与固定 IP)
-
- [任务 4.1:创建自定义网络 任务](#任务 4.1:创建自定义网络 任务)
- [1.为什么默认 bridge 不能指定 IP?](#1.为什么默认 bridge 不能指定 IP?)
- [2. 自定义网络适合什么场景?](#2. 自定义网络适合什么场景?)
- [3.Docker 如何实现容器间二层通信?](#3.Docker 如何实现容器间二层通信?)
- [总结本质是用 Linux 虚拟网桥模拟二层交换机,用 veth pair 模拟网线,将多个容器的网络命名空间接入同一网桥,从而实现与物理网络一致的二层通信(基于 MAC 地址转发);](#总结本质是用 Linux 虚拟网桥模拟二层交换机,用 veth pair 模拟网线,将多个容器的网络命名空间接入同一网桥,从而实现与物理网络一致的二层通信(基于 MAC 地址转发);)
前言
`
你是某公司运维/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
提交证据:
docker ps输出(能看到端口映射)- 浏览器访问
http://宿主机IP:43000的截图(或 curl 输出)
bash
# 启动Nginx容器,指定宿主机43000端口→容器80端口
docker run -d --name web-prod-01 -p 43000:80 nginx
# 查看端口映射结果
docker ps -a



场景 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 进程退出 → 容器退出。
容器启动后,会将用户指定的命令(如 /bin/bash)作为容器内的 PID=1 进程(主进程),Docker 守护进程会持续监控这个 PID=1 进程的状态 ------只要 PID=1 进程退出,Docker 就判定容器生命周期结束,立即将容器状态置为 Exited。

docker ps -a结果解读:
CONTAINER ID:容器唯一ID
NAME:容器名称
STATUS:容器状态(Up运行中,Exited已停止,Paused暂停)
PORTS:端口映射(如0.0.0.0:8080->80/tcp表示宿主机8080端口映射到容器80端口)
场景 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.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 句话以内)
save/load 针对镜像,保留分层和历史记录,export/import 针对容器,仅导出文件系统快照;
import 生成的镜像无分层历史,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 网络模式(除 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 ◦或命令:

1️⃣ 为什么外部不能直接访问容器 IP?
容器 IP 是宿主机内网私有 IP,外部网络无路由可达 + 网络隔离机制限制:
2️⃣ bridge 模式下端口映射的作用是什么?
是打通外部网络到容器的通信链路,解决容器 IP 无法被外部访问的问题
场景二:host 模式------高性能服务部署
任务 2.1:使用 host 网络模式启动 nginx
2.2:查看网络信息络模式启动 nginx
验证方式:
- 访问方式:
http://宿主机IP:80 - 不需要
-p参数 - 容器内看到的 IP 信息与宿主机一致

1️⃣ host 模式下,容器有没有独立 IP?
没有,和宿主机共享ip
2️⃣ host 模式适合什么类型的应用?
追求极致网络性能、需直接使用宿主机端口 / 网络环境
3️⃣ host 模式的安全风险是什么
host 模式的安全风险根源是「网络无隔离」,容器相当于直接 "暴露" 在宿主机网络中,一旦容器被入侵或存在恶意程序,会直接威胁宿主机及内网环境的安全,权限边界远弱于 bridge 模式。
场景三:container 模式------紧密耦合服务(Sidecar)
场景背景(生产化)
某系统由两个组件组成:
◦ 主服务(Service)
◦ 辅助服务(日志/监控/代理)
要求:
◦ 两个容器共享网络 ◦ 使用 localhost 通信
任务 3.1:启动主容器
任务 3.2:查看主容器网络命名空间
任务 3.3:启动共享网络的辅助容器 h3
任务 3.4:对比两个容器的网络
bash
# 1. 先创建基础容器test1-container(CentOS 7)
docker run -itd --name test1-container centos:7 /bin/bash
# 2. 查看test1-container的进程号(用于后续验证网络命名空间)
docker inspect -f '{{.State.Pid}}' test1-container # 输出示例:11117
# 3. 查看test1-container的网络命名空间(记录net对应的编号,如4026532575)
ls -l /proc/11117/ns
# 输出示例:
# lrwxrwxrwx 1 root root 0 1月 7 11:27 net -> net:[4026532504]

-i 保持标准输入(stdin)打开,支持交互(即使后台运行)
-t 为容器分配伪终端(tty),模拟命令行交互环境
-d 后台运行容器(守护态),容器启动后不会占用当前终端
bash
# 4. 创建test2-container,指定与test1-container共享网络
docker run -itd --name test2-container --net=container:test1-container centos:7 /bin/bash
# 5. 验证网络命名空间共享(test2-container的net编号与test1-container一致)
docker inspect -f '{{.State.Pid}}' test2-container # 输出示例:11402
ls -l /proc/11402/ns
# 输出示例:
# lrwxrwxrwx 1 root root 0 1月 7 12:27 net -> net:[4026532504]

验证要求
- 两个容器 IP 完全一致
- 网络命名空间相同
- 可通过
localhost通信
1️⃣ container 模式与 host 模式的区别?
container 模式是 "容器共享容器的网络",host 模式是 "容器共享宿主机的网络";前者隔离性介于 bridge 和 host 之间,后者完全无网络隔离。
2️⃣ 为什么称这种模式为 Sidecar(边车模式)?
场景四:自定义 bridge 网络------多容器系统与固定 IP
公司部署一个多服务系统:
Web + App + DB
需要:
- 容器间直连
- 可指定 IP
- 网络与其他项目隔离
任务 4.1:创建自定义网络 任务
4.2:在自定义网络中启动容器 h3
任务 4.3:容器间通信测试
bash
# 1. 创建自定义bridge网络(子网172.18.0.0/16,网卡名docker1)
docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork
# 参数说明:
# --subnet:指定网络子网;
# --opt "com.docker.network.bridge.name":指定宿主机上的网卡名(默认是br-xxx格式,不易记);
# mynetwork:自定义网络名称。
# 2. 启动容器时指定自定义网络和IP
docker run -itd --name test4 --net mynetwork --ip 172.18.0.10 centos:7 /bin/bash
# 3. 验证IP(进入容器查看)
docker exec -it test4 ip addr # 应显示172.18.0.10
docker inspect test4

bash
# 管理 Linux 桥接网络
brctl show
# 管理 Docker 容器网络
docker network ls

1.为什么默认 bridge 不能指定 IP?
默认 bridge 网络设计上不支持直接指定静态 IP,根源是其 IP 管理(IPAM)策略和功能定位的限制
设计定位:默认 bridge 追求 "极简易用",而非灵活配置
底层机制:默认 bridge 缺少 "静态 IP 分配" 的必要配置
2. 自定义网络适合什么场景?
自定义网络适合需静态 IP、容器名解析、多环境 / 业务隔离、适配企业网络策略的生产场景,是默认 bridge 网络的 "进阶版",也是 Docker 生产部署的主流选择
3.Docker 如何实现容器间二层通信?
总结本质是用 Linux 虚拟网桥模拟二层交换机,用 veth pair 模拟网线,将多个容器的网络命名空间接入同一网桥,从而实现与物理网络一致的二层通信(基于 MAC 地址转发);
常见错误提
docker run -it centos:7 bash 退出 bash → 容器会停(PID=1 结束) docker exec 只能进入运行中容器,先 docker start
docker rm只能删已停止容器(运行中要先 stop 或用-f`)
批量删除命令只允许实验环境,不要在生产机乱用