在单一容器中将conda环境容器化

时间:2019-02-13 20:22:32

标签: conda hpc singularity-container

我遇到过许多实例,将容器中的conda环境进行容器化以实现长期可重复性确实很有帮助。由于我通常在高性能计算系统中运行,出于安​​全原因,它们必须是奇异容器。该怎么办?

3 个答案:

答案 0 :(得分:3)

首先,您需要为特定的conda环境获取环境YML。

conda activate your_env
conda env export > environment.yml

通常,您将按以下方式使用它:

conda env create -f environment.yml

但是,使用奇点容器化您的构建会稍微复杂一些。

以下是示例奇点配方(与“ environment.yml”位于同一目录中的名为“奇点”的文件):

Bootstrap: docker

From: continuumio/miniconda3

%files
    environment.yml

%environment
    PATH=/opt/conda/envs/$(head -1 environment.yml | cut -d' ' -f2)/bin:$PATH

%post
    echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc
    echo "source activate $(head -1 environment.yml | cut -d' ' -f2)" > ~/.bashrc
    /opt/conda/bin/conda env create -f environment.yml

%runscript
    exec "$@"

使用

构建
sudo singularity build conda.simg Singularity

现在,您将拥有一个使用conda环境中的库的可正常运行的容器,该库可以在安装了Singularity的任何位置运行!

示例:

singularity run conda.simg conda -h

singularity run conda.simg ipython

答案 1 :(得分:2)

我发现它很有用,因为您可以安装一个装有anaconda3环境的容器,并随时随地为不同的项目轻松创建新的环境。

这很简单,我将逐步介绍它:

  1. 通过以下定义文件在本地计算机中创建容器(您可以随意命名。请注意,有些行是可以避免的):

    Bootstrap: library
    From: ubuntu:18.04
    Stage: build
    
    %post
    
    apt-get update && apt-get -y upgrade
    apt-get -y install \
    build-essential \
    wget \
    bzip2 \
    ca-certificates \
    libglib2.0-0 \
    libxext6 \
    libsm6 \
    libxrender1 \
    git
    rm -rf /var/lib/apt/lists/*
    apt-get clean
    #Installing Anaconda 3 
    wget -c https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh
    /bin/bash Anaconda3-2020.02-Linux-x86_64.sh -bfp /usr/local
    #Conda configuration of channels from .condarc file
    conda config --file /.condarc --add channels defaults
    conda config --file /.condarc --add channels conda-forge
    conda update conda
    #List installed environments
    conda list
    
  2. 然后,为了构建容器,请运行以下命令:

    sudo singularity build ContainerName.sif YourDefineFile.def
    
  3. 现在您可以创建conda env(可以使用常见方法,也可以通过YML文件创建它,这是从现有环境中导出的文件)

    例如,我用一个YML文件来做: 首先,您需要按照以下步骤进入.sif容器:

     Singularity shell YourContainerName.sif 
    

    然后:

     conda env create --name envname --file=YourEnvironments.yml
    
  4. 因此,创建环境后,可以使用以下命令将其激活(同样,首先需要跳入容器):

    singularity shell YourContainer.Sif
    
    source activate YourEnvName
    

答案 2 :(得分:1)

使用 conda-pack 可以容器化现有的 conda 环境,而无需从 environment.yml 重新创建它们。当环境不再解析时,或者在没有 conda 的情况下将软件包安装到环境中时,这特别有用,例如使用R的{​​{1}}。

  1. 打包环境

    install.packages
  2. 创建此 conda-pack -n <MY_ENV> -o packed_environment.tar.gz 文件

    Singularity
  3. 构建镜像

    
    Bootstrap: docker
    
    From: continuumio/miniconda3
    
    %files
        packed_environment.tar.gz /packed_environment.tar.gz
    
    %post
        tar xvzf /packed_environment.tar.gz -C /opt/conda
        conda-unpack
        rm /packed_environment.tar.gz
    

有关更多详细信息,包括 Docker/Podman 变体,请查看我的 grst/containerize-conda 存储库。

限制:该方法可能仅适用于源环境位于 linux x64 机器上的情况。