首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在rstudio服务器中使用mamba/conda包

如何在rstudio服务器中使用mamba/conda包
EN

Stack Overflow用户
提问于 2022-05-11 21:46:50
回答 1查看 524关注 0票数 1

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

Dockerfile

代码语言:javascript
运行
复制
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

environment.yml

代码语言:javascript
运行
复制
channels:
  - conda-forge
dependencies:
  - r-devtools=2.4.3=r41hc72bb7e_0
  - r-tidyverse=1.3.1=r41hc72bb7e_0

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

代码语言:javascript
运行
复制
# build image
docker build --tag umamba-rstudio -f Dockerfile .
代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

发布于 2022-07-07 19:24:45

我将讨论两种方法:

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

下面是更改最少的Dockerfile,其中3行更改后的行都附加了# DIFF: ...注释:

代码语言:javascript
运行
复制
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很大程度上是基于mamba-org/micromamba-docker on 在现有的Docker映像中添加micromamba的说明(公开:我维护mamba-org/micromamba-docker)。

代码语言:javascript
运行
复制
# 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"]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72207945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档