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]
El punto de partida: Entender qué problema resuelven los contenedores y cómo **Docker** se convirtió en el estándar.
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]
Conoce sus componentes principales: el **Docker Engine** (Daemon), el **CLI** (cliente de comandos) y el **Docker Hub** (registro de imágenes).
Instalar Docker DesktopLa **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
Este video te dará una visión sólida de los conceptos de la contenerización:
Aprende a crear tus propias imágenes personalizadas usando el archivo **Dockerfile**.
| Instrucción | Propósito | Ejemplo |
|---|---|---|
FROM | Define la imagen base (S.O.). | FROM node:18-alpine |
RUN | Ejecuta comandos durante la construcción. | RUN npm install |
COPY | Copia archivos locales a la imagen. | COPY . /app |
CMD | Comando a ejecutar al iniciar el contenedor. | CMD ["npm", "start"] |
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 BuildsCrea un Dockerfile que empaquete una página web estática sobre una imagen base de Nginx.
Práctica 2: Laboratorio de ConstrucciónHaz que tus contenedores se comuniquen y guarden datos de forma persistente. Esto es clave para cualquier aplicación real.
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
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
Define toda tu aplicación (web + base de datos + servicios) en un solo archivo docker-compose.yml y arráncala con un comando.
Para este ejercicio, necesitarás una estructura de archivos básica y el archivo docker-compose.yml:
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.
docker-compose.ymlDefine 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:
POSTGRES_DB, POSTGRES_USER, y POSTGRES_PASSWORD.docker compose up -d
docker ps
docker compose down
docker compose down -v
Lleva tus conocimientos a producción con Orquestación y Seguridad.
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 SeguridadEl estándar de la industria para la orquestación a gran escala. Conoce los conceptos: **Pods**, **Nodos** y **Deployments**.
🎥 Video: Fundamentos de K8sEl camino más rápido para aprender K8s es practicando en entornos reales en línea.
Laboratorio: Killercoda