Bioconda のコンテナイメージをベースにツールのインストールと、AWS CLI をインストールしてみる

2022.04.21

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 しか提供されていませんでした。

Awscli :: Anaconda.org

念のため確認したのですが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 を作成しました。

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コマンド不要なパッケージとキャッシュを削除を追加しました。

Dockerfile

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 へアクセスできる環境だと悩みが減りますね。

参考