EC2にApptainerをインストールしてコンテナを動かしてみた

ApptainerというHPCに特化したコンテナプラットフォームを触ってみました!
2023.05.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!コンサル部のinomaso(@inomasosan)です。

最近HPC分野を勉強しており、ApptainerというHPCに特化したコンテナプラットフォームの調査や、簡単な検証環境を構築したのでブログにまとめていきます。

Apptainerとは?

概要

特徴

  • 暗号署名、イミュータブルコンテナイメージ形式、メモリ内での復号化により、検証可能な再現性とセキュリティを実現。
  • クラスターまたはサーバー上でGPU、高速ネットワーク、並列ファイルシステムを簡単に利用可能。
  • シングルファイルでコンテナイメージを管理できるため、他のHPCクラスターに簡単に持ち運びが可能。
  • コンテナの内部と外部で同じユーザの権限を使用。
    • root権限に昇格しホストを制御することはできない。

やってみた

今回は単一のEC2上にApptainerをインストールして、コンテナを起動してみました。

検証環境

今回構築した環境は以下の通りです。

項目 バージョン
OS Ubuntu Server 22.04 LTS
AMI ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-20230325
インスタンスタイプ t3a.nano

Apptainerインストール

Apptainer Admin Guide - Install Ubuntu packagesを参考にApptainerをインストールしてみます。

まずはsoftware-properties-commonパッケージをインストールして、add-apt-repositoryコマンドを使えるようにします。

$ sudo apt update
$ sudo apt install -y software-properties-common

ちなみに今回使用したAMIだとsoftware-properties-commonはインストール済みでした。

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
software-properties-common is already the newest version (0.99.22.6).
software-properties-common set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 38 not upgraded.


次に、Apptainerの外部リポジトリを登録し、Apptainerをインストールしていきます。

$ sudo add-apt-repository -y ppa:apptainer/ppa
$ sudo apt update
$ sudo apt install -y apptainer

ちなみに、古いLinuxディストリビューションの場合はsetuidバイナリを使用してコンテナのセットアップ操作の実行が必要なため、apptainer-suidをインストール願います。

$ sudo add-apt-repository -y ppa:apptainer/ppa
$ sudo apt update
$ sudo apt install -y apptainer-suid


最後に、インストールが完了したらapptainerコマンドが実行可能か確認するため、下記のバージョン確認のコマンドを実行します。

$ apptainer version

コンテナの起動

ApptainerはDockerおよびOCIコンテナをサポートしているため、Apptainer User Guide - Support for Docker and OCI Containersを参考に、Docker Hubからコンテナを起動できるか試していきます。

$ apptainer run docker://sylabsio/lolcow:latest
INFO:    Converting OCI blobs to SIF format
INFO:    Starting build...
Getting image source signatures
Copying blob 5ca731fc36c2 done
Copying blob 16ec32c2132b done
Copying config fd0daa4d89 done
Writing manifest to image destination
Storing signatures
2023/05/01 07:58:32  info unpack layer: sha256:16ec32c2132b43494832a05f2b02f7a822479f8250c173d0ab27b3de78b2f058
2023/05/01 07:58:33  info unpack layer: sha256:5ca731fc36c28789c5ddc3216563e8bfca2ab3ea10347e07554ebba1c953242e
INFO:    Creating SIF file...
INFO:    underlay of /etc/localtime required more than 50 (77) bind mounts
 _____________________________
< Mon May 1 07:58:59 UTC 2023 >
 -----------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

出力の最初にINFO: Converting OCI blobs to SIF formatとある通り、OCI形式からSIF形式への変換を含めてワンライナーのコマンドで簡単に実行できることがわかりました。

コンテナのイメージ保存

任意の場所に変換したSIFファイルを保存することもできます。

$ apptainer pull docker://sylabsio/lolcow
INFO:    Using cached SIF image
$ ls -la
total 73272
drwxrwxrwt 11 root     root         4096 May  1 08:03 .
drwxr-xr-x 19 root     root         4096 May  1 07:52 ..
-rwxr-xr-x  1 ssm-user ssm-user 74985472 May  1 08:03 lolcow_latest.sif

EC2のUser DataでApptainerをインストール

ApptainerをEC2の起動時に自動インストールできるよう、簡易的なスクリプトを用意しました。

#!/bin/bash
apt update
apt install -y software-properties-common

add-apt-repository -y ppa:apptainer/ppa
apt update
apt install -y apptainer

参考

まとめ

Apptainerを調査し、単一のEC2上にインストールやコンテナの動作確認をしてみました。
Docker関連のコンテナイメージを動かすことはできますがApptainerにはコンテナオーケストレータは存在しないため、HPC以外の用途には素直に他のコンテナプラットフォームを検討して頂くのが良いかと思います。

この記事が、どなたかのお役に立てば幸いです。それでは!