Ir al contenido
Background Image

Docker Compose: Cómo manejar múltiples servicios sin volverte loco

Autor
Alvaro Vargas
Desarrollador de bases de datos de día, entusiasta del aprendizaje kinestésico de noche.

Ya tienes Docker funcionando en tu NAS y probablemente ya corriste tu primer “Hello World”. Te sientes todo un hacker. Pero ahora viene la pregunta del millón: ¿cómo hago para que varias aplicaciones trabajen juntas sin que sea un caos total?

Ahí es donde Docker Compose entra a salvarnos la vida. Vamos a sentir que tienes superpoderes para manejar servicios.

El problema que todos enfrentamos
#

Imagínate que quieres instalar un gestor de archivos en la nube en tu NAS. Suena fácil, ¿no? Pero resulta que este tipo de aplicaciones necesitan:

  • El contenedor del gestor de archivos
  • Una base de datos (como MariaDB)
  • Redis para que vaya más rápido
  • Un proxy reverso para acceso seguro

Eso son 4 contenedores diferentes que necesitan hablarse entre ellos, compartir redes, tener volúmenes persistentes, y arrancar en el orden correcto. Si intentas hacerlo con comandos individuales de Docker, te vas a volver loco tratando de recordar todos los parámetros.

¿Qué rayos es Docker Compose?
#

Docker Compose es como el director de orquesta de tus contenedores. En lugar de manejar cada músico (contenedor) por separado, tienes un director que coordina a toda la banda para que toquen en armonía.

Es súper simple: escribes un archivo llamado docker-compose.yml donde describes todos tus servicios, sus configuraciones, cómo se conectan, y qué necesitan. Después, con un solo comando, ¡BOOM! Todo arranca perfecto y trabajando en conjunto.

La analogía perfecta es un restaurante: Docker son los cocineros individuales, pero Docker Compose es el chef ejecutivo que coordina a todos para que el plato salga perfecto.

Ventajas que te van a encantar
#

Una sola receta para todo
#

En lugar de memorizar 15 comandos diferentes con parámetros raros, tienes un solo archivo que define todo. Es como tener una receta completa en lugar de instrucciones sueltas.

Configuraciones probadas y seguras
#

Aquí viene lo mejor: los archivos de Docker Compose que usarás están hechos y probados por equipos completos de desarrolladores. No tienes que configurar bases de datos complicadas, ajustar permisos raros, ni preocuparte por incompatibilidades entre versiones. Todo eso ya lo resolvieron otros por ti, y lo probaron miles de veces antes de que llegue a tus manos.

Es como tener a los mejores chefs del mundo preparándote las recetas perfectas, en lugar de intentar cocinar desde cero sin saber si los ingredientes van a funcionar juntos.

Redes automáticas
#

Docker Compose crea automáticamente una red privada donde todos tus contenedores pueden hablarse usando nombres simples. Nada de IPs raras ni configuraciones complicadas.

Arranque inteligente
#

¿Tu base de datos necesita estar lista antes que tu gestor de archivos? Docker Compose lo maneja automáticamente. Todo arranca en el orden correcto.

Escalabilidad súper fácil
#

¿Quieres más instancias de un servicio? Cambias un numerito y listo. Docker Compose se encarga de todo el resto.

Instalación de Docker Compose
#

La buena noticia es que si tienes Docker instalado, probablemente ya tienes Docker Compose. Vamos a verificar:

docker compose version

Si ves algo como Docker Compose version v2.x.x, ¡ya lo tienes! Si no, instalémoslo:

Para Ubuntu/Debian
#

sudo apt update
sudo apt install docker-compose-plugin -y

Tu primer archivo docker-compose.yml: Portainer
#

Portainer es perfecto para empezar porque es un solo servicio, pero te va a dar una interfaz web súper útil para manejar todos tus contenedores.

Primero, crea una carpeta para tus proyectos:

mkdir ~/docker-projects
cd ~/docker-projects
mkdir portainer
cd portainer

Ahora crea un archivo llamado docker-compose.yml (puedes usar nano):

nano docker-compose.yml

Y pega este contenido:

version: '3.8'

services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: unless-stopped
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
networks:
- portainer-network

volumes:
portainer_data:

networks:
portainer-network:
driver: bridge

Guarda el archivo (Ctrl+X, Enter y Yes para confirmar el nombre del archivo en nano).

Entendiendo el archivo (después te volverás un máster)
#

Vamos a ver qué significa cada parte:

version: '3.8': La versión del formato de Docker Compose que estamos usando.

services:: Aquí defines todos tus contenedores. En este caso, solo Portainer.

image: portainer/portainer-ce:latest: Qué imagen de Docker usar. Es como decir “quiero la última versión de Portainer”.

ports: - "9000:9000": Esto mapea el puerto 9000 de tu NAS al puerto 9000 del contenedor. Básicamente, podrás acceder desde tu navegador.

volumes:: Los volúmenes son como “carpetas permanentes”. Aunque reinicies el contenedor, tus datos se mantienen.

networks:: Crea una red privada para que tus contenedores se comuniquen.

Levantando tu primer stack
#

Ahora viene la magia. Desde la carpeta donde está tu docker-compose.yml, ejecuta:

docker compose up -d

¡Eso es todo! El -d significa que va a correr en segundo plano.

Vas a ver algo como:

✔ Network portainer_portainer-network Created ✔ Volume “portainer_portainer_data” Created ✔ Container portainer Started

Abre tu navegador y ve a http://IP-DE-TU-NAS:9000. ¡Ya tienes Portainer funcionando!

Comandos básicos que necesitas saber
#

Levantar todos los servicios
#

docker compose up -d

Ver qué está corriendo
#

docker compose ps

Ver logs
#

docker compose logs

Parar todo
#

docker compose down

Actualizar servicios
#

docker compose pull
docker compose up -d

Gestionando tu stack como un pro
#

Vamos a hacer el ejercicio de usar comandos de Docker Compose.

Para parar Portainer
#

docker compose down

Para actualizarlo a la última versión
#

docker compose pull
docker compose up -d

Para ver qué está pasando si algo falla
#

docker compose logs -f

Por qué esto es un cambio de juego
#

Antes: Comandos súper largos, parámetros que olvidas, contenedores que no se hablan entre ellos, y reiniciar todo era un dolor de cabeza.

Ahora: Un archivo limpio y organizado, comandos súper simples, y todo funciona como debe. Si algo se rompe, borras la carpeta y vuelves a ejecutar docker compose up -d.

Lo mejor de todo: Estás usando configuraciones que ya probaron y optimizaron expertos. No tienes que convertirte en un administrador de sistemas para tener servicios funcionando perfectamente.

El próximo nivel: Stacks complejos
#

En el próximo artículo vamos a crear un stack completo con un gestor de archivos en la nube + base de datos + caché + proxy reverso. Vas a ver cómo Docker Compose maneja múltiples servicios que dependen unos de otros, y cómo puedes tener tu propia nube privada corriendo en minutos.

Pero por ahora, juega con Portainer. Explora la interfaz, mira tus contenedores, volúmenes y redes. Te vas a dar cuenta de lo poderoso que es tener control visual de todo tu ecosistema Docker.

Docker Compose acaba de convertir tu NAS de una simple caja de almacenamiento en una estación de servicios profesional. Y lo mejor de todo: sin volverte loco en el proceso.

Relacionados

Cómo Docker transformará tu NAS en una bestia de servicios
Cómo evitar que Ubuntu Server se suspenda al cerrar la tapa de tu laptop
Conéctate a tu servidor Ubuntu Server desde tu red local