Docker 场景化作业:生产环境容器操作实训

作业背景(场景)

你是某公司运维/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:把宿主机文件复制到容器

要求:

  1. 在宿主机创建文件 ~/test.txt,内容为学号+姓名(例:2025xxx 张三

  2. 复制到容器 /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-01web-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/importsave/load 有什么区别?(写 3 句话以内)

  1. export/import 操作的是容器快照(不含历史层、元数据如 CMD/ENV);
  2. save/load 操作的是镜像(保留完整分层和元数据);
  3. 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:批量停止所有容器(两种方式任选其一)

任选提交一种:

  1. docker stop $(docker ps -q)

  2. docker ps -a | awk ... | xargs docker stop

提交证据:命令 + 执行后 docker ps

任务 6.3:删除所有容器

任选提交一种:

  1. docker rm -f $(docker ps -aq)

  2. docker ps -a | awk ... | xargs docker rm

提交证据:命令 + docker ps -a(结果为空)

任务 6.4:批量删除镜像(两种方式任选其一)

任选提交一种:

  1. 删除所有镜像:docker rmi -f $(docker images -q)

  2. 只删除 none 镜像:docker images | grep none | ...

提交证据:命令 + docker images(展示删除结果)

安全说明(必答): 为什么生产环境不建议直接执行"删除所有容器/镜像"?写出 2 点原因。

可能误删正在运行的关键业务容器,导致服务中断;

删除镜像可能导致无法快速回滚或重建服务,影响灾备能力。


三、网络部分

  • 下面是一套**"Docker 网络模式(除 none)场景化作业"** ,专门给学生做实验用,覆盖 *bridge / host / container / 自定义网络(bridge 派生)* 四种模式。 每个模式都给了真实生产场景背景 → 学生操作任务 → 验证点 → 思考题


    Docker 网络模式场景化作业

    实验说明

    • 实验环境:单台 Linux 主机(物理机/虚拟机均可)

    • 镜像建议:nginxcentos:7

    • 禁止使用 --network none

    • 每个场景必须执行命令并给出验证结果


    场景一:bridge 模式(默认模式)------Web 服务对外发布

    场景背景(生产化)

    公司在一台服务器上部署多个 Web 服务,需要:

    • 容器之间相互隔离

    • 对外通过端口映射提供服务

    这是最常见的生产 Docker 网络模式


    任务

    任务 1.1:使用 bridge 模式运行 nginx

    bash 复制代码
    docker run -d --name web-bridge -p 8080:80 nginx

    任务 1.2:查看容器 IP

    bash 复制代码
    docker inspect web-bridge 

    任务 1.3:访问服务

    验证要求

    • 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

  • 批量删除命令只允许实验环境,不要在生产机乱用

相关推荐
呼啦啦呼啦啦啦啦啦啦2 小时前
推送docker镜像至私有 Docker 镜像仓库(附企业harbor实战)
运维·docker·容器
m0_485614672 小时前
Docker基础
docker·容器·php
二等饼干~za8986682 小时前
碰一碰发视频系统源码开发搭建--技术分享
java·运维·服务器·重构·django·php·音视频
爱学大树锯2 小时前
【Docker本地化超级实践】Docker 镜像离线构建方案
运维·docker·容器
熙丫 133814823862 小时前
CISAW-RM风险管理认证培训|2026年度课程计划全面发布:筑牢安全防线
运维·安全
默恋~微凉2 小时前
Docker
运维·docker·容器
玥轩_5212 小时前
防火墙技术-综合应用实验
运维·网络·网络协议·网络安全·智能路由器·路由器·防火墙
Lynnxiaowen3 小时前
今天我们继续学习devops内容基于Jenkins构建CICD环境
linux·运维·学习·jenkins·devops
小尧嵌入式3 小时前
Linux网络介绍网络编程和数据库
linux·运维·服务器·网络·数据库·qt·php