Reto 6. "Contenedorizar" una aplicación usando Dockerfiles y despliegue

Clase 27 de 48Curso de Arquitectura de Aplicaciones con Docker 2018

Introducción

El crear un contenedor para una aplicación permite desplegarla con facilidad en cualquier sistema en la nube; desplegar consiste en empaquetar una aplicación y arrancar los servicios necesarios para que se ejecute en la nube.

En general, el despliegue de una aplicación necesitará varios pasos que comienzan con la transferencia de los fuentes y terminan con la ejecución de los diferentes servicios por orden. Docker permite llevar a cabo todos estos pasos de forma local para tener, como en un tupperware, todo lo necesario para que se ejecute a tu disposición.

Generar un Dockerfile consiste, pues, en crear dentro de un contenedor el entorno adecuado para que la aplicación se ejecute. En las diferentes órdenes se tendrá que tener en cuenta lo siguiente:

  • Elegir la imagen base adecuada.
  • Copiar todos los ficheros necesarios o descargar el repositorio completo y mediante un fichero .dockerignore evitar los ficheros que no se quieran incluir.
  • Establecer las variables de entorno que la ejecución del programa necesite.
  • Ejecutar las órdenes para instalar las dependencias del sistema operativo y las de la propia aplicación (bibliotecas).
  • Establecer una orden que será la que se ejecute cuando se haga docker run.

Este contenedor se usará para construir una imagen que se almacenará localmente y se podrá ejecutar tanto localmente como en cualquier otro lugar.

Tip

En vez de crear el Dockerfile directamente, se pueden ejecutar todas las órdenes en el sistema base y trasladarlas al Dockerfile cuando nos aseguremos de que está todo funcionando.

Posibles fuentes de problemas

Los servicios que no se ejecutan con privilegios de súper-usuario tienen que usar puertos por encima del 1024. Para las pruebas, usar siempre este tipo de puertos.

En algunas instalaciones de red local (por ejemplo, en mi universidad o en algunas instalaciones corporativas) puede haber problemas con el acceso a Internet desde dentro del contenedor. En ese caso habrá que cambiar la configuración y añadir DNSs externos.

Reto:

Contenedorizar el servicio web creado anteriormente y desplegarlo. Previamente habrá que:

  • Darse de alta en Docker Hub.
  • Darse de alta en sloppy.io, que da un período de prueba de un mes.

Una vez creado el contenedor, dar de alta el repositorio en Docker Hub para que se reconstruya automáticamente cada vez que se haga push en el repositorio de GitHub. Hacer trigger del build para que construya la primera versión; a partir de ese momento se hará automáticamente. Normalmente tarda alrededor de media hora.

Cuando esté listo en Docker Hub, crear un proyecto en sloppy.io y desplegar el contenedor, configurando desde la web el despliegue del mismo.