文章目录
- Docker场景化作业实验报告模板
-
- 一、实验基本信息
- 二、必做任务实验报告(场景1-6)
-
- 场景1:上线发布(后台启动nginx容器)
- 场景2:基础操作(创建/启动/停止/查看)
- 场景3:排障进入容器(容器交互)
- 场景4:文件复制(主机↔容器)
- 场景5:容器迁移(导出与导入)
-
- 任务5.1:导出容器
- 任务5.2:导入镜像
- [5.3`export/import` 和 `save/load` 的区别](#5.3
export/import和save/load的区别)
- 场景6:下线与清理(删除与批量删除)
- 三、加分任务:网络模式实验报告
Docker场景化作业实验报告模板
一、实验基本信息
| 项目 | 内容 |
|---|---|
| 实验名称 | Docker生产环境容器操作实训 |
| 实验环境 | 64位Linux系统(CentOS 7)、Docker-CE ≥19.03 |
二、必做任务实验报告(场景1-6)
场景1:上线发布(后台启动nginx容器)
实验步骤
-
拉取nginx镜像:
docker pull nginx

-
创建并启动容器:
docker run -d --name web-prod-01 -p 43000:80 nginx
提交证据
docker ps输出截图:

- 浏览器访问验证截图:

场景2:基础操作(创建/启动/停止/查看)
任务2.1:创建容器
- 执行命令:
docker create -it nginx:latest /bin/bash - 提交证据:
docker ps -a输出截图(状态为Created)

任务2.2:启动容器
- 执行命令:
docker start 容器ID/名称 - 提交证据:
docker ps -a输出截图及状态说明
bash
## 容器状态显示为Up表示该容器正在运行中
##
Up 5 seconds:持续运行了 5 秒钟
Up 8 minutes:持续运行了 8 分钟
任务2.3:停止容器
- 执行命令:
docker stop 容器ID/名称 - 提交证据:
docker ps -a输出截图

场景3:排障进入容器(容器交互)
实验步骤
- 进入容器:
docker exec -it web-prod-01 /bin/bash - 执行命令:
ls、cat /etc/os-release(或uname -a) - 退出容器:
exit - 验证容器状态:
docker ps
提交证据
-
容器交互过程截图(含进入命令、执行命令及输出):

-
退出后容器运行状态截图(
docker ps输出):

场景4:文件复制(主机↔容器)
任务4.1:宿主机→容器
- 宿主机创建文件:
echo "学号+姓名" > ~/test.txt - 执行复制命令:
docker cp ~/test.txt web-prod-01:/opt/ - 提交证据:
-
cat ~/test.txt

-
容器内验证命令
docker exec web-prod-01 cat /opt/test.txt

-
任务4.2:容器→宿主机
- 执行复制命令:
docker cp web-prod-01:/opt/test.txt ~/abc123.txt - 提交证据:
cat ~/abc123.txt

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

任务5.2:导入镜像
bash
- 执行命令:`cat web-prod-01.tar | docker import - web-import:test`
// 列出本地所有的 Docker 镜像,过滤出名称包含web-import的镜像
- 提交证据:`docker images | grep web-import`

5.3export/import 和 save/load 的区别
答:
bash
核心
1.export/import针对容器
2.save/load针对镜像
3.save/load保留镜像的完整元数据
4.export/import仅保留容器文件系统,元数据丢失。
场景6:下线与清理(删除与批量删除)
任务6.1:删除指定容器
- 执行命令:
docker stop web-prod-01、docker rm web-prod-01 - 提交证据:
docker ps -a | grep web-prod-01

任务6.2:批量停止所有容器
-
选择方式:方式1(
docker stop $(docker ps -q)) -
方式2(
docker ps -a | awk 'NR>=2{print $1}' | xargs docker stop) -
提交证据:
docker ps输出截图、

任务6.3:删除所有容器
-
选择方式:方式1(
docker rm -f $(docker ps -aq)) -
方式2(
docker ps -a | awk 'NR>=2{print $1}' | xargs docker rm) -
提交证据:
docker ps -a输出截图(结果为空)

任务6.4:批量删除镜像
-
选择方式:方式1(删除所有:
docker rmi -f $(docker images -q)) -
方式2(删除none镜像:
docker images | grep none | awk '{print $3}' | xargs docker rmi) -
提交证据:
docker images输出截图

6.5:生产环境不建议直接执行"删除所有容器/镜像"的原因:
bash
是因为会立刻中断正在运行的业务、丢失容器内未持久化的数据,造成损失,同时删掉的镜像 如果没备份难以尽快速恢复,还可能打断关联服务的依赖链,引发连锁故障。
三、加分任务:网络模式实验报告
场景1:bridge模式(默认模式)
实验步骤
bash
1. 运行容器:`docker run -d --name nginx-bridge -p 8080:80 nginx`
// 启动一个名为 nginx-bridge 的 Nginx 容器,将主机 8080 端口映射到容器 80 端口
2. 查看容器IP:`docker inspect -f '{{.NetworkSettings.Networks.bridge.IPAddress}}' nginx-bridge`
3. 访问验证:浏览器访问`http://192.168.10.18:8080`




思考题(必答)
- 为什么外部不能直接访问容器IP?
:因为容器 IP 是 "内部私有地址",不具备跨网络路由能力 - bridge模式下端口映射的作用是什么?
:防止端口占用,实现外部网络访问容器
:端口映射将 "容器内部端口" 绑定到 "宿主机的公网 / 局域网 IP 端口",使外部设备可通过宿主机 IP: 映射端口间接访问容器服务。
场景2:host模式(高性能服务)
实验步骤
-
运行容器:
docker run -d --name nginx-host --network host nginx

-
查看网络信息:
docker exec nginx-host ifconfig(或ip addr)

-
访问验证:浏览器访问
http://宿主机IP:80

思考题(必答)
-
host模式下,容器有没有独立IP?
:没有,因为host模式会让容器直接共享主机的网络命名空间,没有独立的ip、端口、网卡等,是直接使用宿主机的IP和端口
-
host模式适合什么类型的应用?
:高吞吐网络服务;监控宿主机;极简轻量化应用:无需独立网络配置,快速部署。
-
host模式的安全风险是什么?
:容器时用宿主机的IP和端口 及所有网络资源,一旦被入侵,可能导致宿主机被攻击;
:没做端口映射 端口被占用
:获取主机信息,泄露主机网络环境
场景3:container模式(Sidecar)
实验步骤
- 启动主容器:
docker run -itd --name main-container centos:7 /bin/bash - 查看主容器PID:
docker inspect -f '{``{.State.Pid}}' main-container - 查看主容器网络命名空间:
ls -l /proc/主容器PID/ns/net - 启动辅助容器:
docker run -itd --name sidecar --net=container:main-container centos:7 /bin/bash - 查看辅助容器网络命名空间:
ls -l /proc/辅助容器PID/ns/net - 通信测试:
docker exec sidecar ping localhost

思考题(必答)
- container模式与host模式的区别?
bash
container:指定容器的网络命名空间,与目标容器处于同一网络环境。容器通过虚拟网桥与宿主机和其他容器通信。
host:直接共享宿主机的网络命名空间,完全绕过容器的网络隔离机制。容器共享宿主机的网络栈,直接使用宿主机的 IP 地址
- 为什么称这种模式为Sidecar(边车模式)?
:辅助容器(Sidecar)与主容器共享网络、存储等资源;辅助容器负责辅助功能(如日志收集、服务代理、监控),主容器负责核心业务。
场景4:自定义bridge网络(固定IP)
实验步骤
-
创建自定义网络:
docker network create --subnet=172.18.0.0/16 mynetwork

-
启动容器并指定IP:
docker run -itd --name app-1 --net mynetwork --ip 172.18.0.10 centos:7 /bin/bashdocker run -itd --name app-2 --net mynetwork --ip 172.18.0.11 centos:7 /bin/bash

-
容器间通信测试:
docker exec app-1 ping 172.18.0.11

思考题(必答)
-
为什么默认bridge不能指定IP?
1、避免IP冲突
2、自动分配降低用户操作成本
-
自定义网络适合什么场景?
1、需要为容器分配固定IP以保证服务地址稳定的环境
2、隔离其他网络的容器,安全度需求高的场景
3、多容器集群
-
Docker如何实现容器间二层通信?
1、Docker 通过网络命名空间 + 虚拟网桥 + Veth
2、实现容器间的二层(数据链路层)通信
网络命名空间隔离:每个容器有独立的网络命名空间,包含独立的网卡、IP、路由等;
3、Veth 对连接容器与网桥:为每个容器创建一对虚拟网卡(Veth Pair),一端在容器的网络命名空间内(作为容器网卡),另一端连接到 Docker 网桥(如默认的docker0);
4、网桥转发二层流量:Docker 网桥作为二层设备,接收 Veth 对转发的容器流量,通过 MAC 地址表学习容器的 MAC 地址,实现同一网桥下容器间的二层帧转发。