1. Qué es Docker Compose
Docker Compose es un orquestador local. Permite definir varios contenedores y sus relaciones en un único archivo docker-compose.yml. Es como dirigir una pequeña obra de teatro donde cada servicio tiene su papel, y Compose levanta el escenario entero con un comando.
Puntos clave:
- Escritura declarativa: defines lo que quieres, Compose lo monta.
- Multi-servicio: web, base de datos, caches, workers… todo junto.
- Entornos replicables: mismo resultado en cualquier máquina.
2. Componentes del archivo docker-compose.yml
Cada service es un contenedor.
Los atributos más habituales:
image:Imagen a usar.build:Directorio donde está el Dockerfile.ports:Mapeo de puertosHOST:CONTAINER.volumes:Persistencia o montajes locales.environment:Variables de entorno.depends_on:Orden de arranque.networks:Redes personalizadas.
Ejemplo:
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: mysql:8
environment:
- MYSQL_ROOT_PASSWORD=atriosecreto
volumes:
- dbdata:/var/lib/mysql
volumes:
dbdata:
3. Comandos esenciales de Docker Compose
docker compose up→ Levanta todo (añade-dpara modo demonio).docker compose down→ Apaga y borra contenedores, redes.docker compose ps→ Ver contenedores activos del proyecto.docker compose logs -f→ Logs en directo.docker compose exec <servicio> <cmd>→ Ejecutar dentro del contenedor.docker compose build→ Construir imágenes indicadas.
4. Redes y volúmenes en Compose
Compose crea:
- Una red por defecto para todos los servicios.
- Volúmenes declarados que sobreviven a los
up/down.
Beneficio práctico: un contenedor puede llamar a otro simplemente por su nombre de servicio, por ejemplo:
mysql://usuario:pass@db:3306
5. Buenas prácticas
- Evitar meter passwords en el YAML → usar
.env. - Un contenedor, un rol.
- Mantener separado
docker-compose.ymlydocker-compose.override.yml. - Versionar siempre el YAML en Git.
- Usar volúmenes en lugar de bind-mounts para producción.
PRÁCTICA GUIADA:
Web + Base de datos con PHPMyAdmin y Apache
montar un stack clásico LAMP con un archivo docker-compose.yml.
Paso 1: crear carpeta del proyecto
mkdir proyecto_compose
cd proyecto_compose
Paso 2: Crear el archivo docker-compose.yml
services:
db:
image: mysql:8
container_name: mysql_compose
environment:
- MYSQL_ROOT_PASSWORD=curso2025
- MYSQL_DATABASE=tienda
volumes:
- dbdata:/var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: pma_compose
ports:
- "8081:80"
environment:
- PMA_HOST=db
depends_on:
- db
web:
build: ./web
container_name: apache_compose
ports:
- "8080:80"
volumes:
- ./web:/var/www/html
depends_on:
- db
volumes:
dbdata:
Paso 3: Crear la carpeta web con un HTML/PHP mínimo
mkdir web
nano web/index.php
Contenido:
<?php
$mysqli = new mysqli("db", "root", "curso2025", "tienda");
echo $mysqli->connect_error ? "Error de conexión" : "Conexión OK a la BD";
?>
<h1>Hola desde Apache en Docker Compose</h1>
Paso 4: Crear Dockerfile para Apache + PHP
Dentro de web/:
FROM php:8.2-apache
RUN docker-php-ext-install mysqli
Paso 5: Levantar el proyecto
docker compose up -d
- Web → http://localhost:8080
- phpMyAdmin → http://localhost:8081
- MySQL interno → servicio
dben el puerto 3306 dentro de la red Docker.
Paso 6: Probar que todo funciona
Entra al web:
curl localhost:8080
En docker:
docker compose logs web
docker compose exec db mysql -uroot -p













![[Reto] - Dockerizar app JEE (Tomcat 10 + MySQL) 4b9bc3d2-8253-4715-adf6-d5b1eed959d3](https://laaventuradeaprender.com/wp-content/uploads/2026/02/4b9bc3d2-8253-4715-adf6-d5b1eed959d3-150x150.png)