アメリエフの技術ブログ

Amelieff Staff Blog

SandboxでSingularityコンテナを編集する方法

こんにちは、解析システム開発所属の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