2. Docker 安装与配置:在 Ubuntu/CentOS 上安装 Docker Engine、配置镜像加速器、非 root 用户管理 Docker
Docker 容器化环境是 DAG 任务调度系统的基础运行载体。本节将覆盖 Docker Engine 在主流 Linux 发行版上的安装流程、镜像加速器配置以及非 root 用户权限管理,确保后续容器化部署的稳定性和安全性。
2.1 操作系统环境准备
在安装 Docker Engine 之前,需要确保操作系统满足以下前置条件:
| 检查项 | Ubuntu 要求 | CentOS 要求 |
|---|---|---|
| 操作系统版本 | Ubuntu 20.04 LTS / 22.04 LTS / 24.04 LTS | CentOS 7 / Rocky Linux 8 / AlmaLinux 9 |
| 内核版本 | ≥ 5.4(推荐 6.x) | ≥ 3.10(推荐 4.18+) |
| 架构 | x86_64 / arm64 | x86_64 / aarch64 |
| 存储驱动 | overlay2(推荐) | overlay2(推荐) |
| 防火墙 | ufw 放行 2375/2376 端口 | firewalld 放行 2375/2376 端口 |
性能提示: 对于 DAG 任务调度场景,建议使用 Ubuntu 22.04 LTS 或 Rocky Linux 8,其内核版本对 cgroup v2 和 overlay2 驱动支持更完善,可减少容器 I/O 延迟。
2.2 Docker Engine 安装流程
以下步骤分别针对 Ubuntu 和 CentOS 系列操作系统,采用官方仓库方式安装,确保版本一致性和更新便利性。
2.2.1 Ubuntu 安装步骤
# 1. 更新包索引并安装依赖
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release
# 2. 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 3. 设置稳定版仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 4. 安装 Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 5. 验证安装
sudo docker run hello-world
2.2.2 CentOS / Rocky Linux 安装步骤
# 1. 安装必要工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 2. 添加 Docker 官方仓库
sudo yum-config-manager --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 3. 安装 Docker Engine
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 4. 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 5. 验证安装
sudo docker run hello-world
注意: 在 CentOS 7 上安装时,如果内核版本低于 3.10,需要先升级内核或使用
overlay 驱动(不推荐)。建议使用 Rocky Linux 8+ 以获得更好的兼容性。
2.3 配置镜像加速器
在国内网络环境下,直接访问 Docker Hub 可能面临拉取速度慢或超时问题。配置镜像加速器可显著提升镜像下载效率,对 DAG 任务调度场景中频繁拉取基础镜像至关重要。
以下为配置流程:
# 1. 创建或编辑 Docker 守护进程配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<- 'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.nju.edu.cn"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"storage-driver": "overlay2"
}
EOF
# 2. 重新加载配置并重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
# 3. 验证加速器是否生效
docker info | grep -A 5 "Registry Mirrors"
加速器选择建议: 推荐使用 DaoCloud、南京大学镜像站或阿里云加速器(需注册获取专属地址)。对于生产环境,建议配置至少两个备用镜像源,避免单点故障影响 DAG 任务调度连续性。
2.4 非 root 用户管理 Docker
默认情况下,Docker 守护进程绑定到 Unix socket(/var/run/docker.sock),该 socket 属于 root 用户和 docker 组。普通用户直接运行 docker 命令会提示权限不足。为保障安全性和操作便利性,建议将运维用户加入 docker 组。
2.4.1 用户组配置步骤
# 1. 创建 docker 组(如果不存在)
sudo groupadd docker
# 2. 将当前用户加入 docker 组
sudo usermod -aG docker $USER
# 3. 重新登录或刷新组权限
newgrp docker
# 4. 验证非 root 用户权限
docker ps
# 5. 测试运行容器
docker run hello-world
2.4.2 安全注意事项
| 风险点 | 说明 | 缓解措施 |
|---|---|---|
| 权限提升 | docker 组成员等效于 root 权限,可通过挂载宿主机目录实现提权 |
仅将可信用户加入 docker 组;使用 sudo 执行敏感操作 |
| 容器逃逸 | 恶意容器可能利用 Docker socket 逃逸到宿主机 | 限制容器挂载 /var/run/docker.sock;启用用户命名空间映射 |
| 资源滥用 | 非 root 用户可能启动大量容器耗尽系统资源 | 配置 cgroup 资源限制;使用 Docker 资源配额 |
最佳实践: 在 DAG 任务调度环境中,建议为每个调度任务创建独立的系统用户,并仅将该用户加入
docker 组。同时配合 sudo 规则限制特定命令的执行,实现最小权限原则。
2.5 Docker 安装与配置架构总览
下图展示了 Docker Engine 安装、镜像加速器配置以及非 root 用户管理的整体架构关系:
2.6 安装后验证清单
完成安装与配置后,建议执行以下验证步骤,确保环境符合 DAG 任务调度要求:
- 服务状态检查:
sudo systemctl status docker确认服务为 active (running) - 版本信息确认:
docker version检查 Client 和 Server 版本一致 - 镜像加速器生效:
docker info | grep -A 5 "Registry Mirrors"确认镜像源列表 - 非 root 用户测试: 切换至普通用户执行
docker run hello-world无权限错误 - 存储驱动验证:
docker info | grep "Storage Driver"确认输出为 overlay2 - 网络连通性:
docker run --rm alpine ping -c 3 8.8.8.8测试容器网络
性能调优提示: 对于 DAG 任务调度场景,建议在
daemon.json 中设置 "default-ulimits": {"nofile": {"Name": "nofile", "Hard": 65536, "Soft": 65536}},避免高并发任务调度时出现文件描述符耗尽问题。