udocker 是一个轻量级的用户空间容器工具,允许 在不需要 root 权限 的环境中运行 Docker 镜像,特别适用于 高性能计算(HPC)集群、科研环境、受限服务器 等场景。
python程序
简要介绍
| 特性 |
说明 |
| 🚫 无需 root |
不需要 Docker daemon,也不需要 root 权限 |
| 📦 支持 Docker 镜像 |
可从 Docker Hub 等容器仓库下载并运行镜像 |
| 🧪 兼容科学软件 |
常用于 HPC、科研环境(如 SLURM、PBS)中运行容器化应用 |
| 🧱 后端可选 |
支持多种执行后端(如 P1, P2, F1, F3) |
| 🗂️ 完全在用户目录运行 |
所有数据保存在 $HOME/.udocker 中 |
安装方式(无需 root)
1 2 3 4 5 6
| wget https://github.com/indigo-dc/udocker/releases/download/1.3.17/udocker-1.3.17.tar.gz tar zxvf udocker-1.3.17.tar.gz export PATH=`pwd`/udocker-1.3.17/udocker:$PATH
udocker --help udocker install
|
这将在 $HOME/.udocker 下安装完整运行环境,首次运行会自动完成安装。
常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| Commands: search <repo/expression> :搜索dockerhub以获取容器图像 pull <repo/image:tag> :从dockerhub拉取容器映像 create <repo/image:tag> :从拉取的图像创建容器 run <container> :执行容器 images -l :列出容器图像 ps -m -s :列出创建的容器 name <container_id> <name> :为容器命名 rmname <name> :从容器中删除名称 rename <name> <new_name> :更改容器名称 clone <container_id> :克隆容器 rm <container-id> :删除容器 rmi <repo/image:tag> :删除图像 import <tar> <repo/image:tag> :导入tar文件(由docker导出) import - <repo/image:tag> :从stdin进口(由docker出口) export -o <tar> <container> :导出容器目录树 export - <container> :导出容器目录树 load -i <imagefile> :从文件中加载图像(由docker保存) load :从stdin加载图像(由docker保存) save -o <imagefile> <repo/image:tag> :将带有图层的图像保存到文件中 inspect -p <repo/image:tag> :返回图像上的低级信息 verify <repo/image:tag> :验证拉取或加载的图像 protect <repo/image:tag> :保护存储库 unprotect <repo/image:tag> :取消存储库保护 protect <container> :保护容器 unprotect <container> :取消储存库保护 mkrepo <top-repo-dir> :在位置创建另一个存储库 setup :更改容器执行设置 login :登录docker存储库 logout :从docker存储库注销 help :This help run --help :特定于命令的帮助 version :显示udocker版本 Options common to all commands must appear before the command: -D :Debug --quiet :更少的冗差 --repo=<directory> :在目录中使用存储库 --insecure :允许不安全的未经身份验证https --allow-root
|
初始化 udocker
安装依赖文件
1 2
| udocker install udocker --allow-root install
|
拉取镜像(和 Docker 一样)
1
| udocker pull ubuntu:20.04
|
创建容器实例
1
| udocker create --name=myubuntu ubuntu:20.04
|
运行容器
带参数运行
1
| udocker run --bind=/data --env=MYVAR=123 myubuntu /bin/bash
|
容器内安装软件
1
| udocker run myubuntu apt update && apt install -y curl
|
后端执行模式(运行机制)
| 模式 |
描述 |
是否需要 root |
P1 |
使用 proot 实现的 chroot 替代 |
否 |
P2 |
类似 P1,支持更多功能 |
否 |
F1 |
使用 fakechroot + LD_PRELOAD |
否 |
F3 |
更快的 fakechroot 模式,适合 HPC |
否 |
R1 |
使用 runC(需要 root) |
是(通常不用于 udocker) |
可设置默认执行器:
1
| udocker setup --execmode=P1 myubuntu
|
默认目录结构
| 路径 |
说明 |
~/.udocker |
所有镜像、容器、配置文件存放位置 |
~/.udocker/containers |
容器数据存储路径 |
~/.udocker/repos |
拉取的镜像数据 |
适用场景
| 场景 |
描述 |
| ✅ 无 root 环境运行容器 |
如共享 HPC 集群,云主机,受限开发环境 |
| ✅ 科学计算 |
使用 Bioconda / TensorFlow / PyTorch 等镜像运行计算任务 |
| ✅ 容器移植 |
把已有 Docker 容器移植到无 root 系统运行 |
| ✅ SLURM/作业调度系统 |
与 sbatch、qsub 配合使用 |
udocker和 Docker 的区别
| 项目 |
Docker |
udocker |
| 是否需 root |
是 |
否 |
| 是否需 daemon |
是 |
否 |
| 是否支持 Dockerfile 构建 |
是 |
否(可手动操作容器) |
| 执行速度 |
原生快 |
稍慢(尤其是 P1/F1 模式) |
| 支持 GPU |
否(默认) |
有 Hack 可支持部分场景 |
在 HPC 中运行容器任务
1 2 3 4
| udocker pull tensorflow/tensorflow:2.13.0 udocker create --name=tf tensorflow/tensorflow:2.13.0 udocker setup --execmode=F3 tf udocker run --bind=/data tf python3 /data/train.py
|