MINI TUTORIAL DOCKER – DÍA 6
Docker Compose básico: definir servicios en YAML
(un solo archivo para levantar/apagar todo un entorno)
1. Objetivo del día
Hoy aprenderás:
- qué es Docker Compose y por qué se usa tanto
- cómo crear un archivo
docker-compose.yml - los comandos básicos (
up,down,ps,logs) - cómo definir un servicio Nginx con un volumen y un puerto
- cómo levantar todo el entorno con un solo comando
- cómo modificar el YAML y aplicar cambios
- cómo interpretar las partes esenciales de un compose
Este día prepara el terreno para el proyecto final del Día 7.
2. ¿Qué es Docker Compose?
Docker Compose es una herramienta que permite:
👉 definir uno o varios contenedores en un archivo YAML
👉 y levantarlos con un solo comando.
Es perfecto para:
- entornos locales
- stacks pequeños (web + base de datos)
- pruebas
- desarrollo
- reproducir entornos rápidamente en cualquier máquina
No es lo mismo que Kubernetes, pero el hábito de definir infraestructuras en YAML empieza aquí.
3. Comprobar que tienes Docker Compose
Las versiones modernas de Docker ya incluyen “docker compose” integrado:
docker compose version
Si ves algo así:
Docker Compose version v2.x.x
Todo OK.
4. Crear un entorno simple con Nginx + volumen
Vamos a usar un solo servicio (Nginx) para aprender el formato.
Estructura recomendada:
miweb/
├─ docker-compose.yml
└─ html/
└─ index.html
4.1 Crear la carpeta de trabajo
mkdir miweb
cd miweb
mkdir html
echo "<h1>Hola desde Docker Compose</h1>" > html/index.html
4.2 Archivo docker-compose.yml
Crea el archivo:
nano docker-compose.yml
Contenido:
version: "3.9"
services:
web:
image: nginx
container_name: miweb-nginx
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html:ro
restart: unless-stopped
Explicación clara:
image: nginx→ usa imagen oficialports: "8080:80"→ navegador → host:8080 → contenedor:80./html:/usr/share/nginx/html:ro→ HTML local montado dentro de nginx:ro→ read-only (opcional, buena práctica)restart: unless-stopped→ reinicio automático si falla
5. Levantar el stack
En la carpeta donde está el YAML:
docker compose up -d
Esto hace:
- crea red interna para el stack
- crea contenedor
- aplica puertos
- monta volumen
- arranca Nginx
Comprobar:
docker compose ps
6. Comprobar en el navegador
👉 Abre http://localhost:8080
Deberías ver:
Hola desde Docker Compose
7. Ver logs desde Compose
docker compose logs
docker compose logs -f
-f sigue los logs en tiempo real.
8. Parar y borrar el stack
Para detenerlo:
docker compose down
Todo se elimina excepto los archivos locales (html/).
👉 OJO:
“down” NO borra volúmenes persistentes a menos que añadas -v:
docker compose down -v
9. Modificar el YAML y aplicar cambios
Ejemplo: cambiar el puerto a 8081:
Edita:
ports:
- "8081:80"
Aplicar cambios:
docker compose down
docker compose up -d
Docker recreará el contenedor automáticamente.
10. Añadir un segundo servicio (opcional del día 6)
Aunque nos lo guardaremos para el Día 7 (stack real),
puedes ver qué fácil es añadir un segundo servicio:
services:
web:
image: nginx
ports:
- "8080:80"
cliente:
image: alpine
command: ["sleep", "3600"]
Y ambos estarían en la misma red interna generada por Compose.
Pero esto lo usaremos mañana en el proyecto final.
11. Práctica guiada del Día 6 (30–40 min)
✔ 1) Crear la estructura:
mkdir miweb
cd miweb
mkdir html
echo "<h1>Hola Compose</h1>" > html/index.html
✔ 2) Crear el compose file:
nano docker-compose.yml
Pegar el YAML del ejemplo.
✔ 3) Levantar:
docker compose up -d
✔ 4) Comprobar:
docker compose ps
Navegador → http://localhost:8080
✔ 5) Ver logs:
docker compose logs
✔ 6) Apagar y limpiar:
docker compose down
✔ 7) Cambiar el puerto (8081) y volver a levantar
docker compose up -d
12. Checklist del Día 6
- Entiendo qué es Docker Compose
- Sé crear un archivo
docker-compose.yml - Sé levantar un stack con
docker compose up -d - Sé ver logs con
docker compose logs - Sé parar y eliminar contenedores con
docker compose down - He servido una web simple usando compose
Si está marcado → Día 6 completado ✔
Día 7 de Docker
proyecto final: un stack real con Docker Compose (WordPress + MariaDB o Uptime Kuma).
