1.Apptainer简介
Apptainer是一个开源容器平台,旨在简单,快速, 和安全。有许多容器平台可用,但 Apptainer 的设计 便于在共享系统和高性能计算 (HPC) 中使用 环境。它的特点是:
- 不可变的单文件容器映像格式,支持加密 签名和加密。
- 默认情况下,集成高于隔离。轻松利用 GPU,高速 网络,群集或服务器上的并行文件系统。
- 计算的移动性。单文件 SIF 容器格式易于运输 并分享。
- 简单有效的安全模型。您是容器内的同一用户 作为外部,并且无法通过以下方式获得主机系统上的其他权限 违约。
2.Singularity与Apptainer的区别
Singularity已经成为一个成熟的开源项目,因为我们已经超越了该项目的所有原始设计目标。是时候将项目提升到一个新的成熟水平了。Singularity项目将正式进入Linux基金会,立即生效。作为此举的一部分,为了与其他同名项目和商业产品区分开来,我们将该项目重命名为“Apptainer”
2.1版本区别:
Apptainer的第一个版本将是1.0,它将存在于 https://github.com/apptainer/apptainer 的新存储库中。Singularity 存储库已移动 存储库已移至 https://github.com/apptainer/singularity 该存储库将作为存档保留,并在 Apptainer 的第一个版本后设置为只读。
2.2Sylabs仍然有一个奇点,Apptainer与此有什么关系?
当Sylabs分叉Singularity项目时,他们选择不重命名他们的分叉。这在社区中造成了相当大的混乱,而且随着时间的推移,这种混乱只会变得更糟。我们决定在我们自己之间修复它,以接受品牌重塑的打击,这将解决混淆,并允许Sylabs有权继续在其商业产品线中使用Singularity名称。
2.3向后兼容性
Apptainer 将作为命令行链接提供,并将尽可能多地维护 CLI 和环境功能。从用户的角度来看,与Singularity几乎没有什么变化。
2.4Sylabs会重新加入Apptainer项目吗?
我们当然希望如此,但这取决于他们。像任何其他组织一样,欢迎他们向Apptainer提交PR,随着时间的推移,他们可能会被考虑参加TSC。理想情况下,Sylabs 会将 Apptainer 视为他们的上游来源,为这个社区贡献 PR,然后为他们自己的商业产品拍摄这个项目的快照,并在 Apptainer 基础上添加他们自己的增值(例如库、远程构建器等)。
2.5官方文档
Singularity官方文档:GitHub - apptainer/singularity: Singularity has been renamed to Apptainer as part of us moving the project to the Linux Foundation. This repo has been persisted as a snapshot right before the changes.
Apptainer官方文档:https://github.com/apptainer/apptainer
3.Docker与Apptainer的区别
Apptainer是一个相对较新的容器软件,相对于 docker 来说,它不需要 root 权限,因此更符合科研应用的场景(因为共享服务器中普通用户通常不会有root权限)。
Docker | Apptainer(使用Singularity的话,将命令中的apptainer替换为singularity) | |
镜像 | 有 | 无(Apptainer没有镜像的概念,用户创建和运行的都是一个个容器) |
获取镜像(容器) | docker pull busybox:latest | apptainer pull ./busybox.sif docker://busybox:latest或者apptainer build ./busybox.sif docker://busybox:latest |
容器 | 有 | 有(Apptainer容器有两种存在形式:SIF和sandbox。SIF只读,主要用来执行用户程序;sandbox可修改,可用来开发和创建新容器) |
查看运行的容器 | docker ps | apptainer instance list |
运行容器 | docker run busybox ping www.baidu.com | apptainer exec busybox.sif ping www.baidu.com |
挂载目录 | -v host_path:container_path | -B或者--bind |
交互式运行容器 | docker run -it busybox | apptainer shell busybox.sif |
4.相对Singularity容器Apptainer新增功能
4.1库API注册表
Apptainer 使用户能够使用库 API 容器注册表将容器推送到专门为 SIF 映像并拉取其他人创建的 SIF 映像。
许多库 API 注册表需要身份验证才能执行操作 例如推送容器映像或拉取潜在的私有容器映像。 命令组控制库 API 的身份验证 登记处。查看有关如何使用远程端点添加和登录的说明。remote
通过身份验证后,即可推送容器!
具体操作可查看文档:Library API Registries — Apptainer User Guide main documentation
4.2限制容器资源
限制容器消耗的资源通常很有用,例如 以允许容器仅使用 1 个 CPU 或系统上 50% 的 RAM。 尽管在 HPC 群集上,使用作业计划程序启动容器是很常见的 可以为每个作业设置限制,以下方案是示例,其中更多 直接控制很有用:
- 在 HPC 作业中运行多个容器化应用程序时,每个应用程序 作业中的容器应具有不同的资源限制。
- 在工作站上测试 HPC 代码时,避免过多的 CPU/RAM 使用率 使桌面环境和其他应用程序停止运行。
- 当基准测试代码不提供限制数量的内部方法 它使用的 CPU 数量。
有三种方法可以将限制应用于运行容器 应用器:
- 使用下面所述的每资源命令行限制标志。
- 使用该标志应用的文件 定义资源限制。--apply-cgroupscgroups.toml
- 使用外部工具(如工具)应用限制,然后叫systemd-runapptainer
Limiting Container Resources — Apptainer User Guide main documentation
4.3应用程序检查点
检查点功能允许用户透明地保存 容器化应用程序在执行时,然后从 保存的状态。这对于需要最大限度地减少短暂影响的用例很有价值 环境故障、随机硬件故障或作业预处理。
Checkpoint Feature — Apptainer User Guide main documentation
4.4Singularity兼容性
由于社区决定将该项目转移到 Linux 基金会中,因此 对项目名称更改的限制,这一直是 项目,以尽量减少对用户群的影响。如果您在制作时遇到问题 搬家,请与社区联系,以便 我们可以为您提供帮助!
Singularity Compatibility — Apptainer User Guide main documentation
5.Apptainer安装
5.1源码安装
5.1.1安装系统依赖
必须先将开发工具和库安装到主机上。在基于 Debian 的系统上,包括 Ubuntu:
# Ensure repositories are up-to-date
sudo apt-get update
# Install debian packages for dependencies
sudo apt-get install -y \build-essential \libseccomp-dev \pkg-config \uidmap \squashfs-tools \squashfuse \fuse2fs \fuse-overlayfs \fakeroot \cryptsetup \curl wget git
在 CentOS/RHEL 上:
# Install basic tools for compiling
sudo yum groupinstall -y 'Development Tools'
# Ensure EPEL repository is available
sudo yum install -y epel-release
# Install RPM packages for dependencies
sudo yum install -y \libseccomp-devel \squashfs-tools \squashfuse \fuse-overlayfs \fakeroot \/usr/*bin/fuse2fs \cryptsetup \wget git
在 SLE/openSUSE 上
# Install RPM packages for dependencies
sudo zypper install -y \libseccomp-devel \libuuid-devel \openssl-devel \cryptsetup sysuser-tools \gcc go
5.1.2安装go代理
Apptainer 是用 Go 编写的,可能需要比现在更新的 Go 版本 在分配的存储库中可用。我们建议安装 官方二进制文件中的最新版本的 Go。
首先,将 Go tar.gz 存档下载到 ,然后将存档解压缩到 。/tmp/usr/local
注意:如果要从旧版本更新 Go,请确保在重新安装之前删除 /usr/local/go。
export GOVERSION=1.19.3 OS=linux ARCH=amd64 # change this as you need
wget -O /tmp/go${GOVERSION}.${OS}-${ARCH}.tar.gz \https://dl.google.com/go/go${GOVERSION}.${OS}-${ARCH}.tar.gz
sudo tar -C /usr/local -xzf /tmp/go${GOVERSION}.${OS}-${ARCH}.tar.gz
最后,添加到环境变量:/usr/local/go/binPATH
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc
6.安装Apptainer
6.1克隆存储库
随着 Go 模块的采用,您不再需要克隆容器 存储库到特定位置。
在您选择的位置克隆存储库:git
git clone https://github.com/apptainer/apptainer.git
cd apptainer
默认情况下,您的克隆将位于开发所在的分支上 的Apptainer发生。 要构建特定版本的 Apptainer,请在编译之前检查发布标记, 例如:main
git checkout v1.1.8
编译应用器,可以使用以下命令配置、构建和安装 Apptainer:
./mconfig
cd ./builddir
make
make install
就是这样!现在,您可以通过运行以下命令来检查您的应用器版本:
apptainer --version
该命令接受可以修改生成和安装的选项 的申请者。例如,要在不同的文件夹中构建并设置 将前缀安装到其他路径:mconfig
./mconfig -b ./buildtree -p /usr/local
如果要安装 setuid(以前是默认安装),请使用该选项。--with-suid
有关可用选项,请参阅 的输出。./mconfig -h
6.2tar方式
下载apptainer压缩包
VERSION=1.1.8
wget https://github.com/apptainer/apptainer/releases/download/v${VERSION}/apptainer-${VERSION}.tar.gz
解压并安装
tar xf apptainer-${VERSION}.tar.gz
cd apptainer-1.1.8
./mconfig
若要指定安装路径和支持suid:
(./mconfig --with-suid --prefix=/public/home/cluslab/software)
cd ./builddir
make
make install