From 6ef9ce75a3b2d716effadffa92fb16526274f1f8 Mon Sep 17 00:00:00 2001 From: Joe Licata Date: Sat, 27 Dec 2025 17:44:20 +0000 Subject: [PATCH] refactor: Consolidate R package installations in Dockerfile - Combined multiple RUN commands into a single layer for R package installations to optimize build time and reduce image size. - Updated package repository to use Posit Package Manager for improved package management. --- docker/r.Dockerfile | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/docker/r.Dockerfile b/docker/r.Dockerfile index c8e724a..34e4cb9 100644 --- a/docker/r.Dockerfile +++ b/docker/r.Dockerfile @@ -19,17 +19,16 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ libx11-dev \ && rm -rf /var/lib/apt/lists/* -# Layer 1: Core data manipulation packages (most stable) -RUN R -e "install.packages(c('dplyr', 'tidyr', 'data.table', 'magrittr'), repos='https://cran.rstudio.com/', dependencies=TRUE)" - -# Layer 2: Visualization packages (including Cairo for graphics output) -RUN R -e "install.packages(c('ggplot2', 'lattice', 'scales', 'Cairo'), repos='https://cran.rstudio.com/', dependencies=TRUE)" - -# Layer 3: Data I/O packages -RUN R -e "install.packages(c('readr', 'readxl', 'writexl', 'jsonlite', 'xml2'), repos='https://cran.rstudio.com/', dependencies=TRUE)" - -# Layer 4: Statistics and utilities -RUN R -e "install.packages(c('stats', 'MASS', 'survival', 'lubridate', 'stringr', 'glue'), repos='https://cran.rstudio.com/', dependencies=TRUE)" +# Install all R packages in a single layer using Posit Package Manager +# - amd64: Downloads pre-compiled binaries (~5 min) +# - arm64: Compiles from source but single layer avoids redundant dependency builds +RUN R -e "options(repos = c(CRAN = 'https://packagemanager.posit.co/cran/__linux__/bookworm/latest')); \ + install.packages(c( \ + 'dplyr', 'tidyr', 'data.table', 'magrittr', \ + 'ggplot2', 'lattice', 'scales', 'Cairo', \ + 'readr', 'readxl', 'writexl', 'jsonlite', 'xml2', \ + 'MASS', 'survival', 'lubridate', 'stringr', 'glue' \ + ))" # Create non-root user RUN groupadd -g 1001 codeuser && \