¡Contenedores con Gemini! 🚀

Tu ruta de **cero a experto** en el mundo de los contenedores y Docker. Aprendizaje interactivo y práctico.

[Imagen: Contenedor con logo de Docker sobre fondo de nube]

💡 Fundamentos y Conceptos Básicos

El punto de partida: Entender qué problema resuelven los contenedores y cómo **Docker** se convirtió en el estándar.

Máquinas Virtuales vs. Contenedores

Las **VMs** virtualizan el hardware; los **Contenedores** virtualizan el S.O., haciéndolos más ligeros y rápidos. ¡Menos peso, más velocidad!

[Diagrama comparativo de capas de abstracción]

Docker: El Motor

Conoce sus componentes principales: el **Docker Engine** (Daemon), el **CLI** (cliente de comandos) y el **Docker Hub** (registro de imágenes).

Instalar Docker Desktop

Imágenes y Contenedores

La **Imagen** es la plantilla estática (la receta); el **Contenedor** es la instancia en ejecución (el pastel). Empieza con el primer comando:

docker run hello-world
Práctica 1: Play with Docker

📺 Tutorial Completo de Cero a Experto

Este video te dará una visión sólida de los conceptos de la contenerización:

🏗️ Construcción y Gestión de Imágenes

Aprende a crear tus propias imágenes personalizadas usando el archivo **Dockerfile**.

📘 Anatomía del Dockerfile (Instrucciones Clave)

InstrucciónPropósitoEjemplo
FROMDefine la imagen base (S.O.).FROM node:18-alpine
RUNEjecuta comandos durante la construcción.RUN npm install
COPYCopia archivos locales a la imagen.COPY . /app
CMDComando a ejecutar al iniciar el contenedor.CMD ["npm", "start"]

🧱 El Proceso de Construcción

Para crear una imagen, se utiliza el comando docker build:

docker build -t mi-app-web:v1 . 

💡 **Mejor Práctica:** Usa Multi-Stage Builds para reducir el tamaño de tus imágenes finales y evitar incluir herramientas de desarrollo innecesarias.

🎥 Video: Multi-Stage Builds

🛠️ Ejercicio Interactivo 2: Construye tu Web

Crea un Dockerfile que empaquete una página web estática sobre una imagen base de Nginx.

Práctica 2: Laboratorio de Construcción

🔗 Redes y Almacenamiento

Haz que tus contenedores se comuniquen y guarden datos de forma persistente. Esto es clave para cualquier aplicación real.

Volúmenes para Persistencia

La forma recomendada para datos permanentes (ej. bases de datos). Los datos persisten incluso si el contenedor es eliminado.

Comando: docker volume create nombre_volumen

Redes y Puertos

Los contenedores en la misma red bridge se comunican por nombre. Usa la opción -p para exponer un puerto al host.

Ejemplo: -p 8080:3000

Docker Compose

Define toda tu aplicación (web + base de datos + servicios) en un solo archivo docker-compose.yml y arráncala con un comando.

Documentación de Compose

🛠️ Ejercicio Interactivo 3: Aplicación Multi-Contenedor (Web + PostgreSQL)

Para este ejercicio, necesitarás una estructura de archivos básica y el archivo docker-compose.yml:

📁 Estructura del Proyecto

mi-proyecto-compose/
├── .env          <-- Contiene las claves (contraseñas, usuarios) de forma segura.
├── Dockerfile    <-- Para construir la imagen de tu aplicación web (servicio 'web').
├── app.js        <-- Archivo de tu aplicación (ejemplo en Node.js).
└── docker-compose.yml  <-- El archivo de orquestación de servicios.
        

📜 Contenido Clave: docker-compose.yml

Define dos servicios (`web` y `db`) y un volumen persistente (`db-data`):

version: '3.8'
services:
  web:
    build: .
    ports:
      - "8080:3000"
    environment:
      DATABASE_HOST: db # Comunicación entre contenedores
    volumes:
      - .:/usr/src/app
  db:
    image: postgres:14-alpine
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} # Clave leída desde el .env
    volumes:
      - db-data:/var/lib/postgresql/data # Persistencia de datos
volumes:
  db-data:

🚀 Comandos del Laboratorio

  1. **Preparación:** Crea el archivo **`.env`** con las variables POSTGRES_DB, POSTGRES_USER, y POSTGRES_PASSWORD.
  2. **Inicio:** Levanta y ejecuta todo el entorno en segundo plano:
    docker compose up -d
  3. **Verificación:** Asegúrate de que ambos contenedores (`web` y `db`) están corriendo:
    docker ps
  4. **Limpieza:** Para detener y eliminar solo los contenedores y la red, manteniendo el volumen de datos (para no perder la BD):
    docker compose down
  5. **Limpieza Completa:** Para eliminar *todo*, incluyendo el volumen de datos (usar con cuidado):
    docker compose down -v
Práctica 3: Laboratorio de Compose

🌟 Temas Avanzados y Siguientes Pasos

Lleva tus conocimientos a producción con Orquestación y Seguridad.

Seguridad Esencial

Asegura tus imágenes: evita el usuario `root` y usa imágenes base mínimas (Alpine). Nunca almacenes secretos en el Dockerfile.

Guía de Seguridad

Introducción a Kubernetes (K8s)

El estándar de la industria para la orquestación a gran escala. Conoce los conceptos: **Pods**, **Nodos** y **Deployments**.

🎥 Video: Fundamentos de K8s

Plataformas de Práctica K8s

El camino más rápido para aprender K8s es practicando en entornos reales en línea.

Laboratorio: Killercoda