Docker-maosuacal

Docker – Agilizando el desarrollo de software

Qué es docker?

Docker es como una caja mágica que hace que las aplicaciones funcionen en cualquier computadora sin problemas, facilitando la vida de los desarrolladores y asegurando que todo funcione como debería. Cuando todos los desarrolladores han instalado y configurado docker en sus máquinas nos aseguran que la frase «tan raro, en mi máquina si funciona» 🙂 , no se repetirá cuando hagan entrega de sus desarrollos.

Docker es una tecnología que permite empaquetar aplicaciones y todas sus partes, incluyendo bibliotecas, configuraciones y versiones, en contenedores virtuales. Estos contenedores son unidades autónomas que pueden ejecutarse de manera consistente en diferentes sistemas operativos y entornos de desarrollo, lo que facilita la implementación y escalabilidad de aplicaciones; es por ello que si el desarrollador tiene en su máquina un linux Debian y el Tester Windows, con solo desplegar la imagen entregada por el desarrollador en el equipo del tester ya tendrá un ambiente exactamente igual. Docker simplifica la gestión de la infraestructura, acelerando el desarrollo la entrega de software, y se utiliza ampliamente en la creación de aplicaciones modernas y la gestión de entornos de desarrollo.

MAOSUACAL

Imagen tomada de: 
https://colaboratorio.net/davidochobits/sysadmin/2017/docker-una-guia-no-convencional/

Hace unos años se hablaba de máquinas virtuales, pero la diferencia básicamente que hay con un contenedor Docker es que en la máquina virtual se tiene el Kernel (Atraves de él se comunican las aplicaciones con el hardware) y las aplicaciones; lo que hace interesante al uso de Docker es que él solo virtualiza las aplicaciones y utiliza el kernel sobre el cual está corriendo; esto claramente lo hace mucho mas liviano que una maquina virtual.

Comandos básicos

A continuación se presenta un listado de comandos básicos para la gestión de docker:

  1. docker run: Ejecuta un contenedor a partir de una imagen. Ejemplo: docker run -d –name mi_contenedor nginx
  2. docker ps: Muestra una lista de contenedores en ejecución. Ejemplo: docker ps
  3. docker stop: Detiene un contenedor en ejecución. Ejemplo: docker stop mi_contenedor
  4. docker pull: Descarga una imagen desde Docker Hub. Ejemplo: docker pull ubuntu
  5. docker build: Crea una imagen a partir de un Dockerfile. Ejemplo: docker build -t mi_imagen .
  6. docker images: Lista las imágenes disponibles en el sistema. Ejemplo: docker images
  7. docker logs: Muestra los logs de un contenedor. Ejemplo: docker logs mi_contenedor
  8. docker exec: Ejecuta un comando dentro de un contenedor en ejecución. Ejemplo: docker exec -it mi_contenedor bash
  9. docker rm: Elimina un contenedor. Ejemplo: docker rm mi_contenedor
  10. docker rmi: Elimina una imagen. Ejemplo: docker rmi mi_imagen

Qué es un Dockerfile?

Un Dockerfile es un archivo de texto que contiene instrucciones para construir una imagen de Docker. Describe cómo se debe configurar un contenedor, incluyendo qué sistema operativo base, software y configuraciones se deben incluir. Al construir una imagen desde un Dockerfile, se crea un contenedor listo para ejecutar una aplicación específica.

Este es un ejemplo de un Dockerfile para un API desarrollado en node que se conectará con una base de datos mongodb.

# Usa la imagen de node en su versión 18
FROM node:18

# En la siguiente linea se indica el lugar donde va a estar el codigo dentro del contenedor

RUN mkdir -p /home/app

# Copia los archivos de la aplicación al contenedor. El punto indica el lugar de donde debe copiar los archivos y el home/app es el destino
COPY . /home/app

# Aquí se indica el puerto en el que se va a exponer la aplicación.

EXPOSE 3000

# Define el comando de inicio
CMD [«node», «/home/app/index.js»]

Qué es docker compose

Docker Compose es una herramienta que permite definir y gestionar aplicaciones multi-contenedor en un archivo YAML, simplificando la configuración y orquestación de contenedores.

Este es un ejemplo de tres contenedores que he configurado el día de hoy en un archivo docker-compose.yml :

Este es un despliegue de 3 contenedores:

 1. Es una base de datos PostgreSQL en su versión 16.0

2. El siguiente contenedor tiene pgadmin, el cual permite hacer gestión de la base de datos desde una interfaz gráfica.

3. El último contenedor tiene una aplicación utilizada para visualización de data, similar a powerBI o tableau, llamada Metabase (https://www.metabase.com/)

Con este archivo y un par de enters se tiene implementada una plataforma para BI básica. 

Conclusión

Cuando se habla de agilidad en proyectos, se asume velocidad para desarrollar y generar entregables de manera rápida. De esto hay algo cierto, y es que ya hay herramientas que hacen más fácil el desarrollo de software y el mismo despliegue. Docker es una de ellas, facilitando las entregas, los despliegues, el uso de infraestructura y la posible automatización del ciclo de vida del software.

 

@maosuacal

Recomendación

Les recomiendo este video, para que aprendan lo necesario de lo que es docker.