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 用户管理的整体架构关系:

Docker 安装与配置架构图 操作系统层 Ubuntu 20.04/22.04/24.04 LTS | CentOS 7 / Rocky Linux 8 / AlmaLinux 9 内核 ≥ 3.10(推荐 4.18+) | overlay2 存储驱动 | cgroup v2 支持 Docker Engine 安装层 docker-ce + docker-ce-cli + containerd.io + docker-compose-plugin 官方仓库安装 | 版本锁定 | systemd 服务管理 配置层 daemon.json 配置 | 镜像加速器 | 日志驱动 | cgroup 驱动 registry-mirrors | exec-opts | log-driver | storage-driver 用户管理层 docker 组 | usermod -aG | 非 root 权限 | 安全审计

2.6 安装后验证清单

完成安装与配置后,建议执行以下验证步骤,确保环境符合 DAG 任务调度要求:

  1. 服务状态检查: sudo systemctl status docker 确认服务为 active (running)
  2. 版本信息确认: docker version 检查 Client 和 Server 版本一致
  3. 镜像加速器生效: docker info | grep -A 5 "Registry Mirrors" 确认镜像源列表
  4. 非 root 用户测试: 切换至普通用户执行 docker run hello-world 无权限错误
  5. 存储驱动验证: docker info | grep "Storage Driver" 确认输出为 overlay2
  6. 网络连通性: docker run --rm alpine ping -c 3 8.8.8.8 测试容器网络
性能调优提示: 对于 DAG 任务调度场景,建议在 daemon.json 中设置 "default-ulimits": {"nofile": {"Name": "nofile", "Hard": 65536, "Soft": 65536}},避免高并发任务调度时出现文件描述符耗尽问题。