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
  • 批量删除命令只允许实验环境,不要在生产机乱用
相关推荐
翼龙云_cloud2 小时前
阿里云GPU卡顿、掉线如何处理?
运维·服务器·阿里云·云计算
山川而川-R2 小时前
在香橙派5pro上的ubuntu22.04系统烧录镜像
linux·运维·服务器
学习3人组2 小时前
自动拨号和录音的App解决方案
运维
2501_939909052 小时前
Docker实训练习
运维·docker·容器
EasyCVR2 小时前
视频汇聚平台EasyCVR筑牢消防领域可视化监控防线
运维·人工智能·音视频
爱宇阳2 小时前
在 Docker 环境中为 GitLab 实例配置邮件服务器
java·docker·gitlab
企鹅侠客2 小时前
探索Kubernetes的ServiceAccounts
云原生·容器·kubernetes
Hello.Reader3 小时前
Flink Materialized Table 完整部署与运维指南:架构、SQL Gateway、Catalog Store、调度刷新一站式落地
运维·架构·flink
Ancelin安心3 小时前
关于代理的一些网络知识复盘
linux·运维·网络·计算机网络·web安全·ubuntu·网络安全