Qué resuelve Docker Compose
Docker Compose v2 describe una aplicación docker compose multi-contenedor en un único archivo declarativo: qué imágenes levantar, cómo se conectan en red y qué datos persisten entre reinicios. En vez de encadenar varios docker run sueltos, defines la pila completa una vez y la levantas, inspeccionas y destruyes con un puñado de subcomandos del propio CLI de Docker (docker compose, sin guion: es el plugin v2, sustituto del antiguo docker-compose en Python).
La estructura del archivo compose.yaml
Un compose.yaml típico tiene tres bloques: services (un contenedor por servicio, con su imagen, puertos y variables), networks (las redes que comparten esos servicios) y volumes (el almacenamiento con nombre que Docker gestiona por ti). Nuestro lab define un servicio web con Nginx y un servicio cache con Redis, ambos en la misma red labnet, con el contenido de Nginx guardado en un volumen con nombre en vez de un bind mount atado a una ruta del host.
Cómo se descubren los servicios entre sí
Compose crea, además de los servicios, una red bridge personalizada con un resolvedor DNS embebido: cada contenedor puede alcanzar a los demás por su nombre de servicio (cache, web) sin conocer su IP interna, algo que la red bridge por defecto de Docker no ofrece. Es el mismo principio que usan las guías de Redis en Docker y de Portainer con Docker Compose cuando varios contenedores necesitan hablar entre sí.
De docker compose up a docker compose down
El ciclo de vida completo cabe en cuatro comandos: docker compose up -d crea la red, el volumen y arranca los contenedores en el orden que marca depends_on; docker compose ps y docker compose logs confirman que están sanos; docker compose exec te mete dentro de un servicio concreto; y docker compose down -v lo desmonta todo, incluido el volumen. Para producción conviene sumar healthchecks y políticas de reinicio a cada servicio. La referencia completa del formato del archivo está en la documentación oficial de Docker Compose, el código del plugin v2 es público en github.com/docker/compose, y los comandos de Redis usados en el lab están documentados en redis.io.
Preguntas frecuentes
¿Qué es Docker Compose v2?
Es el plugin oficial del CLI de Docker que se invoca como docker compose (sin guion) y sustituye al antiguo docker-compose escrito en Python. Lee un archivo compose.yaml y orquesta varios contenedores, su red y su almacenamiento como una sola unidad.
¿Cómo se comunican los servicios entre sí en Docker Compose?
Compose crea una red bridge propia para el proyecto con un resolvedor DNS embebido: cualquier contenedor puede alcanzar a otro usando su nombre de servicio (por ejemplo cache) como si fuera un nombre de host, sin necesidad de conocer ni fijar su IP interna.
¿Por qué usar un volumen con nombre en vez de un bind mount?
Un volumen con nombre lo gestiona Docker: no depende de una ruta concreta del host, sobrevive a docker compose down (sin -v) y es portable entre máquinas. Un bind mount ata el contenedor a una carpeta exacta del host, útil para desarrollo pero menos portable.
¿Qué diferencia hay entre docker compose stop y docker compose down?
docker compose stop detiene los contenedores pero los deja creados, junto con la red y los volúmenes, listos para reanudar con start. docker compose down va más allá: elimina los contenedores y la red, y con la opción -v también borra los volúmenes con nombre del proyecto.