From 992ff2c99dfb2ed2e076f0649a4ce15ecd2efccd Mon Sep 17 00:00:00 2001 From: Rob Wiederstein Date: Mon, 9 Mar 2026 15:01:48 -0400 Subject: [PATCH] Split Dockerfile into base + app layers for fast CI rebuilds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Base image (standrews-base) contains system deps and R packages. App Dockerfile is now just COPY + permissions — rebuilds in seconds. --- Dockerfile | 43 +++---------------------------------------- Dockerfile.base | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 40 deletions(-) create mode 100644 Dockerfile.base diff --git a/Dockerfile b/Dockerfile index 475ac80..f22ea41 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,46 +1,9 @@ -FROM rocker/shiny:4.5.2 +FROM standrews-base:latest -# 1. System dependencies (spatial stack required for sf) -RUN apt-get update && apt-get install -y --no-install-recommends \ - build-essential \ - cmake \ - curl \ - libabsl-dev \ - libcurl4-openssl-dev \ - libfontconfig1-dev \ - libfreetype6-dev \ - libfribidi-dev \ - libgdal-dev \ - libgeos-dev \ - libharfbuzz-dev \ - libicu-dev \ - libjpeg-dev \ - libpng-dev \ - libproj-dev \ - libssl-dev \ - libtiff5-dev \ - libudunits2-dev \ - libxml2-dev \ - pkg-config \ - proj-bin \ - proj-data \ - && rm -rf /var/lib/apt/lists/* - -WORKDIR /srv/shiny-server - -# 2. Copy lockfile first for layer caching -COPY renv.lock . - -# 3. Install packages into site-library (accessible to all users including shiny) -ENV RENV_PATHS_LIBRARY=/usr/local/lib/R/site-library - -RUN R -q -e "install.packages('renv', repos='https://cloud.r-project.org')" \ - && R -q -e "renv::restore(library='/usr/local/lib/R/site-library', prompt=FALSE)" - -# 4. Copy application code +# Copy application code COPY . . -# 5. Permissions +# Permissions RUN chown -R shiny:shiny /srv/shiny-server EXPOSE 3838 diff --git a/Dockerfile.base b/Dockerfile.base new file mode 100644 index 0000000..d31e917 --- /dev/null +++ b/Dockerfile.base @@ -0,0 +1,37 @@ +FROM rocker/shiny:4.5.2 + +# 1. System dependencies (spatial stack required for sf) +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + cmake \ + curl \ + libabsl-dev \ + libcurl4-openssl-dev \ + libfontconfig1-dev \ + libfreetype6-dev \ + libfribidi-dev \ + libgdal-dev \ + libgeos-dev \ + libharfbuzz-dev \ + libicu-dev \ + libjpeg-dev \ + libpng-dev \ + libproj-dev \ + libssl-dev \ + libtiff5-dev \ + libudunits2-dev \ + libxml2-dev \ + pkg-config \ + proj-bin \ + proj-data \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /srv/shiny-server + +# 2. Copy lockfile and restore R packages +COPY renv.lock . + +ENV RENV_PATHS_LIBRARY=/usr/local/lib/R/site-library + +RUN R -q -e "install.packages('renv', repos='https://cloud.r-project.org')" \ + && R -q -e "renv::restore(library='/usr/local/lib/R/site-library', prompt=FALSE)"