Docker Compose ha cambiado de forma fundamental la manera en que los desarrolladores trabajan con aplicaciones contenerizadas, especialmente al coordinar servicios que dependen entre sí. Esta herramienta reemplaza la gestión manual de contenedores por un flujo de trabajo estructurado basado en YAML, lo que permite a los equipos definir arquitecturas completas de aplicaciones en un único archivo de configuración.
En entornos Ubuntu, esto se traduce en despliegues reproducibles, escalado simplificado y una reducción del esfuerzo operativo. Esta guía ofrece una perspectiva actualizada sobre la instalación y el uso de Docker Compose, proporcionando una visión más profunda de su implementación práctica.
Antes de comenzar este tutorial, asegúrate de contar con lo siguiente:
Implementar una instancia de servidor cloud con Ubuntu en Hostman.
Disponer de una cuenta de usuario con privilegios sudo o acceso root para instalar paquetes y administrar Docker.
Tener Docker instalado y en ejecución en el servidor, ya que Docker Compose funciona sobre Docker Engine.
Las aplicaciones modernas suelen estar compuestas por múltiples componentes interconectados, como APIs, bases de datos y capas de caché. Gestionar estos elementos individualmente mediante comandos de Docker se vuelve complicado a medida que aumenta la complejidad. Docker Compose soluciona esto permitiendo declarar todos los servicios, redes y requisitos de almacenamiento en un archivo docker-compose.yml. Este enfoque garantiza la consistencia entre entornos, ya sea en una máquina Ubuntu local o en un servidor en la nube.
Por ejemplo, una aplicación web compuesta por un backend en Node.js, una base de datos PostgreSQL y una caché Redis. Sin Docker Compose, cada componente requiere un comando docker run independiente con configuraciones de red precisas. Con Compose, estas relaciones se definen una sola vez, permitiendo iniciar y detener toda la aplicación con un solo comando.
Sigue estos pasos para instalar Docker Compose en tu sistema Ubuntu.
Docker Compose funciona como una extensión de Docker, por lo que primero debes comprobar su estado:
sudo systemctl status docker
Si el servicio no está activo, inícialo con:
sudo systemctl start docker
Actualiza las listas de paquetes para asegurarte de tener acceso a las versiones más recientes del software:
sudo apt-get update
Para una comunicación segura con los repositorios de Docker, se requieren los siguientes paquetes:
sudo apt-get install ca-certificates curl
Autentica los paquetes de Docker añadiendo su clave criptográfica:
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
Este paso garantiza que los paquetes no hayan sido modificados durante la descarga.
Agrega el repositorio correspondiente a tu versión de Ubuntu:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
El comando detecta automáticamente la versión del sistema operativo mediante VERSION_CODENAME.
Actualiza los repositorios e instala la extensión Compose:
sudo apt update
sudo apt-get install docker-compose-plugin
Confirma que la instalación se haya realizado correctamente:
docker compose version
Salida de ejemplo:
Docker Compose version v2.33.0
Para demostrar las capacidades de Docker Compose, vamos a desplegar un servidor web utilizando Nginx.
Crea un espacio de trabajo dedicado:
mkdir ~/compose-demo && cd ~/compose-demo
Crea el archivo de configuración:
nano docker-compose.yml
Inserta el siguiente contenido:
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./app:/usr/share/nginx/html
Explicación:
services: Elemento raíz que define los contenedores
web: Nombre personalizado del servicio
image: Imagen de Nginx basada en Alpine con menor consumo de recursos
ports: Mapea el puerto 8080 del host al puerto 80 del contenedor
volumes: Sincroniza el directorio local app con la raíz web del contenedor
Construye la estructura HTML:
mkdir app
nano app/index.html
Añade el siguiente contenido:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Docker Compose Test</title>
</head>
<body>
<h1>Hello from Docker Compose!</h1>
</body>
</html>
docker compose up -d
Docker Compose descargará automáticamente la imagen de Nginx si no está disponible y configurará la red.
docker compose ps -a
Abre http://localhost:8080 localmente o http://<SERVER_IP>:8080 en servidores remotos. La página de prueba debería mostrarse correctamente.
Si la página no carga o surgen errores, revisa los logs del contenedor:
docker compose logs web
Detener los contenedores temporalmente:
docker compose stop
Eliminar todos los recursos del proyecto:
docker compose down
Estos comandos amplían la gestión de contenedores:
docker compose up --build – Reconstruir las imágenes antes de iniciar los contenedores
docker compose pause – Pausar contenedores sin finalizarlos
docker compose top – Mostrar los procesos en ejecución dentro de los contenedores
docker compose config – Validar y mostrar la configuración final
docker compose exec – Ejecutar comandos dentro de contenedores activos
(por ejemplo, docker compose exec web nginx -t para probar la configuración de Nginx)
Docker Compose transforma la orquestación de múltiples contenedores de una tarea manual y compleja en un proceso estructurado, repetible y eficiente. Siguiendo los pasos descritos—instalando Docker Compose, definiendo servicios en YAML y utilizando los comandos esenciales—podrás gestionar aplicaciones complejas con confianza.