簡體   English   中英

如何使用 R + Anaconda3 + 非 root 用戶創建 Dockerfile

[英]How to create Dockerfile with R + Anaconda3 + non-root User

我需要創建一個模擬正常工作區的 Dockerfile。 我們有一個虛擬機來訓練模型。 我們使用 R 和 Python3。

我想在不更改代碼庫的情況下自動化一些流程。 例如 ~ 必須指向 /home/<some user>

最大的問題是 docker 中的 Anaconda3。 因為每個 RUN 都是一個獨立的登錄。

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

我創建了自己的迷你 R package 安裝程序:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM