Dockerイメージ作成時のベースイメージを作って、それをpullするようにすると捗ります。試してみます。
ここではcondaコマンドを使えるようにminiocndaを導入するイメージを作成します。それからこのイメージをベースに新しいイメージを作成します。
1:ベースイメージの作成
base imageのDockerfileを書きます。Minicondaの3.9インストーラー(python3.9)をダウンロードしています。1つ目のRUN命令ではapt-getコマンドで依存んライブラリやコマンドを導入しています。サイズを減らすため--no-install-recommendsもつけていましたが、不安定になったので消しています。2つ目のRUN命令で自分がよく使うmambaコマンドも使えるようにしていますが、不要なら2つ目のRUN命令は消して下さい。
#################################################
FROM ubuntu:latest
MAINTAINER Kazuma Uesaka
LABEL description="miniconda3 Base image"
#################################################
ENV PATH ~/miniconda3/bin:$PATH
ENV DEBIAN_FRONTEND=noninteractive
RUN apt update -y && apt install -y \
build-essential \
bzip2 \
wget \
cmake \
git \
gcc \
make && apt clean
RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-py39_4.9.2-Linux-x86_64.sh -O ~/Miniconda.sh && \
/bin/bash ~/Miniconda.sh -b -p ~/miniconda3 && \
rm ~/Miniconda.sh && \
echo ". ~/miniconda3/etc/profile.d/conda.sh" >> ~/.bashrc && \
echo "conda activate base" >> ~/.bashrc
RUN ~/miniconda3/bin/conda install -c conda-forge mamba -yq && ~/miniconda3/bin/mamba clean -a -y
Shell ["/bin/bash", "-c"]
WORKDIR /home
#################################################
Dockerfileという名前で空のディレクトリ(*1)に保存します。
準備できたら、"kazumax/miniconda"でビルドします。TAGは1.0とします(*2)。
docker build -t kazumax/miniconda:1.0 .
ビルドが終わるまで5分ほどかかりました。
image名とサイズを確認します。
> docker images
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kazumax/miniconda 1.0 0041b05dbf0e 43 seconds ago 841MB
TAGは1.0、ubuntuをベースイメージに色々導入しているため、サイズは841MBもありました。軽量化するならarpile.linuxなど使うのも手ですが(Dockerfile例)、後々苦労したくないので、ここではubuntuにしました。
(option) :イメージを公開する
ローカルマシン専用のベースイメージなら不要ですが、他のマシンから利用したり、他のユーザーに利用してもらうには、作成したimageをdockerhubにpushして公開する必要があります。
#自分のアカウントにログインする
docker login
#imageをアップロードする
docker push kazumax/miniconda:1.0
#他の環境でpullする。
docker pull kazumax/miniconda:1.0
2:作成したイメージをベースに、新しいイメージを作る
ベースイメージができたので、 これをベースにして他のツールを導入するDockerfileを書きます。 ここではmambaを使ってsamtoolsを入れるDockerfileを書いています。RUN命令1つだけのシンプルなものです。
#################################################
FROM kazumax/miniconda:1.0
MAINTAINER xxx
LABEL description="test image"
#################################################
RUN mamba install -c bioconda -qy samtools && mamba clean -ay
#################################################
Dockerfileとしてカレントに保存します。
ビルドします。
docker build -t test .
image名とサイズを確認します。
> docker images
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test latest 725f0fe94e16 3 seconds ago 879MB
kazumax/miniconda 1.0 0041b05dbf0e 13 minutes ago 841MB
あとはdocker runで起動すれば使えます。
2021 5/5 追記
1、マルチステージビルド
2、MinicondaからMiniforgeかMambaforgeに変える。
参考
*1
*2
docker buildコマンドには、レポジトリのDockerfileを直接指定したり、CPUやメモリのリソース使用量を制限するオプションもあります(*2)。
*3
*4
関連