在Slurm HPC集群(Ubuntu系统)中安装Docker及运行容器咨询
在Ubuntu Slurm HPC集群中部署容器工具指南
一、安装Docker(普通模式)
步骤1:清理旧版本
sudo apt remove -y docker docker-engine docker.io containerd runc
步骤2:配置Docker官方仓库
sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
步骤3:安装Docker引擎
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
步骤4:验证安装
sudo docker run hello-world
步骤5:配置Slurm用户权限
将提交作业的用户加入docker组,避免每次使用sudo:
sudo usermod -aG docker $USER
执行后退出当前会话重新登录生效。
二、安装无根Docker(Rootless Docker)
无根模式无需root权限,更适合多用户HPC环境:
步骤1:满足系统依赖
确保Ubuntu版本≥20.04、内核≥5.4,安装必要工具:
sudo apt install -y uidmap slirp4netns docker-ce-rootless-extras
步骤2:初始化无根Docker
执行官方初始化脚本:
dockerd-rootless-setuptool.sh install
步骤3:验证安装
无需sudo直接运行:
docker run hello-world
三、Slurm中运行容器的配置要点
1. 确保Docker服务运行
- 普通Docker:在所有计算节点启用并启动服务
sudo systemctl enable --now docker - 无根Docker:每个用户需启用自己的用户级服务
若Slurm作业中无法启动用户服务,需配置PAM会话保留用户systemd实例(修改systemctl --user enable --now docker/etc/pam.d/slurm添加session required pam_systemd.so)
2. Slurm作业脚本示例
普通Docker作业脚本
#!/bin/bash #SBATCH --job-name=docker-test #SBATCH --nodes=1 #SBATCH --ntasks=1 docker run ubuntu:latest /bin/bash -c "echo 'Hello from Docker container on node $(hostname)'"
无根Docker作业脚本
#!/bin/bash #SBATCH --job-name=rootless-docker-test #SBATCH --nodes=1 #SBATCH --ntasks=1 # 确保用户级Docker服务启动 systemctl --user start docker docker run ubuntu:latest /bin/bash -c "echo 'Hello from rootless Docker container on node $(hostname)'"
3. 性能与网络优化
- 普通Docker:可使用
--network=host直接复用主机网络,提升性能,但需注意端口冲突 - 无根Docker:默认使用
slirp4netns网络,性能略低,可通过配置dockerd使用网桥模式(需额外权限配置)
四、HPC场景推荐的替代容器工具
1. Apptainer(原Singularity)
HPC领域最主流的容器工具,天生支持无根运行,镜像只读可移植,与Slurm集成完美:
- 安装:
sudo apt install -y apptainer - 作业脚本示例:
#!/bin/bash #SBATCH --job-name=apptainer-test #SBATCH --nodes=1 #SBATCH --ntasks=1 apptainer exec docker://ubuntu:latest /bin/bash -c "echo 'Hello from Apptainer container on node $(hostname)'"
2. Podman
与Docker命令完全兼容的无根容器工具,无需守护进程,资源占用更低:
- 安装:
sudo apt install -y podman - 运行方式与Docker一致,直接替换
docker为podman即可
3. Charliecloud
轻量级HPC容器工具,无守护进程,镜像转换简单,适合对资源占用敏感的场景:
- 安装:
sudo apt install -y charliecloud - 基本使用:
ch-image pull ubuntu:latest ch-run ubuntu:latest -- echo "Hello from Charliecloud container"
内容的提问来源于stack exchange,提问作者Sergiu Neagoe
相关产品推荐
相关产品推荐

