
the Default app when a new “Shiny Web App …” is created in RStudio): This is the Dockerfile that describes our Shiny App (i.e. The Dockerfile contains the schematics of a Docker container, that is it is used to call a base image and define and customisations that need to be made for the specific application to run correctly. A running image is called a container, which is operating by receiving, processing and sending information to the client or other containers. A Docker image is a functioning snapshot of the blueprint. I will be using the words image and container throughout this article. For the example presented here, Docker was installed on an Ubuntu 18.04 OS in a Virtual Box the same approach will be used for other apps running on an AWS EC2 instance. Docker-compose will also need to be installed by following these instructions here. Getting Startedĭocker can be installed following the instructions here, making sure to also follow the post-installation instructions here. All the code here, plus some basic web-server configuration, can be found at this Telethon Kids GitHub repository.

In this article, I will go through the steps that I took to deploy an app developed in Shiny onto a fully-functional web server.

One of the benefits of deploying a containerised Shiny App is that each new instance will run in its own R session. For example, if one user starts a process that takes 10 seconds to complete, all other users will need to wait until that process has completed before any other tasks can be processed.

When multiple instances/users attempt to start a Shiny App at the same time, only a single R session is initiated on the serving machine. Docker images are easily distributed and, because they are self-contained, will operate on any other system that has Docker installed, include servers. Each container has a blueprint written in its Dockerfile that describes all of the operating parameters including operating system and package dependencies/requirements. containers) that each operate within their own virtual environment. If you haven’t heard of Docker, it is a system that allows projects to be split into discrete units (i.e.
