Apptainer/Singularity包已成为高性能计算(HPC)中使用最广泛的容器部署系统之一。该容器系统旨在以裸金属性能执行应用程序,同时保持高度的安全性、可移植性和再现性。
Apptainer是一个开源项目,社区不断壮大,用户基础不断扩大。功能集如下所示:
——支持信任的公钥/私钥签名。
——与Docker和开放式容器倡议的兼容性。
——加密。
——可移植性。
——容器无根运行以禁止权限提升。
——利用GPU、FPGA、高速网络和文件系统。
——易于使用。
——提供商业支持。
虽然Apptainer的安装远不如Docker那么容易,但如果你想在容器中寻找更高的安全性,这可能就是你想要的部署系统。
以下是其安装过程。
要求
Apptainer可以安装在RHEL和基于Ubuntu的Linux发行版上。笔者将用Ubuntu server 22.04进行演示,因此你需要一个该操作系统的运行实例和一个具有sudo权限的用户。
安装必要的依赖关系
首先要做的是安装必要的依赖关系。登录到Ubuntu实例并发出命令:
sudo apt-get install-y\
build-essential\
libseccomp-dev\
pkg-config\
uidmap\
squashfs-tools\
squashfuse\
fuse2fs\
fuse-overlayfs\
fakeroot\
cryptsetup\
curl wget git
对于那些可能不熟悉Linux的人来说,上面是一个使用\字符分成步骤的命令。该命令的单行版本如下:
sudo apt-get install build-essential libseccomp-dev pkg-config uidmap squashfs-tools\n
squashfuse fuse2fs fuse-overlayfs fakeroot cryptsetup curl wget git-y
请注意,如果你使用的是基于RHEL的发行版,依赖关系的安装会稍微复杂一些。首先,必须使用以下工具安装开发工具:
sudo yum groupinstall -y ‘Development Tools’
接下来,添加EPEL存储库:
sudo yum install -y epel-release
最后,你可以使用以下组件安装依赖关系:
sudo yum install-y\
libseccomp-devel\
squashfs-tools\
squashfuse\
fuse-overlayfs\
fakeroot\
/usr/*bin/fuse2fs\
cryptsetup\
wget git
接下来,我们必须安装Go。首先,使用以下内容设置版本和架构:
export GOVERSION=1.19.1 OS=linux ARCH=amd64
下载必要的文件:
wget-O/tmp/go${GOVERSION}.${OS}-${ARCH}.tar.gz \n
https://dl.google.com/go/go${GOVERSION}.${OS}-${ARCH}.tar.gz
使用以下工具解压缩并移动下载的文件:
sudotar-C/usr/local-xzf/tmp/go${GOVERSION}.${OS}-${ARCH}.tar.gz
使用以下两个命令将Go可执行文件添加到用户的PATH:
echo’export PATH=$PATH:/usr/local/go/bin’>>~/.bashrc
source~/.bashrc
我们现在需要安装golangcli lint工具:
curl-sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh \n
|sh-s—b$(go env GOPATH)/bin v1.43.0
使用以下命令将此添加到PATH:
echo’export PATH=$PATH:$(go env GOPATH)/bin’>>~/.bashrc
source~/.bashrc
克隆Apptainer Repo并安装
搞定了依赖关系,我们现在可以克隆Apptainer存储库并安装软件。
使用以下内容克隆存储库:
git clone https://github.com/apptainer/apptainer.git
使用以下命令切换到新创建的目录:
cd apptainer |
使用以下工具查看最新版本:
git checkout v1.1.0-rc.3
请查看发布页面,以确保使用的是最新版本。
使用以下命令运行配置脚本:
1 | ./mconfig |
切换到生成目录:
cd ./builddir
使用以下命令编译Apptainer:
make
完成上述命令需要相当长的时间(最多10分钟)。在某种程度上,你可能认为它已经停滞不前了。不要着急,远离[Ctrl]+[C]键盘快捷键,以便完成安装。
make命令完成后,使用以下命令安装Apptainer:
sudo make install
安装过程完成后,你可以使用以下命令查看Apptainer版本,以验证一切是否按计划进行:
apptainer –version
你应该在输出中看到类似以下内容:
apptainer version 1.1.0-rc.3
Apptainer已安装并准备就绪。
如何使用Apptainer部署容器
现在,让我们用Apptainer部署Hello World容器。为此,我们将使用以下命令从Singularity hub下拉hello-world应用程序:
1 | singularity pull shub://singularityhub/hello-world |
然后,你应该会在该目录中看到一个新文件,名为:
1 | hello-world_latest.sif |
要运行应用程序,请发出以下命令:
./hello-world_latest.sif
应用程序将输出:
Tacotacotaco
你还可以使用以下命令运行容器:
apptainer run hello-world_latest.sif
如果你想使用Ubuntu 20.04作为容器,可以用:
apptainer pull docker://ubuntu:latest |
拉取后,你可以从容器内运行命令,如下所示:
apptainer exec ubuntu_latest.sif cat /etc/os-release
你应该在输出中看到以下内容:
NAME=”Ubuntu”
VERSION=”20.04.5 LTS (Focal Fossa)”
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME=”Ubuntu 20.04.5 LTS”
VERSION_ID=”20.04″
HOME_URL=”https://www.ubuntu.com/”
SUPPORT_URL=”https://help.ubuntu.com/”
BUG_REPORT_URL=”https://bugs.launchpad.net/ubuntu/”
PRIVACY_POLICY_URL=”https://www.ubuntu.com/legal/terms-and-policies/privacy-policy”
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
这就是如何开始使用Apptainer容器部署系统。对于任何希望从部署中获得更多安全性的容器管理员来说,这是一个很好的选择。