|
| 1 | +FROM rocker/binder:4.4.1 AS base |
| 2 | + |
| 3 | +ARG BUILD_DATE |
| 4 | + |
| 5 | +ARG APP_VERSION |
| 6 | + |
| 7 | + |
| 8 | + |
| 9 | +LABEL org.label-schema.build-date=$BUILD_DATE |
| 10 | + |
| 11 | +LABEL version=$APP_VERSION |
| 12 | + |
| 13 | +WORKDIR /app |
| 14 | + |
| 15 | +USER root |
| 16 | + |
| 17 | +COPY README.md README.md |
| 18 | + |
| 19 | +ENV DEBIAN_FRONTEND=noninteractive \ |
| 20 | + RENV_PATHS_ROOT=/app/renv \ |
| 21 | + RENV_PATHS_LIBRARY=/app/renv/library \ |
| 22 | + RENV_PATHS_CACHE=/app/renv/.cache \ |
| 23 | + RENV_CONFIG_REPOS_OVERRIDE=https://cloud.r-project.org \ |
| 24 | + JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/bin/java |
| 25 | + |
| 26 | +RUN apt-get update \ |
| 27 | + && apt-get install -y --no-install-recommends openjdk-17-jdk pandoc libsodium-dev graphviz \ |
| 28 | + libglpk-dev cmake libnng-dev libmbedtls-dev openssh-client liblzma-dev libpq-dev libcurl4-openssl-dev \ |
| 29 | + libbz2-dev software-properties-common build-essential libmagic-dev libmagick++-dev curl g++ make \ |
| 30 | + libharfbuzz-dev libfribidi-dev \ |
| 31 | + && apt-get clean \ |
| 32 | + && rm -rf /var/lib/apt/lists/* \ |
| 33 | + && rm -rf /tmp/downloaded_packages \ |
| 34 | + && install2.r -e -n -1 --skipinstalled remotes \ |
| 35 | + && R -e 'remotes::install_version("renv","1.0.7", repos = "https://cran.rstudio.com/")' \ |
| 36 | + && R -e 'remotes::install_version("pak","0.7.2", repos = "https://cran.rstudio.com/")' \ |
| 37 | + && R CMD javareconf -e |
| 38 | + |
| 39 | +FROM base AS r_builder |
| 40 | + |
| 41 | +COPY renv.lock .renvignore .Rprofile ./ |
| 42 | + |
| 43 | +COPY renv /app/renv |
| 44 | + |
| 45 | +RUN mkdir -p $RENV_PATHS_LIBRARY \ |
| 46 | + && mkdir -p $RENV_PATHS_CACHE \ |
| 47 | + && R -e \ |
| 48 | + "options(renv.config.pak.enabled=TRUE, renv.consent=TRUE); renv::restore()" |
| 49 | + |
| 50 | +FROM base AS python_builder |
| 51 | + |
| 52 | +ENV POETRY_NO_INTERACTION=1 \ |
| 53 | + POETRY_VIRTUALENVS_IN_PROJECT=1 \ |
| 54 | + POETRY_VIRTUALENVS_CREATE=1 \ |
| 55 | + POETRY_CACHE_DIR=/tmp/poetry_cache \ |
| 56 | + PATH="/root/.local/bin:$PATH" |
| 57 | + |
| 58 | +COPY pyproject.toml poetry.lock ./ |
| 59 | + |
| 60 | +RUN curl -sSL https://install.python-poetry.org | python3 -\ |
| 61 | + && poetry install --no-root --with dev \ |
| 62 | + && rm -rf $POETRY_CACHE_DIR \ |
| 63 | + && curl -sSL https://install.python-poetry.org | python3 - --uninstall |
| 64 | + |
| 65 | +FROM base AS runtime |
| 66 | + |
| 67 | +ENV R_LIBS=/app/renv/library/R-4.4/x86_64-pc-linux-gnu \ |
| 68 | + R_LIBS_SITE=/app/renv/library/linux-ubuntu-jammy/R-4.4/x86_64-pc-linux-gnu \ |
| 69 | + VIRTUAL_ENV=/app/.venv \ |
| 70 | + PATH="/app/.venv/bin:$PATH" |
| 71 | + |
| 72 | +COPY --chown=${NB_USER}:${NB_USER} ./app . |
| 73 | + |
| 74 | +COPY --from=r_builder --chown=${NB_USER}:${NB_USER} /app . |
| 75 | + |
| 76 | +COPY --from=python_builder --chown=${NB_USER}:${NB_USER} ${VIRTUAL_ENV} ${VIRTUAL_ENV} |
| 77 | + |
| 78 | +RUN chown -R ${NB_USER}:${NB_USER} /app \ |
| 79 | + && chmod -R 755 /app \ |
| 80 | + && R -e "cmdstanr::install_cmdstan()" \ |
| 81 | + && echo '.libPaths(c("/app/renv/library/linux-ubuntu-jammy/R-4.4/x86_64-pc-linux-gnu", .libPaths()))' \ |
| 82 | + >> /usr/local/lib/R/etc/Rprofile.site |
| 83 | + |
| 84 | +USER ${NB_USER} |
| 85 | + |
| 86 | +EXPOSE 8787 8787 |
0 commit comments