Ya sabes describir una aplicación multi-contenedor en un archivo docker-compose.yml. Ahora toca aprender a operarla: arrancarla, detenerla, inspeccionar su estado, leer sus registros y entrar dentro de sus contenedores para depurar. Docker Compose ofrece un conjunto compacto de comandos que cubren todo el ciclo de vida de una aplicación. En esta lección los recorreremos uno a uno con ejemplos prácticos, presentaremos una tabla resumen para que la tengas siempre a mano y mostraremos el ciclo de trabajo típico que seguirás en tu día a día como desarrollador.

Objetivos de Aprendizaje

  • Dominar los comandos esenciales: up, down, ps, logs, exec, build, stop/start y restart.
  • Entender la diferencia entre arrancar en primer plano y en segundo plano (-d).
  • Saber distinguir entre down (eliminar) y stop (solo detener).
  • Inspeccionar el estado y los registros de tus servicios.
  • Interiorizar un ciclo de trabajo eficaz con Compose.

Nota: todos los comandos se ejecutan desde la carpeta donde está tu docker-compose.yml, ya que Compose lo busca en el directorio actual.

Arrancar la Aplicación: up

docker compose up es el comando central. Lee el archivo, crea las redes y volúmenes necesarios, construye o descarga las imágenes y arranca todos los servicios.

docker compose up
  • Arranca todo en primer plano: la terminal queda ocupada mostrando los registros combinados de todos los servicios. Para detenerlo, pulsa Ctrl+C.

Lo más habitual es usar el modo detached (segundo plano):

docker compose up -d
  • -d (detached): arranca los servicios en segundo plano y te devuelve el control de la terminal. La aplicación sigue corriendo aunque cierres la ventana.

Si has cambiado el código y quieres forzar la reconstrucción de las imágenes antes de arrancar:

docker compose up -d --build
  • --build: reconstruye las imágenes de los servicios que usan build antes de levantar los contenedores. Imprescindible tras modificar tu Dockerfile o tu código.

Apagar la Aplicación: down

docker compose down es la operación inversa a up: detiene y elimina los contenedores y la red por defecto creados por Compose.

docker compose down
  • Para y borra los contenedores y la red asociada.
  • Por defecto conserva los volúmenes con nombre, de modo que tus datos persistentes no se pierden.

Si además quieres eliminar los volúmenes (¡cuidado, borra los datos!):

docker compose down -v
  • -v: elimina también los volúmenes con nombre declarados en el archivo. Úsalo solo cuando quieras empezar de cero, porque destruye los datos.

down vs stop: down elimina contenedores y red (deja de existir); stop solo los detiene (siguen existiendo y se pueden reiniciar con start). Veremos stop/start más adelante.

Ver el Estado: ps

docker compose ps muestra el estado de los servicios de la aplicación actual.

docker compose ps
  • Lista cada contenedor con su nombre, la imagen, el estado (running, exited, etc.) y los puertos publicados.
  • Solo muestra los contenedores definidos en el docker-compose.yml del directorio actual, lo que lo hace más claro que docker ps.

Para ver también los contenedores detenidos, añade -a:

docker compose ps -a

Leer los Registros: logs

docker compose logs muestra la salida (registros) de los servicios, muy útil para depurar.

docker compose logs
  • Imprime los registros combinados de todos los servicios.

Para seguir los registros en tiempo real, como un tail continuo:

docker compose logs -f
  • -f (follow): mantiene la salida abierta y muestra los nuevos registros según se producen. Detén con Ctrl+C.

Puedes filtrar por un servicio concreto indicando su nombre:

docker compose logs -f web
  • Muestra solo los registros del servicio web, en tiempo real.

Entrar en un Contenedor: exec

docker compose exec ejecuta un comando dentro de un contenedor que ya está en marcha. Es la forma estándar de depurar y de abrir una shell interactiva.

docker compose exec web sh

Explicación:

  • web: el nombre del servicio en cuyo contenedor quieres entrar.
  • sh: el comando a ejecutar. Aquí abrimos una shell, lo que te da una terminal dentro del contenedor.
  • Algunas imágenes incluyen bash en lugar de sh; en ese caso usa docker compose exec web bash.

También puedes ejecutar comandos puntuales sin abrir una shell interactiva:

docker compose exec db psql -U app_user -d app_db
  • Entra directamente al cliente psql de PostgreSQL dentro del servicio db, conectando con el usuario y la base de datos indicados.

Construir Imágenes: build

docker compose build construye (o reconstruye) las imágenes de los servicios que tienen la clave build, sin arrancarlos.

docker compose build
  • Construye todas las imágenes definidas con build.
  • Útil cuando quieres preparar las imágenes por separado del arranque.

Para forzar una reconstrucción completa ignorando la caché:

docker compose build --no-cache
  • --no-cache: reconstruye desde cero sin usar las capas cacheadas. Útil cuando sospechas que la caché está dándote una versión antigua.

Detener y Reanudar: stop, start y restart

A diferencia de down, estos comandos no eliminan los contenedores, solo cambian su estado de ejecución.

# Detener los servicios (sin eliminarlos)
docker compose stop

# Reanudar servicios previamente detenidos
docker compose start

# Reiniciar (parar y volver a arrancar)
docker compose restart

Explicación:

  • stop: detiene los contenedores pero los conserva. Es como apagar sin desinstalar. Más rápido que down si solo quieres pausar.
  • start: vuelve a poner en marcha los contenedores que detuviste con stop. No sirve para contenedores que ya no existen (para eso usa up).
  • restart: equivale a un stop seguido de un start. Muy práctico para aplicar cambios de configuración sin recrear nada.

Todos admiten el nombre de un servicio para actuar solo sobre él:

docker compose restart web
  • Reinicia únicamente el servicio web, dejando el resto intacto.

Tabla Resumen de Comandos

Comando Qué hace Opciones frecuentes
docker compose up Crea y arranca todos los servicios -d (segundo plano), --build (reconstruir)
docker compose down Detiene y elimina contenedores y red -v (borrar también volúmenes)
docker compose ps Muestra el estado de los servicios -a (incluir detenidos)
docker compose logs Muestra los registros -f (seguir en vivo), <servicio>
docker compose exec Ejecuta un comando en un contenedor activo <servicio> <comando>
docker compose build Construye las imágenes --no-cache
docker compose stop Detiene sin eliminar <servicio>
docker compose start Reanuda contenedores detenidos <servicio>
docker compose restart Reinicia los servicios <servicio>

Ciclo de Trabajo Típico

En el día a día, un flujo habitual con Compose se parece a este:

# 1. Arrancar la aplicación en segundo plano
docker compose up -d

# 2. Comprobar que todos los servicios están "running"
docker compose ps

# 3. Seguir los registros para detectar errores
docker compose logs -f

# 4. (En otra terminal) Entrar a un contenedor a depurar
docker compose exec web sh

# 5. Tras cambiar el código, reconstruir y relanzar
docker compose up -d --build

# 6. Al terminar la jornada, detener sin perder datos
docker compose stop

# 7. Para limpiar del todo cuando ya no lo necesitas
docker compose down

Resumen del flujo:

  • Arrancas con up -d y verificas con ps.
  • Diagnosticas con logs -f y exec.
  • Iteras sobre tu código con up -d --build.
  • Pausas con stop (rápido, conserva todo) o limpias con down (elimina contenedores y red).

Errores Comunes y Consejos

  • Confundir down con stop: down elimina los contenedores y la red; stop solo los pausa. Si quieres reanudar luego, usa stop/start; si quieres limpiar, usa down.
  • Perder datos con down -v: la opción -v borra los volúmenes y, con ellos, los datos de tus bases de datos. Úsala con plena conciencia.
  • Olvidar --build tras cambiar el código: si no reconstruyes, Compose seguirá usando la imagen antigua y no verás tus cambios.
  • Ejecutar comandos desde la carpeta equivocada: Compose busca el docker-compose.yml en el directorio actual; si no lo encuentra, fallará.
  • Usar start con contenedores inexistentes: start solo reanuda contenedores que existen pero están detenidos. Si ya hiciste down, debes volver a up.
  • Consejo: deja docker compose logs -f corriendo en una terminal mientras desarrollas; es la forma más rápida de enterarte de cualquier error en cuanto ocurre.

Ejercicios

Ejercicio 1

Arranca una aplicación Compose en segundo plano, comprueba que sus servicios están en ejecución y muestra los registros del servicio db en tiempo real.

Ejercicio 2

Has modificado el código de tu servicio api. Escribe el comando que reconstruye su imagen y relanza la aplicación en segundo plano en un solo paso. Luego explica la diferencia entre docker compose stop y docker compose down.

Ejercicio 3

Abre una shell interactiva dentro del contenedor del servicio web para inspeccionar sus archivos.

Soluciones

Solución al Ejercicio 1

docker compose up -d
docker compose ps
docker compose logs -f db
  • up -d arranca en segundo plano.
  • ps confirma que los servicios están en estado running.
  • logs -f db sigue en tiempo real los registros del servicio db.

Solución al Ejercicio 2

docker compose up -d --build

La opción --build fuerza la reconstrucción de las imágenes (incluida la de api) y -d la levanta en segundo plano, todo en un único comando.

Diferencia entre stop y down:

  • stop: detiene los contenedores pero los conserva; puedes reanudarlos con start. No elimina la red ni los volúmenes.
  • down: detiene y elimina los contenedores y la red por defecto. Los contenedores dejan de existir y, para volver a tenerlos, hay que ejecutar up de nuevo.

Solución al Ejercicio 3

docker compose exec web sh

Esto abre una shell (sh) dentro del contenedor en ejecución del servicio web. Si la imagen incluye Bash, también puedes usar docker compose exec web bash. Para salir, escribe exit.

Conclusión

En esta lección has aprendido a operar tus aplicaciones Compose con los comandos esenciales: arrancar con up (y su modo -d), apagar y limpiar con down, inspeccionar el estado con ps, leer registros con logs, depurar con exec, construir imágenes con build y controlar la ejecución con stop, start y restart. La tabla resumen y el ciclo de trabajo típico te servirán de referencia rápida cada vez que trabajes con Compose.

En la siguiente lección, Aplicaciones Multi-Contenedor, juntaremos todo lo aprendido para construir, paso a paso, una aplicación real completa con servicio web, base de datos y caché, viendo cómo se comunican los servicios entre sí por su nombre y cómo orquestar su arranque de principio a fin.

© Copyright 2026. Todos los derechos reservados