These notes were made whilst going through Microsoft’s Build a containerized web application with Docker workshop, as well other online resources relevant to R. These additional resources were
Colin Fay’s An introduction to Docker for R Users.
Oliver Guggenbuhlühl’s Running your R script in Docker.
Oliver Guggenbuhlühl’s How to Dockerize ShinyApps.
David Neuzerling’s Determining System Dependencies for R Projects.
Online resources for Docker include
Docker Desktop for Windows - required for running Docker containers locally.
The Rocker Project - Docker Containers for the R Enviroment.
Online resources for publishing Docker images and containers
Dockerfile taken from Oliver Guggenbuhlühl’s How to Dockerize ShinyApps blog,
# Shiny base image from rocker
FROM rocker/shiny:latest
# system libraries of general use
## install debian packages
RUN apt-get update -qq && apt-get -y --no-install-recommends install \
\
libxml2-dev \
libcario2-dev \
libsqlite3-dev \
libmariadbd-dev \
libpq-dev \
libssh2-1-dev \
unixodbc-dev \
libcurl4-openssl-dev
libssl-dev
## update system libaries
RUN apt-get update && \
-y && \
apt-get upgrade
apt-get clean
# copy necessary files
## app folder
COPY /<app directory> ./app
## renv.lock file
COPY /<app directory>/renv.lock ./renv.lock
# install renv and restore packages
RUN Rscript -e 'install.packages("renv")'
RUN Rscript -e 'renv:consent(provided = TRUE)'
RUN Rscript -e 'renv::restore()'
# expose port
EXPOSE 3838
# run app on container start
CMD ["R", "-e", "shiny::runApp('/app', host = '0.0.0.0', port = 3838)"]
# -p Map container port to host port
# -d Run container in background
# --name Name to give to container
docker run -d -p <host_port_number>:<container_port_number> <image_id>
docker run -d -p <host_port_number>:<container_port_number> --name <container_name> <image_name>
docker run -d --rm -p 3838:3838 <my-shinyapp-image>
# -a Include stopped containers in list
docker container ls -a