Bioconda のコンテナイメージをベースにツールのインストールと、AWS CLI をインストールしてみる
BioContainers Communityで公開されているイメージと AWS CLI を使いたいときの最良の方法を探しています。目的は AWS Batch で計算実行前後にaws s3
コマンドを使い S3バケットから必要データのダウンロード、S3 バケットへ計算結果のアップロードをしたいです。考えられるパターンを手を動かして試していき良い点、悪い点を確認します。
本記事ではBioconda コンテナイメージをベースに必要なツールをセットアップするのに合わせて AWS CLI をインストールを試してみます。
- Biocontainers で提供されていないイメージ(ツール)を使いたいとき
- Biocontainers で提供されていたけど AWS CLI 入れてみようとしたら都合が悪かった
- ツールは Salmonを例に試しました
確認結果
- Bioconda をベースに
conda install
でツールをインストールするため汎用的なコンテナ作りができる - Bioconda をベースとするがゆえにイメージサイズが大きい
- Salmon をインストールしたイメージは3.3GBとなった
- AWS CLI v2 のインストールもできる
準備
Salmon、AWS CLIともにバージョン指定したDockerfileを作成し、AWS CLI を同梱した Salmon コンテナイメージをビルドします。
Bioconda バージョン指定
bioconda/bioconda-utils-build-envからタグを確認します。
latest
タグ以外は何を意味する理解できませんでした。バージョンが固定されたタグを指定したかったのですがlatest
タグを利用します。
Salmon バージョン指定
GitHub の Releases からバージョンを確認します。
現時点で最新のv1.8.0
を利用します。
AWS CLI 最新バージョン確認
CHANGELOGからバージョンを確認します。
現時点で最新の2.5.6
バージョンを利用します。
やってみた
conda で AWS CLI のインストールは?
conda
を使うならconda install -c conda-forge awscli=[version]
で AWS CLI をインストールするのが手っ取り早いと思ったんのですが、残念ながらAWS CLI v1 しか提供されていませんでした。
念のため確認したのですが1.22.98
が一番新しいバージョンでした。
# conda search awscli -c conda-forge ... snip ... awscli 1.22.98 py37h9c2f6ca_0 conda-forge awscli 1.22.98 py38h578d9bd_0 conda-forge awscli 1.22.98 py39hf3d152e_0 conda-forge
AWS CLI v2 をインストールするため必要なファイルをダウンロードしてインストールすることにしました。
Bioconda ベースのコンテナ
bioconda イメージをベースに Salmon のインストールと、AWS CLI インストールファイルをダウンロードし展開、インストール実行する Dockerfile を作成しました。
FROM bioconda/bioconda-utils-build-env:latest RUN yum install -y \ unzip RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64-2.5.6.zip" -o "/tmp/awscliv2.zip" && unzip /tmp/awscliv2.zip -d /tmp && /tmp/aws/install RUN conda install salmon=1.8.0 -c conda-forge
コンテナを起動します。AWS CLI を実行できるイメージを作成できました。
[root@d76e22e47abc /]# aws --version aws-cli/2.5.6 Python/3.9.11 Linux/5.10.104-linuxkit exe/x86_64.centos.6 prompt/off [root@d76e22e47abc /]# salmon -v salmon 1.8.0
課題はビルドしたイメージが4GBもある巨大なイメージになったことです。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE bioconda-salmon v1 e8bb63d0cd53 53 minutes ago 4.04GB bioconda/bioconda-utils-build-env latest 4e2f75949c7f 13 months ago 2.69GB
ダイエットを試みる
マルチステージビルドで AWS CLI インストール準備段階を分割、conda clean -all
コマンド不要なパッケージとキャッシュを削除を追加しました。
FROM debian:stable as builder WORKDIR /tmp RUN apt-get update && apt-get install -y \ curl \ unzip RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64-2.5.6.zip" -o "awscliv2.zip" RUN unzip awscliv2.zip FROM bioconda/bioconda-utils-build-env:latest COPY --from=builder /tmp/aws /tmp/aws RUN /tmp/aws/install RUN conda install salmon=1.8.0 -c conda-forge -y && conda clean --all -y
コンテナを起動します。AWS CLI, Salmon のインストールは問題ありません。
[root@7fbc35e424cc /]# aws --version aws-cli/2.5.6 Python/3.9.11 Linux/5.10.104-linuxkit exe/x86_64.centos.6 prompt/off [root@7fbc35e424cc /]# salmon -v salmon 1.8.0
800MB削減に成功しました。ですが、あいかわらず3GB超と巨大なイメージサイズです。Bioconda のベースイメージが2.7GBあるためダイエットにも限界を感じます。Bioconda の恩恵を受ける引き換えにイメージサイズは大きくなりますね。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE bioconda-salmon v2 ffa44ae19161 About a minute ago 3.25GB bioconda-salmon v1 e8bb63d0cd53 About an hour ago 4.04GB bioconda/bioconda-utils-build-env latest 4e2f75949c7f 13 months ago 2.69GB quay.io/biocontainers/salmon 1.8.0--h7e5ed60_1 040af160014a 5 weeks ago 257MB
一方で biocontainers/salmon から提供されている Salmon コンテナのイメージサイズは257MB です。Dockerfile を見つけられていないのですが前回確認した感じだと busybox だったため軽量です。 AWS CLI を同梱するために Bioconda で自作する価値はあるのか考えさせられます。
まとめ
Bioconda のイメージを利用して自作コンテナ作成は簡単にできます。ですが、イメージサイズが巨大になります。Bioconatainers で提供されている先人の知恵で軽量化された上にアップロード済みのイメージを利用する方が効率的かもしれません。Biocontainers でお目当てのコンテナが提供されていないときは自作する価値は十分にあるとは思います。
おわりに
Biocontainers 提供のイメージはそのままに利用し、別の手段で S3 とデータ転送する手段を用意するのが最適かもしれないと改めて思いました。FSx for Lustre をマウントし透過的に S3 へアクセスできる環境だと悩みが減りますね。