こんにちは、解析システム開発所属のadachitです。
最近業務で、Singularityを触る機会があり、それについてブログを作成しようと思います。
SingularityはDockerのような仮想コンテナを作成するツールです。
しかし、作成したコンテナ内はDockerコンテナと異なり、ツールのインストールやファイルの書き換えなどができません。
今回は、Singularityコンテナを編集する方法について紹介します。
コンテナイメージの作成
まずは、コンテナイメージを準備します。
Dockerfileのように自分で書いて準備することも可能ですが、今回はsingularity pull
を使い、DockerのイメージをSingularityのイメージとして変換し、使用したいと思います。
$ singularity pull docker://ubuntu:20.04 $ ls ubuntu_20.04.sif
これでコンテナイメージの準備はできました。
続いて、コンテナイメージへ入り、ツールのインストールができないことをチェックします。
コンテナイメージへ入り、ツールをインストールしてみる
コンテナイメージへ入る場合はsingularity shell
、コンテナイメージの外からコマンドの実行のみを行う場合は、singularity exec
を使います。
今回はコンテナの中に入り、vimでファイルを作成したいと思います。
# コンテナへ入る # sudo singularity shell <コンテナイメージファイル> $ sudo singularity shell ubuntu_20.04.sif # vimの実行 Singularity> vim bash: vim: command not found # apt update Singularity> apt update Reading package lists... Done E: List directory /var/lib/apt/lists/partial is missing. - Acquire (30: Read-only file system)
コンテナイメージへ入り、vimがインストールされていないのを確認した後、apt updateを実行しましたがエラーが発生しました。
これはsingularityのコンテナイメージではファイルの編集ができないことによるものです。
Sandboxでコンテナイメージを編集
exit
でコンテナイメージから外へ出て、コンテナイメージを作成しなおします。
singularity build
でコンテナイメージを作成しなおしますが、このとき、オプションコマンドとして--sandbox
を付与します。
# singularity build --sandbox <Sandboxの名前(任意)> <コンテナイメージファイル> $ singularity build --sandbox ubuntu_20.04_edit ubuntu_20.04.sif
通常のsingularity build
では、実行ディレクトリに指定した名前のコンテナイメージファイルが作成されますが、--sandbox
オプションを付けると指定した名前のディレクトリが作成されます。
続いて、先程と同様にsingularity shell
コマンドを実行してコンテナイメージ内へ入りますが、--writable
オプションを付けて実行します。
このオプションを付与することで、入ったコンテナ内でツールのインストールやファイルの編集ができるようになります。
# sudo singularity shell --writable <Sandbox名> $ sudo singularity shell --writable ubuntu_20.04_edit Singularity> apt update Singularity> apt install vim
先程と異なり、apt update
がエラーなく実行でき、apt install vim
まで無事に完了しました。
一通りの作業が完了したので、編集した内容をコンテナイメージ化します。
編集後のコンテナをイメージファイルに変換
singularity build`でSandboxで作成したディレクトリをコンテナイメージファイルへ変換します。
# suingularity build <コンテナイメージファイル名> <Sandbox名> $ suingularity build ubuntu_20.04_edit.sif ubuntu_20.04_edit
これで編集したコンテナイメージファイルが作成できました。
このコンテナイメージの中では、編集の際にインストールしたvimが使用できます。
まとめ
今回は、SinguralityのSandboxの使い方について紹介しました。
今後もSingularityを扱うことがありそうなので、またブログでご紹介したいと思います。
アメリエフでは、バイオデータ解析やそのシステム・インフラ環境の開発に興味のあるエンジニア・リーダー候補を募集しています。
www.wantedly.com