soappp9527 / micromamba_chinese_tutorial

a simple introduction about micromamba usage

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Micromamba:基於 conda 的懶人 docker 鏡像包裝法

太長不想看

最後編輯時間: 2022/07/15

Micromamba 是什麼?

micromamba 是 mamba-org 基於 mamba 所構建的小型 docker 鏡像, mamba 是建立在 conda 上的升級版包管理工具,最主要的性能優化是可以多線程運行 conda,可以同時在選定的所有 conda channel 搜尋並下載安裝包,解決了 conda 下載緩慢的問題。

為什麼要用 Micromamba 建構鏡像?

  1. 軟體全面且更新及時:使用 aptnpm 等包管理工具安裝特定領域軟體 (如生物資訊、深度學習) 經常會有找不到或是版本過舊的問題,而絕大多數的軟體都能在該領域的 conda channel 中找到最新版本。
  2. 簡單易用:在無法使用包管理工具安裝軟體的情況下,使用 Dockerfile 進行軟體源碼編譯經常會遇到各式各樣的報錯,而使用 micromamba 只需要寫好環境配置檔案就能輕鬆建構鏡像。
  3. 可移植性強: 利用 lockfile 建構鏡像可以確保每次生成的鏡像都相同,不會受到包管理資訊與軟體更新的影響。

基本使用

以下皆以 qualimap=2.2 multiqc=1.12 為例:

  1. 只使用 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
    
  2. 使用 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
    

進階使用

  1. 使用 mamba lock 生成 lock 進行軟體安裝:(建議使用)
    由於構建鏡像的時候會默認從官方的 conda channel 進行搜尋,經常因為網路連接問題導致鏡像構建失敗,在本地將 env.yml 生成 conda.lock 可以直接鎖定軟體集依賴包的安裝路徑,從本地環境所配置的 conda 鏡像源進行下載,以阿里雲為例:
    conda.lock 生成指令,生成的檔可以參考 demo

    mamba 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
    
  2. 在鏡像中建構多個 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}

參考資料:

  1. micromamba document
  2. micromamba dockerhub
  3. conda-lock document

About

a simple introduction about micromamba usage


Languages

Language:Shell 100.0%