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

背景(场景)

你是某公司运维/DevOps 实习生。现在需要在一台 Linux 服务器上完成Web 服务上线、巡检、排障、数据传递、迁移备份、下线清理等生产常见流程。要求你使用 Docker 完成对应操作并提交证据。

统一要求:实验过程全程使用命令行完成(浏览器验证可作为补充截图)。


一、目标

要求

  1. 容器操作:创建 / 启动 / 停止 / 查看
  2. docker run 创建+启动合并,并且后台持续运行
  3. 容器交互:docker exec -it
  4. 文件复制:docker cp(主机→容器、容器→主机)
  5. 容器迁移:docker export / docker import
  6. 下线清理:删除容器、批量停止、删除所有容器、批量删除镜像
  7. (加分)网络:bridge/host/container/none、自定义网络、端口映射
  • 容器操作:创建 / 启动 / 停止 / 查看
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 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 容器执行命令

要求进入容器执行:

  • 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 句话以内)

答:export 导出容器快照(不含历史层和元数据),生成新镜像时丢失构建信息;save 导出完整镜像(含所有层和标签),可完全还原。


场景 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 点原因。

答:1. 生产环境直接删除所有容器会中断正在提供服务的应用,导致业务不可用;2.误删关键镜像会破坏部署一致性,增加恢复难度和故障风险。


三、网络部分

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

Docker 网络模式场景化

实验说明

  • 实验环境:单台 Linux 主机(物理机/虚拟机均可)
  • 镜像建议:nginxcentos:7
  • 禁止使用 --network none
  • 每个场景必须执行命令并给出验证结果

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

场景背景(生产化)

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

  • 容器之间相互隔离
  • 对外通过端口映射提供服务

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


任务

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

在这里插入图片描述

任务 1.2:查看容器 IP

在这里插入图片描述

任务 1.3:访问服务

  • 浏览器访问:http://宿主机IP:8080
  • 或命令:
    在这里插入图片描述

验证要求

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

思考题(必答)

1️⃣ 为什么外部不能直接访问容器 IP?

容器网络相当于一个局域网,和外部网络没有路由,实际上是通过iptables进行NAT端口转发实现的通信。

2️⃣ bridge 模式下端口映射的作用是什么?

将容器虚拟网卡的端口映射到宿主机真实物理网卡上的端口,让外部网络可以访问到容器里搭建的服务。


场景二:host 模式——高性能服务部署

场景背景(生产化)

公司部署一个高性能 Web 服务/监控服务

  • 对网络性能敏感
  • 不希望端口映射带来额外开销

因此直接让容器使用宿主机网络。


任务

任务 2.1:使用 host 网络模式启动 nginx

任务 2.2:查看网络信息在这里插入图片描述


验证要求

  • 访问方式:http://宿主机IP:80
  • 不需要 -p 参数
  • 容器内看到的 IP 信息与宿主机一致
    在这里插入图片描述
    在这里插入图片描述

思考题(必答)

1️⃣ host 模式下,容器有没有独立 IP?

没有,使用的宿主机的ip进行通信

2️⃣ host 模式适合什么类型的应用?

对网络性能要求高的应用

3️⃣ host 模式的安全风险是什么?

将业务网络暴露在外网当中,容易被攻击。


场景三:container 模式——紧密耦合服务(Sidecar)

场景背景(生产化)

某系统由两个组件组成:

  • 主服务(Service)
  • 辅助服务(日志/监控/代理)

要求:

  • 两个容器共享网络
  • 使用 localhost 通信

任务

任务 3.1:启动主容器

任务 3.2:查看主容器网络命名空间

任务 3.3:启动共享网络的辅助容器

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


验证要求

  • 两个容器 IP 完全一致
  • 网络命名空间相同
  • 可通过 localhost 通信
    在这里插入图片描述

思考题(必答)

1️⃣ container 模式与 host 模式的区别?

container模式容器之间共享的是虚拟网卡,host共享的是宿主机的物理网卡。
2️⃣ 为什么称这种模式为 Sidecar(边车模式)?


场景四:自定义 bridge 网络——多容器系统与固定 IP

场景背景(生产化)

公司部署一个多服务系统:

  • Web + App + DB
  • 需要:
    • 容器间直连
    • 可指定 IP
    • 网络与其他项目隔离
      在这里插入图片描述

任务

任务 4.1:创建自定义网络

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

任务 4.3:容器间通信测试


验证要求

  • 自定义网络出现在 docker network ls
  • 容器 IP 为指定值
  • 容器间可直接通信
    在这里插入图片描述

思考题(必答)

1️⃣ 为什么默认 bridge 不能指定 IP?

一个无管理的、自动化的网络驱动,其 IP 分配完全由 Docker 守护进程的 IPAM(IP Address Management)子模块控制,没有暴露给用户静态 IP 的配置接口。
必须使用自定义的 bridge 网络才能指定固定IP

2️⃣ 自定义网络适合什么场景?

容器内的服务已经配置好固定IP的复杂多容器网络场景。

3️⃣ Docker 如何实现容器间二层通信?

容器2

容器1

宿主机

端口映射
iptables

虚拟网桥 docker0
IP: 172.17.0.1

veth pair

veth pair

eth0
IP: 172.17.0.2

eth0
IP: 172.17.0.3

外部网络


四、常见错误提醒

  • docker run -it centos:7 bash 退出 bash → 容器会停(PID=1 结束)
  • docker exec 只能进入运行中容器,先 docker start
  • docker rm 只能删已停止容器(运行中要先 stop 或用 -f
  • 批量删除命令只允许实验环境,不要在生产机乱用

更多推荐