Heavy Watal

Apptainer

https://apptainer.org/

SingularityだったものがLinux Foundationへの移管に伴って改名。 紛らわしいことにSylabs社がSingularity CEと称しているforkはとりあえず無視。

Admin

https://apptainer.org/docs/admin/latest/

Installation

https://apptainer.org/docs/admin/latest/installation.html

Linux

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

setuid版というのはかなり古いkernel向けっぽいのでとりあえず無視。

Mac

kernelが違うのでネイティブには動かない。 今のところDocker Desktop的なものも無いので自分で仮想環境を用意する必要があるらしい。

Configuration

https://apptainer.org/docs/admin/latest/configfiles.html

apptainer help
apptainer version
apptainer buildcfg
apptainer remote list

/etc/singularity/usr/local/etc/singularity が残ってると怒られるので消す。 singularity コマンドは互換性のためのエイリアスとしてしばらく提供されるっぽいけど。

User

https://apptainer.org/docs/user/latest/

CLI

https://apptainer.org/docs/user/latest/cli.html

pull
apptainer pull [pull options...] [output file] <URI>
SIFイメージをダウンロードする。 OCIイメージだったら build を呼んでSIFに変換する。 e.g., apptainer pull docker://alpine すると alpine_latest.sif ができる。
exec
apptainer exec [exec options...] <container> <command>
コマンドを実行する。
container引数にはSIFファイルへのパスを渡せる。
docker exec との違い:
  • containerが先に走っている必要はない。 --rm も不要。
  • --mount 無しでも /home/$USER, /tmp, $PWD がbindされる。
  • -it 無しでも自然な入出力。
run
container内のrunscriptを実行する。 runscriptは /apptainer (/singularity) に置かれたシェルスクリプトで、 exec と同様にコマンドを実行できるようになっていることが多そう。
shell
container内でシェルを起動する。 execrunbash するのとどう違うか?

Repositories

docker://
Docker向けregistryからpullしてSIFに変換。 まともなSIF registryが見当たらない現状では結局これが楽ちん。
shub:// Singularity Hub
2021-04 に凍結。 DataLad に引き継がれた既存イメージはpullできるらしい。
library:// Sylabs Singularity library
Apptainerデフォルトではオフ。