文章目录


背景(场景)

作为某公司运维/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
  • 批量删除命令只允许实验环境,不要在生产机乱用
Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐