在 HPC 或服务器环境中,Singularity / Apptainer 是替代 Docker 的事实标准。
本文将演示本地 Ubuntu 系统上的 Conda 环境 打包成一个 .sif 镜像的示例代码。
本文目标:
-
系统:Ubuntu 22.04 LTS
-
容器工具:Apptainer
-
Conda:Miniconda / Conda 环境
-
镜像源:腾讯云 Docker Hub 镜像
-
输出:
finale_env.sif
准备 Conda 环境(宿主机)
1️⃣ 已存在 Conda 环境
示例环境路径:
/home/zheng/miniconda3/envs/finale_env
2️⃣ 导出 environment.yml(可选,但强烈建议)
conda activate finale_env conda env export > environment.yml
用于 版本记录 & 未来重建。
3️⃣ 使用 conda-pack 打包环境(关键)
conda activate finale_env conda install -y conda-pack conda-pack \ -n finale_env \ -o finale_env.tar.gz
生成文件:
finale_env.tar.gz
编写 Apptainer.def 文件(核心)
使用腾讯云 Ubuntu 22.04 镜像
Bootstrap: docker From: ccr.ccs.tencentyun.com/library/ubuntu:22.04
完整 Apptainer.def 示例
Bootstrap: docker
From: ccr.ccs.tencentyun.com/library/ubuntu:22.04
%files
finale_env.tar.gz /opt/finale_env.tar.gz
%post
apt-get update && apt-get install -y \
ca-certificates \
bzip2 \
libglib2.0-0 \
libxext6 \
libsm6 \
libxrender1 \
libstdc++6 \
libgcc-s1 \
&& rm -rf /var/lib/apt/lists/*
mkdir -p /opt/finale_env
tar -xzf /opt/finale_env.tar.gz -C /opt/finale_env
/opt/finale_env/bin/python /opt/finale_env/bin/conda-unpack
%environment
export CONDA_DEFAULT_ENV=finale_env
export PATH=/opt/finale_env/bin:$PATH
export LD_LIBRARY_PATH=/opt/finale_env/lib:$LD_LIBRARY_PATH
export PYTHONNOUSERSITE=1
%runscript
echo "[Apptainer] Conda env: finale_env"
exec "$@"
构建 Singularity(SIF)镜像
sudo apptainer build finale_env.sif Apptainer.def
构建成功后生成:
finale_env.sif
测试镜像是否正确(必做)
1️⃣ Python 路径
apptainer exec finale_env.sif which python
apptainer exec finale_env.sif which finaletoolkit