Introducción
En este módulo, exploraremos cómo los contenedores y Docker juegan un papel crucial en la implementación y despliegue de microservicios. Los contenedores permiten empaquetar una aplicación junto con todas sus dependencias en un entorno aislado, lo que facilita la portabilidad y la consistencia entre diferentes entornos de desarrollo, prueba y producción.
¿Qué es un Contenedor?
Un contenedor es una unidad estándar de software que empaqueta el código y todas sus dependencias para que la aplicación se ejecute de manera rápida y confiable en diferentes entornos informáticos. Los contenedores son ligeros y se ejecutan en el mismo sistema operativo del host, lo que los hace más eficientes que las máquinas virtuales.
Características Clave de los Contenedores:
- Aislamiento: Cada contenedor se ejecuta en su propio entorno aislado.
- Portabilidad: Los contenedores pueden ejecutarse en cualquier sistema que tenga un motor de contenedores compatible.
- Eficiencia: Los contenedores comparten el kernel del sistema operativo del host, lo que reduce la sobrecarga.
¿Qué es Docker?
Docker es una plataforma de contenedorización que permite a los desarrolladores empaquetar aplicaciones y sus dependencias en contenedores. Docker proporciona herramientas y un ecosistema para crear, desplegar y gestionar contenedores de manera eficiente.
Componentes Principales de Docker:
- Docker Engine: El motor de contenedores que permite la creación y ejecución de contenedores.
- Docker Hub: Un registro de imágenes de contenedores donde los desarrolladores pueden compartir y descargar imágenes.
- Docker Compose: Una herramienta para definir y ejecutar aplicaciones multi-contenedor.
Instalación de Docker
Instalación en Linux
# Actualizar el índice de paquetes sudo apt-get update # Instalar paquetes necesarios para usar el repositorio de Docker sudo apt-get install apt-transport-https ca-certificates curl software-properties-common # Añadir la clave GPG de Docker curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # Añadir el repositorio de Docker sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" # Actualizar el índice de paquetes nuevamente sudo apt-get update # Instalar Docker sudo apt-get install docker-ce # Verificar la instalación sudo systemctl status docker
Instalación en Windows y macOS
Para Windows y macOS, Docker proporciona instaladores que pueden descargarse desde Docker Desktop.
Creación de una Imagen Docker
Una imagen Docker es una plantilla inmutable que contiene todo lo necesario para ejecutar una aplicación, incluyendo el código, las bibliotecas, las variables de entorno y los archivos de configuración.
Ejemplo: Crear una Imagen Docker para una Aplicación Node.js
-
Crear un archivo
Dockerfile
:# Usar una imagen base de Node.js FROM node:14 # Establecer el directorio de trabajo en el contenedor WORKDIR /app # Copiar el archivo package.json y package-lock.json COPY package*.json ./ # Instalar las dependencias RUN npm install # Copiar el resto de la aplicación COPY . . # Exponer el puerto en el que la aplicación se ejecutará EXPOSE 3000 # Comando para ejecutar la aplicación CMD ["node", "app.js"]
-
Construir la imagen Docker:
docker build -t my-node-app .
-
Ejecutar un contenedor a partir de la imagen:
docker run -p 3000:3000 my-node-app
Docker Compose
Docker Compose es una herramienta para definir y ejecutar aplicaciones multi-contenedor. Con Docker Compose, puedes usar un archivo YAML para configurar los servicios de tu aplicación.
Ejemplo: Docker Compose para una Aplicación Node.js y MongoDB
-
Crear un archivo
docker-compose.yml
:version: '3' services: web: image: my-node-app build: . ports: - "3000:3000" depends_on: - db db: image: mongo ports: - "27017:27017"
-
Ejecutar Docker Compose:
docker-compose up
Ejercicio Práctico
Ejercicio: Crear y Ejecutar una Aplicación Python con Docker
-
Crear una aplicación simple en Python:
-
Crear un archivo
app.py
:from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, Docker!' if __name__ == '__main__': app.run(host='0.0.0.0')
-
Crear un archivo
requirements.txt
:Flask
-
-
Crear un archivo
Dockerfile
:# Usar una imagen base de Python FROM python:3.8-slim # Establecer el directorio de trabajo en el contenedor WORKDIR /app # Copiar el archivo requirements.txt COPY requirements.txt . # Instalar las dependencias RUN pip install -r requirements.txt # Copiar el resto de la aplicación COPY . . # Exponer el puerto en el que la aplicación se ejecutará EXPOSE 5000 # Comando para ejecutar la aplicación CMD ["python", "app.py"]
-
Construir y ejecutar la imagen Docker:
docker build -t my-python-app . docker run -p 5000:5000 my-python-app
Solución del Ejercicio
-
Construir la imagen Docker:
docker build -t my-python-app .
-
Ejecutar el contenedor:
docker run -p 5000:5000 my-python-app
-
Verificar la aplicación:
- Abre un navegador web y navega a
http://localhost:5000
. Deberías ver el mensaje "Hello, Docker!".
- Abre un navegador web y navega a
Conclusión
En esta sección, hemos aprendido sobre los contenedores y Docker, cómo instalar Docker, crear imágenes Docker y ejecutar contenedores. También exploramos Docker Compose para gestionar aplicaciones multi-contenedor. Estos conceptos son fundamentales para el despliegue y la orquestación de microservicios, que abordaremos en el siguiente módulo.
Curso de Microservicios
Módulo 1: Introducción a los Microservicios
- Conceptos Básicos de Microservicios
- Ventajas y Desventajas de los Microservicios
- Comparación con Arquitectura Monolítica
Módulo 2: Diseño de Microservicios
- Principios de Diseño de Microservicios
- Descomposición de Aplicaciones Monolíticas
- Definición de Bounded Contexts
Módulo 3: Comunicación entre Microservicios
Módulo 4: Implementación de Microservicios
- Elección de Tecnologías y Herramientas
- Desarrollo de un Microservicio Simple
- Gestión de Configuración