01 云环境和 Docker 配置扩展
定位:对 03 docker云环境配置 的深入问答与原理补充,聚焦"为什么这么做",可作为 03 的配套精读
环境:华为云 Flexus · 2核2G · CentOS 7.9
日期:2026-10-18
一、yum 源深入
1.1 三个概念先分清(最易混淆)
| 概念 | 是什么 | 位置 |
|---|---|---|
| 源配置文件 | 告诉 yum 去哪个服务器下载 | 本地 /etc/yum.repos.d/*.repo |
| 镜像源(仓库) | 存放大量软件包(.rpm)的服务器 | 远程,如 mirrors.aliyun.com |
| 软件包 | 真正要安装的软件 | 远程服务器上,装的时候才下载 |
[!important] 关键认知
/etc/yum.repos.d/是源配置文件目录,不是镜像路径。.repo文件里写的是镜像服务器的地址(baseurl)。换源的本质 = 改这个地址。
1.2 yum 工作机制
flowchart LR
A["本地 .repo 文件<br/>(/etc/yum.repos.d/)"] -->|baseurl 指向| B["远程镜像站<br/>(阿里云/华为云)"]
B --> C["Packages/*.rpm"]
C -->|yum install 下载| D["本地安装"]
软件包从来不在本地,配置文件只是"地址簿"。
1.3 为什么 mkdir -p backup
- 把系统自带的旧
.repo移进backup子目录备份,不直接删除; - 新源出问题可从 backup 恢复;
mv *.repo backup/不会移动 backup 自身(它是目录、不以 .repo 结尾)。
1.4 -p 选项(理解要点)
-p 两个作用:
1. 递归创建父目录:mkdir -p a/b/c,父目录不存在会一层层全部建出来(普通 mkdir 会失败)——"前面路径不存在"恰恰是 -p 最有用的场景;
2. 已存在不报错:目标目录已存在也不报错,让命令可重复执行(幂等)。
这里 mkdir -p backup 主要用作用 2。
1.5 镜像源哪里找
| 镜像站 | 地址 |
|---|---|
| 阿里云 | mirrors.aliyun.com |
| 清华 TUNA | mirrors.tuna.tsinghua.edu.cn |
| 中科大 USTC | mirrors.ustc.edu.cn |
| 华为云 | mirrors.huaweicloud.com |
| 网易 | mirrors.163.com |
| 腾讯云 | mirrors.cloud.tencent.com |
- 搜索"CentOS 7 阿里云源",镜像站帮助页给命令;
- 阿里云 repo 文件有规律:
https://mirrors.aliyun.com/repo/Centos-7.repo。
1.6 EPEL 是什么
EPEL = Extra Packages for Enterprise Linux,Fedora 官方维护的第三方仓库,为 RHEL 系(CentOS/Rocky/Alma)补充官方源没有的软件。
- 为什么需要:官方源保守、包少,
htop、ncdu、部分 pip/nginx 等都不在官方源; - 特点:免费开源、包不与官方重复、不会冲突,是 RHEL 系最常用的第三方源;
- 获取:
- 阿里云:
https://mirrors.aliyun.com/repo/epel-7.repo - 官方:
https://docs.fedoraproject.org/en-US/epel/ - 或
yum install epel-release(自动配置 EPEL)。
二、iptables 深入
2.1 netfilter vs iptables
- netfilter:Linux 内核里的数据包过滤框架,真正干活的"防火墙本体";
- iptables:命令行工具,写规则给 netfilter 看。
2.2 作用与动作
| 动作 | 含义 |
|---|---|
| ACCEPT | 放行 |
| DROP | 静默丢弃(不回应,对方等到超时) |
| REJECT | 拒绝并回应(对方立刻知道) |
| DNAT/SNAT | 地址转换、端口转发 |
2.3 表与链
- filter 表(默认,过滤):
- INPUT:访问本机(项目用这条)
- OUTPUT:本机发出
- FORWARD:经本机转发(Docker 网桥流量)
- nat 表:PREROUTING、POSTROUTING,做地址转换。
2.4 数据包流转
flowchart TD
A[数据包进入网卡] --> B[PREROUTING 改目的地址]
B --> C{给本机?}
C -->|是| D[INPUT 链]
D --> E[本地进程]
E --> F[OUTPUT 链]
C -->|否, 转发| G[FORWARD 链]
F --> H[POSTROUTING 改源地址 → 出去]
G --> H
2.5 规则匹配逻辑
- 规则从上到下逐条匹配,命中即执行动作并停止;
- 全都不匹配才走链末尾的默认策略(policy);
- 所以规则顺序极其重要。
2.6 常用命令
iptables -L -n # 查看(-n 数字显示)
iptables -I INPUT -p tcp --dport 80 -j ACCEPT # 插入到开头
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 追加到末尾
iptables -D INPUT -p tcp --dport 80 -j ACCEPT # 删除
iptables -F INPUT # 清空链
iptables -P INPUT DROP # 默认策略
service iptables save # 持久化(否则重启丢失)
| 参数 | 含义 |
|---|---|
| -p tcp | 协议 |
| --dport 80 | 目标端口 |
| -j ACCEPT | 动作 |
[!warning] 重点经验:为什么用 -I 不用 -A
你的 INPUT 链末尾有兜底拒绝REJECT all reject-with icmp-host-prohibited。
用-A追加,规则排在 REJECT 后面永远匹配不到;用-I插到最前面,才能在兜底之前命中。
标准白名单思路:放行规则插前面,末尾 DROP/REJECT 兜底。
2.7 与 Docker 的关系
- Docker 启动后自动往 iptables 加规则(DOCKER 链、NAT 映射、FORWARD);
- 容器端口映射、容器上网本质都是 iptables 规则;
- firewalld 重启会清空重建 iptables,冲掉 Docker 规则——这就是 firewalld 与 Docker 冲突的根因。
三、Docker CE 深入
3.1 CE 与组件
- CE = Community Edition 社区版(免费开源),对应收费的 EE 企业版。
| 组件 | 作用 |
|---|---|
| docker-ce | 守护进程 dockerd(服务端) |
| docker-ce-cli | 命令行客户端 |
| containerd.io | 底层容器运行时 |
工作方式:docker 客户端 → dockerd 守护进程 → containerd 干活。
3.2 三个核心概念
| 概念 | 类比 | 说明 |
|---|---|---|
| 镜像 Image | 类 / 光盘 | 只读模板,含应用和环境 |
| 容器 Container | 实例 | 镜像跑起来的实例 |
| 仓库 Registry | 应用商店 | 存放镜像,如 Docker Hub、SWR |
一个镜像可启动多个容器。
3.3 容器 vs 虚拟机(面试高频)
| 对比 | 虚拟机 | 容器 |
|---|---|---|
| 系统 | 每个有独立 Guest OS | 共享宿主内核,无独立系统 |
| 体积 | GB 级 | MB 级 |
| 启动 | 分钟级 | 秒级 |
| 密度 | 低 | 高 |
3.4 常用命令
# 镜像
docker pull nginx
docker images
docker rmi nginx
# 容器生命周期
docker run -d --name web -p 8080:80 nginx
docker ps # 加 -a 看全部
docker logs web # 加 -f 实时
docker stop/start/restart web
docker exec -it web bash # 进入容器
docker rm web
3.5 docker run 参数
| 参数 | 作用 |
|---|---|
| -d | 后台运行 |
| -p 主机:容器 | 端口映射 |
| -v 主机:容器 | 数据卷(持久化) |
| --name | 容器名 |
| -e 变量=值 | 环境变量 |
| --restart | 重启策略(如 unless-stopped) |
| -it | 交互+终端 |
| --rm | 退出即删 |
3.6 为什么要数据卷
容器删除后内部数据全丢。-v ./data:/data 把容器数据映射到宿主机,容器重建不丢。
四、厘清"多个源"(最容易搞混)
4.1 两个阿里云源的区别
| Docker yum 源 | Docker 镜像加速器 | |
|---|---|---|
| 给谁用 | yum | Docker 守护进程 |
| 配在哪 | /etc/yum.repos.d/docker-ce.repo | /etc/docker/daemon.json |
| 什么时候 | 装 Docker 时 | 装完后拉镜像时 |
| 下载什么 | Docker 本体(RPM) | 容器镜像(nginx 等) |
- yum 源 = 装 Docker 的渠道;
- 镜像加速器 = Docker 用起来后下载应用的渠道。
4.2 系统里实际有三个层次的源
- 阿里云 yum 基础源(CentOS-Base.repo):系统软件 vim/wget;
- 阿里云 Docker yum 源(docker-ce.repo):Docker 本体;
- Docker 镜像加速器(daemon.json):拉容器镜像。
1、2 是 yum 源(给 yum 用),3 是 Docker 专属。
五、源选型原则(核心方法论)
[!important] 原则:用哪家云,就优先用哪家云的源——判断标准是"能不能走内网"
| 路径 | 链路 | 速度 | 占公网带宽 |
|---|---|---|---|
| 华为云服务器 → 华为云 SWR/镜像站 | 内网 | 460M | 否 |
| 华为云服务器 → 阿里云/京东云/清华 | 跨厂商公网 | 受 2M 限制 | 是 |
[!warning] 易错事实
解决加速器问题的是华为云 SWR 专属加速器(速度 2M→460M),不是京东云。
京东云在京东云机房,华为云服务器访问它只能走公网,没有内网优势。
选型决策
flowchart TD
A[在华为云服务器上选源] --> B{华为云自己提供?}
B -->|是| C["用华为云(内网)<br/>SWR/华为云yum/NTP"]
B -->|否| D["选稳定公网镜像<br/>阿里云/清华/中科大"]
为什么 Docker 加速器非换不可,yum 源不急
| 大小 | 频率 | 2M 带宽体感 | |
|---|---|---|---|
| Docker 镜像 | 几百 MB | 每次部署 | 慢到超时,必须换 |
| yum 包 | 几 MB~几十 MB | 初始化一次 | 能接受,可优化 |
验证内网的方法
- 下载测速对比:
curl -o /dev/null -w "%{speed_download}" <url>; - 观察华为云云监控的公网带宽:走内网时公网带宽几乎不动;
- 最优 yum 源可考虑换
mirrors.huaweicloud.com(华为云 ECS 通常走内网/优化链路)。
六、一句话总结
.repo是本地地址簿,镜像源是远程仓库,EPEL 补全官方缺的软件;iptables 是配置 netfilter 的工具、规则按表链组织、白名单用 -I 插前面末尾 DROP;Docker CE 把应用打包成共享内核的轻量容器,靠 -p/-v/-e 运行;记住"用哪家云就优先用哪家云的源走内网",yum 源装 Docker、镜像加速器帮 Docker 拉镜像。
评论