03 Docker 云环境配置
定位:从裸机到能跑 Docker 容器的完整初始化流程
环境:华为云 Flexus L 实例 · 2核2G · CentOS 7.9 · 公网 IP ipv4
日期:2026-10-18
一、整体目标
| 维度 | 说明 |
|---|---|
| What | 把新买的云服务器从裸机初始化为 Docker 运行环境 |
| Why | 后面所有服务(博客/密码管理/监控)都跑在 Docker 容器里,这一步是地基 |
| Where | 华为云 ECS,系统 CentOS 7.9,操作目录 /etc/yum.repos.d/、/etc/docker/ |
| How | 换源 → 防火墙 → SELinux → 装 Docker → 配加速 → Compose |
二、换阿里云 yum 源
为什么要换源
CentOS 7 已于 2024 年 6 月 30 日停止维护(EOL),官方源 mirror.centos.org 已失效,不换源的话 yum install 会报 404。
操作步骤
cd /etc/yum.repos.d/
mkdir -p backup
mv *.repo backup/
# 下载阿里云源 + EPEL 扩展源
curl -o CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
# 重建缓存
yum clean all && yum makecache
验证
yum repolist
# 应显示 base / epel / extras / updates,共约 30000+ 个包
安装基础工具
yum install -y vim wget curl net-tools lsof bash-completion
三、防火墙:firewalld → iptables
为什么不用 firewalld
Docker 和 firewalld 在 CentOS 7 上有兼容性问题:firewalld 会接管 iptables 规则,干扰 Docker 的容器网络(bridge、端口映射),导致容器网络异常。iptables 更底层、更稳定。
操作步骤
# 关闭并禁用 firewalld
systemctl stop firewalld
systemctl disable firewalld
# 安装并启动 iptables
yum install -y iptables-services
systemctl start iptables
systemctl enable iptables
# 放行关键端口
iptables -I INPUT -p tcp --dport 22 -j ACCEPT # SSH
iptables -I INPUT -p tcp --dport 80 -j ACCEPT # HTTP
iptables -I INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
# 持久化(否则重启丢失)
service iptables save
验证
iptables -L -n | head -10
[!note]
华为云的安全组已经在云平台层面做了一层端口过滤,服务器内部的 iptables 是第二层防护。学习环境保持默认即可,生产环境建议精细化配置。
四、关闭 SELinux
为什么要关
SELinux(Security-Enhanced Linux)是 CentOS 的强制访问控制(MAC)机制,安全但配置复杂。它会阻止 Docker 容器读写挂载的宿主机目录,报 permission denied。学习环境先关闭减少排障成本。
操作步骤
# 临时关闭(立即生效,重启后恢复)
setenforce 0
# 永久关闭(重启后生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
验证
getenforce
# 应显示 Permissive(临时关闭)或 Disabled(永久关闭)
[!tip] 面试加分
可以补一句:"生产环境不建议直接关闭 SELinux,应该通过chcon或semanage配置正确的安全上下文,或者给 Docker 挂载目录加:z标签。"——显得你知道权衡,不是只会一刀切。
五、安装 Docker CE
为什么用指定版本 24.0.9
Docker 官方从 2024 年起不再支持 CentOS 7,最新版装不上。24.0.9 是最后一个支持 CentOS 7 的版本。
操作步骤
# 1. 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 2. 添加阿里云 Docker CE 源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 3. 安装指定版本
yum install -y docker-ce-24.0.9 docker-ce-cli-24.0.9 containerd.io
# 4. 启动 + 开机自启
systemctl start docker
systemctl enable docker
六、配置镜像加速 + 日志轮转
为什么要配
- 镜像加速:国内直连 Docker Hub 很慢甚至超时,必须用国内镜像站
- 日志轮转:Docker 容器默认日志无大小限制,跑久了会把磁盘写满
第一次配置(公开加速地址,后来失败)
最开始配置了 DaoCloud 和 dockerproxy 两个公开加速地址:
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
EOF
systemctl daemon-reload
systemctl restart docker
部署服务时拉取镜像报错
后来部署第一个服务(NPM)时,拉取镜像超时:
Get "https://registry-1.docker.io/v2/": net/http: request canceled
while waiting for connection (Client.Timeout exceeded while awaiting headers)
根因:配置的公开加速地址(daocloud、dockerproxy)在华为云网络环境下不可用,无法代理到 Docker Hub,请求最终还是走到了官方地址 registry-1.docker.io 然后超时。
尝试过的其他公开加速地址(效果都不稳定):
- https://docker.1panel.live
- https://hub.rat.dev
- https://docker.anyhub.us.kg
- https://dockerhub.icu
最终方案:华为云 SWR 专属镜像加速器
关键思路:用哪家云的服务器,就优先用哪家云的镜像服务。华为云服务器访问华为云 SWR 走内网,不占用公网带宽,机房直连,速度最快最稳。
获取地址:
1. 登录华为云控制台 → 容器镜像服务 SWR → 镜像加速器
2. 复制专属地址(每个账号一个):
https://38b2244086554648b2278911c98a11fd.mirror.swr.myhuaweicloud.com
最终配置(华为云加速器放第一位,公开地址作为备选):
cat > /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": [
"https://38b2244086554648b2278911c98b2278911c98a11fd.mirror.swr.myhuaweicloud.com",
"https://docker.m.daocloud.io",
"https://docker.1panel.live"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
EOF
systemctl daemon-reload
systemctl restart docker
效果:拉取速度从原来的 2M 飙到 460M,走内网完全起飞。
配置说明
| 配置项 | 作用 |
|---|---|
registry-mirrors |
镜像加速地址,按顺序尝试 |
log-driver: json-file |
日志格式(默认) |
max-size: 10m |
单个日志文件最大 10MB |
max-file: 3 |
最多保留 3 个日志文件,轮转覆盖 |
[!tip] 经验
1. 云服务器优先用同厂商的镜像服务,内网最快
2. 公开加速地址容易失效,只能做备选
3. 拉取到一半中断没关系,已下载的镜像层会缓存,重新拉取断点续传
验证
docker --version
# Docker version 24.0.9
docker info | grep -A5 "Registry Mirrors"
# 确认华为云加速器在列
docker run --rm hello-world
# 看到 "Hello from Docker!" 即成功
七、Docker Compose
为什么用 Compose
后面要同时跑 5+ 个容器,手动 docker run 太麻烦。Compose 用一个 YAML 文件定义所有服务(镜像、端口、数据卷、依赖关系),一条命令启动全部。
安装方式
Docker 24.0.9 已内置 Compose v2 插件,无需单独安装:
docker compose version
# Docker Compose version v2.27.1
使用方式:docker compose up -d(无横杠)
兼容旧写法
为了兼容网上教程的 docker-compose(有横杠)写法,做软链接:
ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin/docker-compose
docker-compose --version
[!warning] 踩坑记录
尝试通过curl从 GitHub 下载 docker-compose 二进制失败(加速地址ghfast.top不可用),最终发现 Docker 已内置 Compose 插件,无需单独下载。优先检查内置插件,不要重复造轮子。
八、验证清单
初始化完成后,逐项确认:
# 1. 系统版本
cat /etc/redhat-release
# CentOS Linux release 7.9.2009 (Core)
# 2. yum 源
yum repolist | tail -1
# repolist: 30562
# 3. 防火墙
iptables -L -n | grep -E 'dpt:(22|80|443)'
# 4. SELinux
getenforce
# Permissive
# 5. Docker
docker --version && docker run --rm hello-world
# 6. Compose
docker compose version
全部通过 = 环境就绪,可以开始部署应用服务。
九、踩坑记录
| 问题 | 原因 | 解决 |
|---|---|---|
yum install 报 404 |
CentOS 7 官方源已 EOL | 换阿里云源 |
| Docker 最新版装不上 | Docker 官方已停止支持 CentOS 7 | 指定安装 24.0.9 |
| docker-compose 下载失败 | GitHub 加速地址 ghfast.top 不可用 | 用 Docker 内置的 Compose 插件 |
| 镜像拉取超时 request canceled | 公开加速地址不可用,回退到官方源 | 换华为云 SWR 内网加速器 |
| 容器挂载目录 permission denied | SELinux 阻止 | setenforce 0 或挂载加 :z |
| 容器日志把磁盘写满 | 默认无日志大小限制 | daemon.json 配 max-size/max-file |
十、面试话术
"我在华为云 CentOS 7.9 服务器上完成了 Docker 运行环境的初始化:针对 CentOS 7 EOL 后官方源失效的问题,替换为阿里云镜像源并引入 EPEL 扩展源;考虑到 Docker 与 firewalld 的网络兼容性,切换为 iptables 管理防火墙并配置了 22/80/443 端口规则;安装 Docker CE 24.0.9(最后一个支持 CentOS 7 的版本),通过 daemon.json 配置了 DaoCloud 镜像加速器和容器日志轮转(10MB×3)防止磁盘占满;使用 Docker Compose v2 进行多容器编排。"
评论