【问题标题】:How can I use mamba/conda packages in rstudio server如何在 rstudio 服务器中使用 mamba/conda 包
【发布时间】:2022-07-08 03:24:45
【问题描述】:

我正在尝试写入 dockerfile 以从 yaml 安装 conda 环境并从我的项目目录中运行 rstudio 服务器。我知道rstudio-server-conda,但希望能够使用单个 dockerfile 来创建图像。

Dockerfile

FROM rocker/rstudio-stable:devel

# Set working directory
WORKDIR ${HOME}

# Copy directory files to image 
COPY . ${HOME}

# Copy repo into ${HOME}, make user own $HOME
USER root

# Install base utilities
RUN apt-get update && \
    apt-get install -y wget && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# Install miniconda
ENV CONDA_DIR /opt/conda
RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \
    -O ~/miniconda.sh && \
     /bin/bash ~/miniconda.sh -b -p /opt/conda && \
     

# Put conda in path so we can use conda activate
ENV PATH=$CONDA_DIR/bin:$PATH

# Install umamba
RUN conda install -y micromamba -c conda-forge

# Create a conda environment from the environment yml
COPY --chown=$MAMBA_USER:$MAMBA_USER environment.yml /tmp/environment.yml
RUN micromamba create --yes --file /tmp/environment.yml && \
    micromamba  clean --all --yes

# Activate the conda environment
ARG MAMBA_DOCKERFILE_ACTIVATE=1 

RUN chown -R ${NB_USER} . ${HOME}
USER ${NB_USER}

# Settings required for conda+rstudio
ENV RSTUDIO_WHICH_R=${CONDAENV}/bin/R
ENV RETICULATE_PYTHON=${CONDAENV}/bin/python

RUN echo rsession-which-r=${RSTUDIO_WHICH_R} > /etc/rstudio/rserver.conf && \
    echo rsession-ld-library-path=${CONDAENV}/lib >> /etc/rstudio/rserver.conf && \
    echo "R_LIBS_USER=${CONDAENV}/lib/R/library" > /home/rstudio/.Renviron

## Run an install.R script, if it exists.
#RUN if [ -f /R/install.R ]; then R --quiet -f /R/install.R; fi

环境.yml

channels:
  - conda-forge
dependencies:
  - r-devtools=2.4.3=r41hc72bb7e_0
  - r-tidyverse=1.3.1=r41hc72bb7e_0

dockerfile 安装了 rstudio-server 和 micromamba,但是当我尝试读取环境 yaml 中导入的包时,找不到它们。

# build image
docker build --tag umamba-rstudio -f Dockerfile .
docker run --rm \
    -e ENV_NAME=environment \
    --mount type=bind,source="$(pwd)",destination=/home/rstudio \
    -p 127.0.0.1:8787:8787 \
    -e DISABLE_AUTH=true \
    umamba-rstudio

【问题讨论】:

    标签: r docker conda mamba


    【解决方案1】:

    我将介绍两种方法:

    1. 对现有文件进行最少的更改
    2. 导致改进的 Dockerfile 和映像的较大更改

    这里是改动很小的 Dockerfile,其中 3 行更改后附加了 # DIFF: ... cmets:

    FROM rocker/rstudio-stable:devel
    
    # Set working directory
    WORKDIR ${HOME}
    
    # Copy directory files to image 
    COPY . ${HOME}
    
    # Copy repo into ${HOME}, make user own $HOME
    USER root
    
    # Install base utilities
    RUN apt-get update && \
        apt-get install -y wget && \
        apt-get clean && \
        rm -rf /var/lib/apt/lists/*
    
    # Install miniconda
    ENV CONDA_DIR /opt/conda
    RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \
        -O ~/miniconda.sh && \
         /bin/bash ~/miniconda.sh -b -p /opt/conda # DIFF: removed " && \" from end of line
         
    
    # Put conda in path so we can use conda activate
    ENV PATH=$CONDA_DIR/bin:$PATH
    
    # Install umamba
    RUN conda install -y micromamba -c conda-forge
    
    # Create a conda environment from the environment yml
    ENV MAMBA_ROOT_PREFIX="/opt/conda" # DIFF: added this line
    COPY --chown=$MAMBA_USER:$MAMBA_USER environment.yml /tmp/environment.yml
    RUN micromamba install --prefix "$MAMBA_ROOT_PREFIX" --yes --file /tmp/environment.yml && \ # DIFF: added --prefix flag and argument
        micromamba  clean --all --yes
    
    # Activate the conda environment
    ARG MAMBA_DOCKERFILE_ACTIVATE=1 
    
    RUN chown -R ${NB_USER} . ${HOME}
    USER ${NB_USER}
    
    # Settings required for conda+rstudio
    ENV RSTUDIO_WHICH_R=${CONDAENV}/bin/R
    ENV RETICULATE_PYTHON=${CONDAENV}/bin/python
    
    RUN echo rsession-which-r=${RSTUDIO_WHICH_R} > /etc/rstudio/rserver.conf && \
        echo rsession-ld-library-path=${CONDAENV}/lib >> /etc/rstudio/rserver.conf && \
        echo "R_LIBS_USER=${CONDAENV}/lib/R/library" > /home/rstudio/.Renviron
    
    ## Run an install.R script, if it exists.
    #RUN if [ -f /R/install.R ]; then R --quiet -f /R/install.R; fi
    

    但我建议对 Dockerfile 进行更多实质性更改,以使 Dockerfile 更易于维护、减少构建时间并创建更小的镜像。此 Dockerfile 主要基于来自 mamba-org/micromamba-dockeradding micromamba to an existing Docker image 的指令(披露:我维护 mamba-org/micromamba-docker)。

    # bring in the micromamba image so we can copy files from it
    FROM mambaorg/micromamba:0.24.0 as micromamba
    
    # This is the image we are going add micromaba to:
    FROM rocker/rstudio-stable:devel
    
    ARG MAMBA_USER=root
    ARG MAMBA_USER_ID=0
    ARG MAMBA_USER_GID=0
    ENV MAMBA_USER=$MAMBA_USER
    ENV MAMBA_ROOT_PREFIX="/opt/conda"
    ENV MAMBA_EXE="/bin/micromamba"
    
    COPY --from=micromamba "$MAMBA_EXE" "$MAMBA_EXE"
    COPY --from=micromamba /usr/local/bin/_activate_current_env.sh /usr/local/bin/_activate_current_env.sh
    COPY --from=micromamba /usr/local/bin/_dockerfile_shell.sh /usr/local/bin/_dockerfile_shell.sh
    COPY --from=micromamba /usr/local/bin/_entrypoint.sh /usr/local/bin/_entrypoint.sh
    COPY --from=micromamba /usr/local/bin/_activate_current_env.sh /usr/local/bin/_activate_current_env.sh
    COPY --from=micromamba /usr/local/bin/_dockerfile_initialize_user_accounts.sh /usr/local/bin/_dockerfile_initialize_user_accounts.sh
    COPY --from=micromamba /usr/local/bin/_dockerfile_setup_root_prefix.sh /usr/local/bin/_dockerfile_setup_root_prefix.sh
    
    RUN /usr/local/bin/_dockerfile_initialize_user_accounts.sh && \
        /usr/local/bin/_dockerfile_setup_root_prefix.sh && \
        echo rsession-which-r=${RSTUDIO_WHICH_R} > /etc/rstudio/rserver.conf && \
        echo rsession-ld-library-path=${CONDAENV}/lib >> /etc/rstudio/rserver.conf && \
        echo "R_LIBS_USER=${CONDAENV}/lib/R/library" > /home/rstudio/.Renviron
    
    SHELL ["/usr/local/bin/_dockerfile_shell.sh"]
    
    ENTRYPOINT ["/usr/local/bin/_entrypoint.sh"]
    
    # populate the "base" conda environment:
    USER $MAMBA_USER
    COPY --chown=$MAMBA_USER:$MAMBA_USER environment.yml /tmp/environment.yml
    RUN micromamba install --yes --file /tmp/environment.yml && \
        micromamba  clean --all --yes
    
    WORKDIR ${HOME}
    
    # Copy directory files to image 
    COPY --chown=$MAMBA_USER_ID:$MAMBA_USER_GID . ${HOME}
    
    # Settings required for conda+rstudio
    ENV RSTUDIO_WHICH_R=${CONDAENV}/bin/R
    ENV RETICULATE_PYTHON=${CONDAENV}/bin/python
    
    CMD ["/init"]
    

    【讨论】:

      猜你喜欢
      • 2023-02-06
      • 1970-01-01
      • 2017-01-11
      • 2017-02-01
      • 2012-06-28
      • 2018-11-06
      • 2015-12-01
      • 2014-01-31
      • 1970-01-01
      相关资源
      最近更新 更多