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

文章目录

  • 背景(场景)
  • 一、目标
  • 二、操作清单(按场景完成)
    • [场景 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:进入 容器执行命令](#操作 3.1:进入 容器执行命令)
    • [场景 4:文件复制(主机↔容器)](#场景 4:文件复制(主机↔容器))
      • [操作 4.1:把宿主机文件复制到容器](#操作 4.1:把宿主机文件复制到容器)
      • [操作 4.2:从容器复制回宿主机](#操作 4.2:从容器复制回宿主机)
    • [场景 5:容器迁移(导出与导入)](#场景 5:容器迁移(导出与导入))
      • [操作 5.1:导出容器为 tar 包](#操作 5.1:导出容器为 tar 包)
      • [操作 5.2:导入 tar 包生成新镜像](#操作 5.2:导入 tar 包生成新镜像)
    • [场景 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.2:查看容器 IP](#操作 1.2:查看容器 IP)
      • [操作 1.3:访问服务](#操作 1.3:访问服务)
    • 验证要求
    • 思考题
    • [场景二:host 模式------高性能服务部署](#场景二:host 模式——高性能服务部署)
    • 场景背景(生产化)
    • 操作任务
      • [操作 2.1:使用 host 网络模式启动 nginx](#操作 2.1:使用 host 网络模式启动 nginx)
      • [操作 2.2:查看网络信息](#操作 2.2:查看网络信息)
    • 验证要求
    • 思考题
  • [Docker host 网络模式 3 问 3 答](#Docker host 网络模式 3 问 3 答)
    • [场景三:container 模式------紧密耦合服务(Sidecar)](#场景三:container 模式——紧密耦合服务(Sidecar))
    • 场景背景(生产化)
    • 操作任务
      • [操作 3.1:启动主容器](#操作 3.1:启动主容器)
      • [操作 3.2:查看主容器网络命名空间](#操作 3.2:查看主容器网络命名空间)
      • [操作 3.3:启动共享网络的辅助容器](#操作 3.3:启动共享网络的辅助容器)
      • [操作 3.4:对比两个容器的网络](#操作 3.4:对比两个容器的网络)
    • 验证要求
    • 思考题
    • [场景四:自定义 bridge 网络------多容器系统与固定 IP](#场景四:自定义 bridge 网络——多容器系统与固定 IP)
    • 场景背景(生产化)
    • 操作任务
      • [操作 4.1:创建自定义网络](#操作 4.1:创建自定义网络)
      • [操作 4.2:在自定义网络中启动容器](#操作 4.2:在自定义网络中启动容器)
      • [操作 4.3:容器间通信测试](#操作 4.3:容器间通信测试)
    • 验证要求
    • 思考题
  • 四、常见错误提醒

背景(场景)

作为某公司运维/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 输出)

场景 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:进入 容器执行命令

需进入容器执行:

  • ls
  • cat /etc/os-release(若镜像无该文件,可换 uname -a

相关证据:

  • docker exec -it /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 句话以内)


场景 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

操作 1.2:查看容器 IP

操作 1.3:访问服务

  • 浏览器访问:http://宿主机IP:8080
  • 或使用命令

验证要求

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

思考题

1️⃣ 为什么外部不能直接访问容器 IP?
容器 IP 是私有内网 IP :默认bridge模式下,容器 IP 属于172.17.0.0/16私有网段,仅宿主机内部可识别,外部设备无法路由到该地址。
Docker 网桥隔离机制 :docker0网桥默认隔离容器网络与宿主机外网,拦截外部对容器私有 IP 的直接访问请求。
缺少端口映射通道 :容器内服务端口未暴露到宿主机,外部没有可访问的 "入口",需通过-p 宿主机端口:容器端口建立转发规则。

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

通过宿主机端口转发请求到容器内端口,打通外部访问容器服务的通道


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

场景背景(生产化)

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

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

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


操作任务

操作 2.1:使用 host 网络模式启动 nginx

操作 2.2:查看网络信息


验证要求

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

思考题

Docker host 网络模式 3 问 3 答

  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 模式的区别?

2️⃣ 为什么称这种模式为 Sidecar(边车模式)?


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

场景背景(生产化)

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

  • Web + App + DB
  • 需要:
    • 容器间直连
    • 可指定 IP
    • 网络与其他项目隔离

操作任务

操作 4.1:创建自定义网络

操作 4.2:在自定义网络中启动容器

操作 4.3:容器间通信测试


验证要求

  • 自定义网络出现在 docker network ls
  • 容器 IP 为指定值
  • 容器间可直接通信

思考题

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

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

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


四、常见错误提醒

  • docker run -it centos:7 bash 退出 bash → 容器会停(PID=1 结束)
  • docker exec 只能进入运行中 容器,需先 docker start
  • docker rm 只能删已停止容器(运行中要先 stop 或用 -f
  • 批量删除命令只允许实验环境,不要在生产机乱用
相关推荐
你好,帅哥11 分钟前
openssl ,msys2 ,交叉编译
linux·运维·服务器
计算机安禾21 分钟前
【Linux从入门到精通】第36篇:DNS服务探秘——自己搭建一个内网DNS
linux·运维·servlet
Web极客码1 小时前
2026年Linux VPS安全加固清单:SSH、防火墙与审计就绪配置
运维·服务器·数据库
星恒讯工业路由器2 小时前
配网自动化多网融合应用解决方案
运维·自动化
智慧物业老杨2 小时前
智慧物业收费系统的数智化落地实践:从人工硬扛到自动化闭环
运维·自动化
techdashen2 小时前
Cloudflare 为何抛弃 NGINX,用 Rust 自研了一个代理
运维·nginx·rust
南城猿2 小时前
保姆级 Ubuntu 部署 禅道
linux·运维·ubuntu
珠海西格电力3 小时前
零碳园区产业园管理系统的全场景源网荷储氢协同调度功能是如何实现的
大数据·运维·人工智能·物联网·能源
木雷坞3 小时前
K8s GPU 推理服务 ImagePullBackOff 排查与预热
云原生·容器·kubernetes·gpu算力
wj3055853783 小时前
CC-Switch 在 WSL Ubuntu 中安装记录
linux·运维·ubuntu