Extending images

Rocker images provide a few utility functions to streamline this process, including the littler scripts which provide a concise syntax for installing packages in Dockerfiles, e.g.

RUN install2.r pkg1 pgk2 pkg3 ...

By setting the --error option, you can make the docker build command also fail if the package installation fails. And, you can also set the --skipinstalled option to skip installing installed packages and the --ncpu -1 option to maximize parallelism of the installation.

RUN install2.r --error --skipinstalled --ncpus -1 \
    pkg1 \
    pgk2 \
    pkg3 \
    ...

Users writing their own Dockerfiles are encouraged to follow the same practices as the Rocker Project, such as the Dockerfile Best Practices, the use of automated builds, and when appropriate, versioned tags.

Note that users can also preserve changes to Rocker images that they have modified interactively using the docker commit mechanism, which creates a new binary image which can be pushed back to a personal account on the Docker Hub. While this is sometimes convenient, we encourage users to consider writing Dockerfiles instead whenever possible, as this creates a more transparent and reproducible mechanism to accomplish the same thing.

Users should understand how the Dockerfile on which Rocker images are built works before writing new Dockerfiles that extend the images we provide. See here for the source code that defines the rocker/r-ver image that many Rocker images are based on.

An example is changing the default repos used by the container. This could be changed back to CRAN repos by adding the following line to an appropriate place in your Dockerfile:

RUN echo 'options(repos = c(CRAN = "https://cloud.r-project.org"))' >> ${R_HOME}/etc/Rprofile.site