最後編輯時間: 2022/07/15
micromamba 是 mamba-org 基於 mamba 所構建的小型 docker 鏡像, mamba 是建立在 conda 上的升級版包管理工具,最主要的性能優化是可以多線程運行 conda,可以同時在選定的所有 conda channel 搜尋並下載安裝包,解決了 conda 下載緩慢的問題。
- 軟體全面且更新及時:使用
apt
或npm
等包管理工具安裝特定領域軟體 (如生物資訊、深度學習) 經常會有找不到或是版本過舊的問題,而絕大多數的軟體都能在該領域的 conda channel 中找到最新版本。 - 簡單易用:在無法使用包管理工具安裝軟體的情況下,使用
Dockerfile
進行軟體源碼編譯經常會遇到各式各樣的報錯,而使用 micromamba 只需要寫好環境配置檔案就能輕鬆建構鏡像。 - 可移植性強: 利用
lockfile
建構鏡像可以確保每次生成的鏡像都相同,不會受到包管理資訊與軟體更新的影響。
以下皆以 qualimap=2.2
multiqc=1.12
為例:
- 只使用
Dockerfile
進行軟體安裝:FROM mambaorg/micromamba:bullseye-slim RUN micromamba install -y -n base -c bioconda -c conda-forge \ qualimap=2.2 \ multiqc=1.12 && \ micromamba clean -ay
- 使用 conda 環境配置檔案
env.yml
進行軟體安裝:
env.yml
name: base channels: - bioconda - conda-forge dependencies: - qualimap=2.2 - multiqc=1.12
Dockerfile
FROM mambaorg/micromamba:bullseye-slim COPY ./env.yml /tmp/env.yml RUN micromamba install -y -n base -f /tmp/env.yml && \ micromamba clean -ay
-
使用
mamba lock
生成lock
進行軟體安裝:(建議使用)
由於構建鏡像的時候會默認從官方的 conda channel 進行搜尋,經常因為網路連接問題導致鏡像構建失敗,在本地將env.yml
生成conda.lock
可以直接鎖定軟體集依賴包的安裝路徑,從本地環境所配置的 conda 鏡像源進行下載,以阿里雲為例:
conda.lock
生成指令,生成的檔可以參考 demomamba lock -k explicit -p linux-64 -f env.yml --lockfile conda-linux-64.lock
生成的
conda.lock
# Generated by conda-lock. # platform: linux-64 # input_hash: 1603af13519b5a780621a218ae69c5a2d7d7bd533e5b0cafffae79f63e5cf22b @EXPLICIT https://mirrors.aliyun.com/anaconda/cloud/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://mirrors.aliyun.com/anaconda/cloud/conda-forge/noarch/_r-mutex-1.0.1-anacondar_1.tar.bz2#19f9db5f4f1b7f5ef5f6d67207f25f38 https://mirrors.aliyun.com/anaconda/cloud/conda-forge/linux-64/ca-certificates-2022.6.15-ha878542_0.tar.bz2#c320890f77fd1d617fa876e0982002c2 https://mirrors.aliyun.com/anaconda/cloud/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2#0c96522c6bdaed4b1566d11387caaf45 https://mirrors.aliyun.com/anaconda/cloud/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2#34893075a5c9e55cdafac56607368fc6 https://mirrors.aliyun.com/anaconda/cloud/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb https://mirrors.aliyun.com/anaconda/cloud/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2#19410c3df09dfb12d1206132a1d357c5 ...
Dockerfile
FROM mambaorg/micromamba:bullseye-slim COPY ./conda-linux-64.lock /tmp/conda-linux-64.lock RUN micromamba install -y -n base -f /tmp/conda-linux-64.lock && \ micromamba clean -ay
-
在鏡像中建構多個 conda 環境:
配置多個env.yml
可以在鏡像中生成多個 conda 環境FROM mambaorg/micromamba:bullseye-slim COPY env1.yaml /tmp/env1.yaml COPY env2.yaml /tmp/env2.yaml RUN micromamba create -y -f /tmp/env1.yaml && \ micromamba create -y -f /tmp/env2.yaml && \ micromamba clean -ay
micromamba 讓我們可以用 mamba install 的方式建構鏡像,讓配置工作環境不再是難事。
最後分享一下我平常用來構建單一軟體鏡像並推送至指定倉庫的 Shell 腳本 docker_build.sh,有需要可以根據自己的需求使用修改。
環境需求:conda mamba conda-lock docker
用法:
bash docker_build.sh ${repository} ${project} ${software} ${version}
參考資料: