Adding to this point, the multiple install.packages layers have not only no advantage, but a HUEGE disadvantage: Each RUN adds a layer that inflates the container size.
Hi everyone,
I am trying to install ggpubr and ggplot2 in the Docker container rocker/r-base from Docker Hub. Ggplot2 gets installed properly but ggpubr does not get installed. I tried to check for the package dependencies and to explicitly install them, but ggpubr is not the final image. This is my Dockerfile
# Install system dependencies
RUN apt-get update && apt-get install -y \
libcurl4-openssl-dev \
libssl-dev \
libxml2-dev \
libgit2-dev \
libcairo2-dev \
build-essential \
libxt-dev \
libgsl-dev \
libharfbuzz-dev \
libfribidi-dev \
libfreetype6-dev \
libpng-dev \
libtiff5-dev \
libjpeg-dev \
libfontconfig1-dev \
&& rm -rf /var/lib/apt/lists/*
# Install R dependencies
RUN R -e "install.packages('remotes', repos='https://cloud.r-project.org/')"
# Install devtools using remotes
RUN R -e "remotes::install_cran('devtools')"
# **Create a valid R package inside the container**
RUN R -e "usethis::create_package('/usr/local/src/rplotres', open = FALSE)"
# Install ggplot2 separately
RUN R -e "install.packages('ggplot2', repos='https://cloud.r-project.org/', dependencies = TRUE)"
#Install dependencies for ggpubr
RUN R -e "install.packages(c('ggrepel', 'grid', 'ggsci', 'stats', 'utils', 'tidyr', 'purr', 'dplyr','cowplot', 'ggsignif','scales', 'gridExtra', 'glue', 'polynom', 'rlang', 'rstatix', 'tibble', 'magrittr', 'grDevices', 'knitr', 'RColorBrewer', 'gtable', 'testthat'), repos='https://cloud.r-project.org/')"
###Check Development Tools: lines to ensure everything needed is there to building packages
RUN apt-get update && apt-get install -y build-essential
# Install ggpubr separately
RUN R -e "install.packages('ggpubr', repos='https://cloud.r-project.org/', dependencies = TRUE)"
# Install the R package
RUN R -e "devtools::install('/usr/local/src/rplotres')"
# Set the command to run R by default
CMD ["R"]
I am not really sure how to proceed from here. I would really like to use ggpubr. Is there any other docker container that has ggpubr already installed? rocker/tidyverse does not either.
Any suggestions?
Thanks.
Giulia
1 answer
You should install non-R dependencies such as the build-essentials first, and then all the R packages in a single go. The install.packages() command solves the dependency tree so there is no advantage splitting this over so many RUNs. What is the problem? Show the errors.
I recommend generally for R the Bioconductor image which is based on Rocker with (almost) all non-R dependencies for Bioconductor packages preinstalled and container binaries are available for Bioc so many things install fast. bioconductor/bioconductor_docker:RELEASE_3_20 is the latest as of 02/2025.
In the r-base for example cmake is missing which is not covered by the build-essentials so you need to install via apt.
Log in to answer this question.