Como dockerizar tu aplicación

Como dockerizar tu aplicación

Desde el desarrollo, la colaboración con otros y hasta correr tu código en producción, los contenedores brindan muchos beneficios para tu aplicación. El proceso de "dockerizar" una aplicación no siempre es el mismo, va a depender de cómo funciona la aplicación y cómo interactúa con otros elementos o servicios como ser: bases de datos, APIs, almacenamiento, etc. Pero los lineamientos y consideraciones siempre son los mismos.
En este artículo te mostraré los puntos más importantes a considerar al momento de "dockerizar" tu aplicación además de algunos ejemplos que te ayudarán a comprenderlo mejor.

Consideraciones

1. Usa la imagen oficial del fabricante.

En el Docker Hub existe una imagen oficial para casi cualquier lenguaje de programación, tecnología, CMS, etc. Estas imágenes son mantenidas por el fabricante lo que nos garantiza que siempre cumpliran con estandares, parches y herramientas sugeridas por el mismo así que siempre que esté disponible utilizala.

2. Compilar o instalar dependencias.

Ya sean librerías del sistema operativo, paquetes, modules, plugins y todo lo necesario para que tu aplicación se ejecute sin problemas asegurate de instalarlo en el contenedor. Si codificas en un lenguaje compilado como Java o Golang asegurate de compilar tu código antes de copiarlo al contenedor.
Este concepto también aplica a configuraciones.

3. Copia al contenedor solo lo necesario para correr la aplicación.

Por portabilidad es importante que el contenedor sea lo más liviano posible. Asegurate de copiar únicamente lo que es requerido por tu aplicación para correr. Unit tests, archivos de prueba, Dockerfile, jenkinsfile y cualquier otro archivo que no sea requerido al momento de ejecutar el servicio queda excluido.
El uso del archivo .dockerignore puede ayudarte a lograr este objetivo si lo consideras necesario.

4. Asegúrate de correr y mantener corriendo la aplicación.

Los contenedores se inician con la ejecución de un comando y se cierran automáticamente cuando el mismo comando finaliza. Asegurate siempre de correr tu aplicación con un comando que se mantenga ejecutando de forma indefinida para que tu contenedor también corra de la misma forma.

Ejemplos.

A continuación te mostraré un ejemplo de cómo "dockerizar" una aplicación en NodeJS (lenguaje interpretado) y una aplicación en Java (lenguaje compilado). Recuerda que debes adaptarlo a la funcionalidad, puertos, dependencias, etc de tu propia aplicación.

Lenguaje Interpretado.

Dockerfile

FROM node:10

# Crea un directorio para tu aplicación
WORKDIR /usr/src/app_name

# Instala las dependencias
COPY package*.json ./
RUN npm install

# Copia el código de tu aplicación
COPY . .

# Expone el puerto en el cual corre tu aplicación
EXPOSE 8080

# Ejecuta tu aplicación.
CMD [ "node", "index.js" ]

Archivo .dockerignore

node_modules
npm-debug.log

Esto va a prevenir que se agreguen tus módulos y logs locales al contenedor. Asegurate de agregar todo lo que consideres que debe de ser excluido.

Crea la imagen

docker build -t <your-username>/node-app-name .

Ejecuta el contenedor

docker run -p 8080:8080 -d <your-username>/node-app-name

Lenguaje Compilado.

Dockerfile

FROM openjdk:11-jre

# Crea un directorio para tu aplicación
WORKDIR /usr/app_name

# Copia el archivo JAR de tu aplicación
COPY app.jar .

# Expone el puerto en el cual corre tu aplicación
EXPOSE 8080

# Ejecuta tu aplicación.
CMD [ "java", "-jar", “app.jar” ]

Crea la imagen

docker build -t <your-username>/node-app-name .

Ejecuta el contenedor

docker run -p 8080:8080 -d <your-username>/node-app-name

No olvides dejarme tus preguntas o sugerencias en la sección de comentarios.


Share Tweet Send
0 Comentarios
Cargando...
You've successfully subscribed to Douglas Barahona
Great! Next, complete checkout for full access to Douglas Barahona
Welcome back! You've successfully signed in
Success! Your account is fully activated, you now have access to all content.