| |
| FROM rocker/r2u:22.04 |
| WORKDIR /code |
| ARG DEBIAN_FRONTEND=noninteractive |
| |
| |
| |
| RUN apt-get update -y && apt-get install -y --no-install-recommends \ |
| wget bzip2 git unzip ca-certificates locales tzdata \ |
| build-essential gfortran \ |
| libcurl4-openssl-dev libssl-dev libxml2-dev libgit2-dev \ |
| libopenblas-dev liblapack-dev \ |
| python3 python3-pip \ |
| && rm -rf /var/lib/apt/lists/* |
| ENV LC_ALL=C.UTF-8 LANG=C.UTF-8 HF_HUB_DISABLE_TELEMETRY=1 |
| |
| |
| |
| RUN pip3 install --no-cache-dir pandas earthengine-api |
| |
| |
| |
| ARG APT_R_PKGS="\ |
| r-cran-shiny r-cran-dplyr r-cran-dt \ |
| r-cran-data.table r-cran-foreach r-cran-doparallel" |
| RUN set -eux; \ |
| apt-get update -y; \ |
| for pkg in $APT_R_PKGS; do \ |
| if apt-cache show "$pkg" >/dev/null 2>&1; then \ |
| echo "Installing $pkg via apt ..."; \ |
| apt-get install -y --no-install-recommends "$pkg" || true; \ |
| fi; \ |
| done; \ |
| rm -rf /var/lib/apt/lists/* |
| |
| |
| |
| RUN Rscript - <<'RSCRIPT' |
| options(Ncpus = parallel::detectCores()) |
| cran <- "https://cloud.r-project.org" |
| req <- c( |
| "shiny", "dplyr", "DT", "data.table", |
| "bslib", "shinyWidgets", "xgboost", |
| "reticulate", "future", "future.apply" |
| ) |
| installed <- rownames(installed.packages()) |
| need <- setdiff(req, installed) |
| if (length(need)) { |
| if (!requireNamespace("pak", quietly = TRUE)) { |
| install.packages("pak", repos = "https://r-lib.github.io/p/pak/stable") |
| } |
| ok <- tryCatch({ |
| pak::pak(need) |
| TRUE |
| }, error = function(e) FALSE) |
| if (!ok) install.packages(need, repos = cran) |
| } |
| RSCRIPT |
| |
| |
| |
| COPY . /code/ |
| |
| |
| |
| EXPOSE 7860 |
| CMD ["R", "--quiet", "-e", "port <- as.integer(Sys.getenv('PORT', '7860')); shiny::runApp('/code', host='0.0.0.0', port=port)"] |
|
|