dockerでsingularityのimage file (.sif) を作成したときのメモ書きです.
Motivation Link to heading
ローカルPCでsingularity buildしたい (docker image to singularity image) けど,ローカルPCの環境を汚したくない,という状況です.
Method Link to heading
まず,もととなるdocker imageを用意します.例えばこれをfoo:latestとします. 一般的な方法 (コンテナ内でsingularityをインストールし,そこからfoo:latestを変換する) でbuildしようとしても, コンテナ内からdocker imageを見ることができないため不可能です.
そこで,Docker out of Docker (DooD) という方法でbuildしていきます (実際にはコンテナからコンテナを操作しているわけではないので,この用語は適切でないかもしれません). やり方としては簡単で,ホストのdocker.sockをマウントして実行することで,ホストのdocker imageをコンテナに共有することができます. 以下のようなshellscriptを作成し,保存します. 今回はquay.ioからimageを持ってきました.Tagsを見ることで, 他のsingularityのバージョンなどに適宜変更できます.
|
|
このshellscriptを次のように実行します.
|
|
結果として,カレントディレクトリに${NAME}.sifが生成されます. あとはGPUサーバに上げるなりして使うことができます.
感想として,.sifファイルは.defファイルから作成するよりもdocker imageから作成する方が簡単でした (単に慣れの問題かもしれません). セキュリティの問題でremoteサーバでdockerが使えず,singularityが推奨されることが多いので, このように簡単にimageファイルが作成できるのはうれしいです.
追記(2021/07/28) Link to heading
公式のgithubレポジトリに同様のものを発見しました (docker2singularity) こっちのほうが使うときに楽でいいかもしれません