【问题标题】:How to create Dockerfile with R + Anaconda3 + non-root User如何使用 R + Anaconda3 + 非 root 用户创建 Dockerfile
【发布时间】:2022-01-14 10:51:51
【问题描述】:

我需要创建一个模拟正常工作区的 Dockerfile。 我们有一个虚拟机来训练模型。 我们使用 R 和 Python3。

我想在不更改代码库的情况下自动化一些流程。 例如~ 必须指向 /home/

最大的问题是 docker 中的 Anaconda3。因为每个 RUN 都是一个独立的登录。

【问题讨论】:

    标签: python r docker dockerfile anaconda3


    【解决方案1】:

    我的回答依据:https://github.com/xychelsea/anaconda3-docker/blob/main/Dockerfile

    我已经创建了自己的迷你 R 包安装程序:

    install_r_packages.sh

    #!/bin/bash
    
    input="r-requirements.txt"
    Rscript -e "install.packages('remotes')"
    IFS='='
    while IFS= read -r line; do
      read -r package version <<<$line
      package=$(echo "$package" | sed 's/ *$//g')
      version=$(echo "$version" | sed 's/ *$//g')
      if ! [[ ($package =~ ^#.*) || (-z $package) ]]; then
        Rscript -e "remotes::install_version('$package', version = '$version')"
      fi
    done <$input
    

    r-要求

    # packages for rmarkdown
    htmltools=0.5.2
    jsonlite=1.7.2
    ...
    rmarkdown=2.11
    
    # more packages
    ...
    

    Dockerfile

    FROM debian:bullseye
    
    RUN apt-get update
    
    # install R
    RUN apt-get install -y r-base r-base-dev libatlas3-base r-recommended libssl-dev openssl \
        libcurl4-openssl-dev libfontconfig1-dev libxml2-dev xml2 pandoc lua5.3 clang
    ENV ARROW_S3=ON \
        LIBARROW_MINIMAL=false \
        LIBARROW_BINARY=true \
        RSTUDIO_PANDOC=/usr/lib/rstudio-server/bin/pandoc \
        TZ=Etc/UTC
    COPY r-requirements.txt .
    COPY scripts/install_r_packages.sh scripts/install_r_packages.sh
    RUN bash scripts/install_r_packages.sh
    
    # create user
    ENV REPORT_USER="reporter"
    ENV PROJECT_HOME=/home/${REPORT_USER}/<project>
    RUN useradd -ms /bin/bash ${REPORT_USER} \
        && mkdir /data \
        && mkdir /opt/mlflow \
        && chown -R ${REPORT_USER}:${REPORT_USER} /data \
        && chown -R ${REPORT_USER}:${REPORT_USER} /opt/mlflow
    
    # copy project files
    WORKDIR ${PROJECT_HOME}
    COPY src src
    ... bla bla bla ...
    COPY requirements.txt .
    RUN chown -R ${REPORT_USER}:${REPORT_USER} ${PROJECT_HOME}
    
    # Install python Anaconda env
    ENV ANACONDA_PATH="/opt/anaconda3"
    ENV PATH=${ANACONDA_PATH}/bin:${PATH}
    ENV ANACONDA_INSTALLER=Anaconda3-2021.11-Linux-x86_64.sh
    RUN mkdir ${ANACONDA_PATH} \
        && chown -R ${REPORT_USER}:${REPORT_USER} ${ANACONDA_PATH}
    RUN apt-get install -y wget
    USER ${REPORT_USER}
    RUN wget https://repo.anaconda.com/archive/${ANACONDA_INSTALLER} \
        && /bin/bash ${ANACONDA_INSTALLER} -b -u -p ${ANACONDA_PATH} \
        && chown -R ${REPORT_USER} ${ANACONDA_PATH} \
        && rm -rvf ~/${ANACONDA_INSTALLER}.sh \
        && echo ". ${ANACONDA_PATH}/etc/profile.d/conda.sh" >> ~/.bashrc \
        && echo "conda activate base" >> ~/.bashrc
    RUN pip3 install --upgrade pip \
        && pip3 install -r requirements.txt \
        && pip3 install awscli
    
    # run training and report
    ENV PYTHONPATH=/home/${REPORT_USER}/<project> \
        MLFLOW_TRACKING_URI=... \
        MLFLOW_EXPERIMENT_NAME=...
    
    CMD dvc config core.no_scm true \
        && dvc repro
    

    【讨论】:

      猜你喜欢
      • 2017-04-30
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2019-12-21
      相关资源
      最近更新 更多