什麼是 Apptainer?如何在 Ubuntu 服務器上安裝?

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

請查看發佈頁面,以確保使用的是最新版本。

使用以下命令運行配置腳本:

./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 應用程序:

singularity pull shub://singularityhub/hello-world

然後,你應該會在該目錄中看到一個新文件,名爲:

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 容器部署系統。對於任何希望從部署中獲得更多安全性的容器管理員來說,這是一個很好的選擇。

原文鏈接: https://thenewstack.io/what-is-apptainer-and-how-do-you-install-it-on-ubuntu-server/

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/u3khdKjW3C-N_sB8Bbx9Fw