Singularity(四)| 自定义容器
4.1 Singularity Definition 文件
对于可复制的、高质量的容器,我们应该使用定义文件(Definition File)构建 Singularity 容器 。使用定义文件的方式可以在纯文本文件中描述容器的配置和构建过程。定义文件通常具有 .def
扩展名。在其中可以指定容器的基础镜像、安装软件包、设置环境变量等。然后使用 sudo singularity build
命令根据定义文件构建容器。这也使得添加文件、环境变量和安装定制软件变得容易。
定义文件包含一个 header 和一个 body。header 决定了开始使用的基础容器,body 进一步分为几个部分,这些部分执行诸如安装软件、设置环境以及将文件从主机系统复制到容器中的操作。
以下是一个定义文件的示例:
BootStrap: library
From: ubuntu:20.04
%setup
mkdir ${SINGULARITY_ROOTFS}/app
%post
apt-get -y update
apt-get -y install fortune cowsay lolcat
%environment
export LC_ALL=C
export PATH=/usr/games:$PATH
%runscript
fortune | cowsay | lolcat
%labels
Author GodloveD
在这个例子中,header 告诉 Singularity 使用来自容器库的基本 Ubuntu 20.04 镜像。
引导文件的主要内容分为几节(section)。在构建过程中,不同的节在不同的时间添加不同的内容或执行命令。注意,如果任何命令失败,构建过程将停止。def 文件中各节的顺序并不重要,在构建过程中可以包含多个同名的节,并将它们相互追加。