Apptainer
https://apptainer.org/icons/icon-512x512.png
クラウドやベアメタルなどあらゆるプラットフォームで動作することを想定して設計されたコンテナプラットフォーム
Apptainer は単純なコンテナランタイムと言うよりは、共有システムや、ハイパフォーマンスコンピューティング(HPC) にコンテナのもつ再現性をを持ち込むことを目的にしているツール
特徴
検証可能な再現性とセキュリティ
暗号署名
イミュータブルなコンテナイメージ形式 (SIF)
メモリ内での復号化
コンピューティングホストのリソースを最大限活用するため分離よりも統合を意識した設計
ホストの持つ GPU や高速なネットワーク、ファイルシステムの並列性などを必要とされないまで最大限活用できる
コンテナイメージを専用のSIF形式にしたことで、リソースを活用しながらポータビリティを実現
シンプルなセキュリティモデルを採用
コンテナの内部と外部の権限は一致する
一方でコンテナ内で特権(root) に昇格することはできない
互換性
インストール
公式のリリースに RHEL / Debian 系のパッケージがそれぞれあるのでそれを取得してインストールするのが一番簡単。 Docker イメージを実行する
公式のドキュメントにある、Docker Hubにホストされているイメージを SIF に変換して動作させる。
Docker と同じく apptainer run すると指定したイメージを取得して、SIF に変換して実行する 手元にキャッシュがあれば変換済みのイメージを使用して動作する
実行時に何らかの理由で書き込めない場合は /tmp に使い捨てのファイルが生成される
サンプルに指定されている sylabsio/lolcow は Docker でも動作するイメージなので当然 docker run できる
code:sh
# 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
2022/11/30 23:26:12 info unpack layer: sha256:16ec32c2132b43494832a05f2b02f7a822479f8250c173d0ab27b3de78b2f058
2022/11/30 23:26:12 info unpack layer: sha256:5ca731fc36c28789c5ddc3216563e8bfca2ab3ea10347e07554ebba1c953242e
INFO: Creating SIF file...
______________________________
< Wed Nov 30 23:26:16 JST 2022 >
------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
https://gyazo.com/80d2702b8df3e4a79b6c504bd542592c
Docker ImageをSIFに変換して保存する
シンプルに apptainer pull すると良い
例えば apptainer pull sylabsio/lolcow を実行すると Docker Image から変換された SIF がカレントディレクトリの lolcow_latest.sif として保存される
ファイル名を指定する場合は apptainer pull <filename> <remote> とする
pull したタイミングで Docker Image から変換されるため、保存したSIFは同じチェックサムにはならない
コンテナ内外で同じユーザーの権限になることの確認
Docker Image である busybox を雑に使って確認する
ざっと見た感じコンテナの外と中の権限(uidと名前)が一致している
code:sh
# test 用のユーザーが居る(事前に useradd しておいた)
$ id
uid=1001(test) gid=1002(test) groups=1002(test)
# busybox を実行する
$ apptainer run docker://busybox sh -c 'id'
# ...
INFO: Creating SIF file...
uid=1001(test) gid=1002(test) groups=1002(test) # test user が一致している
その他
1.1.0 からデフォルトではセキュリティのため setuid を使用しないモードがデフォルトになっている
setuid を使用したコンテナの実行が必要な場合は apptainer-suid をインストールすると良い
セキュリティ上 setuid を使わないことで優位な部分もあるが、制限も出てくる
lima apptiner とすると Lima環境下で Apptainer を使用できる
Colima を使用すると同じく Apptainer を使用できる