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

  1. 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"]
    
  2. Construir la imagen Docker:

    docker build -t my-node-app .
    
  3. 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

  1. 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"
    
  2. Ejecutar Docker Compose:

    docker-compose up
    

Ejercicio Práctico

Ejercicio: Crear y Ejecutar una Aplicación Python con Docker

  1. 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
      
  2. 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"]
    
  3. Construir y ejecutar la imagen Docker:

    docker build -t my-python-app .
    docker run -p 5000:5000 my-python-app
    

Solución del Ejercicio

  1. Construir la imagen Docker:

    docker build -t my-python-app .
    
  2. Ejecutar el contenedor:

    docker run -p 5000:5000 my-python-app
    
  3. Verificar la aplicación:

    • Abre un navegador web y navega a http://localhost:5000. Deberías ver el mensaje "Hello, Docker!".

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.

© Copyright 2024. Todos los derechos reservados