Tutorial: ¿Como levantar una imagen de docker con un Shiny App en EC2 de AWS?
Introducción
Un buen Data Scientist debe saber cómo presentar la información que extrajo de un dataset determinado. Una buena presentación puede incluir varias herramientas; una de ellas, y que puede llegar a dejar bien al presentador con la audiencia, es levantar su página de resultados en una página web para explicar con libertad. En este tutorial voy a detallar el paso a paso de cómo levantar una aplicación de Shiny en un servidor de Amazon EC2. En este caso, usaremos docker también para el proceso, aunque no es la única alternativa.
Prerrequisitos
- Tener una cuenta de AWS (registrate aquí).
- Crear la cuenta requiere una tarjeta, pero solo efectúa un cobro de US$1 que lo regresa después de unos días.
- Tener una cuenta en Docker Hub (registrate aquí).
- Tener Docker o Docker Desktop instalado y corriendo el computador (descargalo aquí).
- Tener un Shiny App programado.
Tutorial
Crear y subir la imagen
El primer paso es crear un Dockerfile dentro de la carpeta donde están los archivos necesarios (entiéndase el ui.r, server.r, la data que se usar y otros archivos de soporte). Este Dockerfile tendrá los siguientes elementos adentro:
FROM rocker/r-base:latest
Empezamos estableciendo los elementos del ambiente que vamos a crear en la imagen del Docker
LABEL maintainer="PERSONA1 <examplemail1@gmail.com>"
LABEL maintainer="PERSONA2 <examplemail1@gmail.com>"
Detalles de los usuarios que armaron la imagen.
RUN apt-get update && apt-get install -y --no-install-recommends \
sudo \
libcurl4-gnutls-dev \
libcairo2-dev \
libxt-dev \
libssl-dev \
libssh2-1-dev \
&& rm -rf /var/lib/apt/lists/*
Estos son comandos de Linux para la imagen virtual del contenedor. En la imagen vamos a instalar Linux para correr nuestra imagen y estos comandos van a configurar la imagen con lo necesario de dicho sistema operativo
RUN install.r shiny
RUN install.r plotly
RUN install.r dplyr
RUN install.r DT
Estos comandos instalan las librerías necesarias para correr nuestra imagen. Si tu imagen requiere más librerías hay que poner una línea por cada librería que se necesite. El formato es: install.r <libreria>.
RUN echo "local(options(shiny.port = 3838, shiny.host = '0.0.0.0'))" > /usr/lib/R/etc/Rprofile.site
Este comando define dónde va a correr nuestra imagen en la computadora que la albergue y en el contenedor. El puerto de salida del contenedor es el 3838, en cualquier dirección IP (0.0.0.0). Terminamos definiendo de donde se va a extraer.
RUN addgroup --system app \
&& adduser --system --ingroup app app
Definición de los usuarios que correrán en la imagen.
WORKDIR /home/app
COPY /. /home/app
Definimos la dirección donde vamos a subir todo en la imagen y después vamos a copiar todo lo que esté en la dirección donde esté el Dockerfile. en la dirección definida arriba.
RUN chown app:app -R /home/app
USER app
EXPOSE 3838
Iniciamos el usuario en el contenedor y exponemos el puerto del contenedor.
CMD ["R", "-e", "shiny::runApp('/home/app')"]
Esta línea se ejecuta en el CMD y es la creación del contenedor.
Algo así queda todo el código:
Para verificar que tu imagen fue creada correctamente, puedes correr los siguientes comandos desde el CMD. El 4000 es el puerto de conexión con tu máquina y el 3838 el del contenedor.
docker build -t NOMBRE_DE_TU_IMAGEN .
docker run -p 4000:3838 NOMBRE_DE_TU_IMAGEN
Subir la imagen a Docker Hub
Primero, verifica que el Docker Desktop tenga la sesión iniciada para poder hacer el push de forma correcta y fácil.
Crear servidor EC2
Cuando ingreses a tu sesión del AWS, busca la opción de EC2. Después, en el menú dale click a Lanzar Instancia.

Comments
Post a Comment