Introducción
Docker Compose es una herramienta esencial para la gestión de aplicaciones Docker de múltiples contenedores. Este laboratorio le guiará a través de la resolución del error común "zsh: command not found: docker-compose" que muchos usuarios encuentran al comenzar a trabajar con Docker Compose.
Al completar este laboratorio, aprenderá a instalar correctamente Docker Compose, solucionar problemas relacionados con la ruta (path) y utilizar Docker Compose para ejecutar una aplicación simple de múltiples contenedores. Estas habilidades son fundamentales para los desarrolladores que trabajan con aplicaciones en contenedores.
Entendiendo Docker y Docker Compose
Antes de comenzar a solucionar problemas, entendamos qué es Docker Compose y por qué es importante en el ecosistema de Docker.
¿Qué es Docker?
Docker es una plataforma que permite a los desarrolladores construir, empaquetar y ejecutar aplicaciones en contenedores. Los contenedores son entornos ligeros y aislados que incluyen todo lo necesario para ejecutar una aplicación: código, tiempo de ejecución (runtime), herramientas del sistema, bibliotecas y configuraciones.
¿Qué es Docker Compose?
Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker de múltiples contenedores. Con Docker Compose, utiliza un archivo YAML para configurar los servicios, las redes y los volúmenes de su aplicación. Luego, con un solo comando, puede crear e iniciar todos los servicios desde su configuración.
Comprobemos si Docker está correctamente instalado en nuestro sistema:
docker --version
Debería ver una salida similar a esta:
Docker version 20.10.21, build baeda1f
Esto confirma que Docker está instalado y listo para usar. Ahora, intentemos ejecutar Docker Compose para ver si está instalado:
docker-compose --version
Si Docker Compose no está instalado, verá el error:
zsh: command not found: docker-compose
Este mensaje de error es el enfoque de nuestro laboratorio: solucionaremos y corregiremos este problema en los siguientes pasos.
¿Por qué usar Docker Compose?
Docker Compose ofrece varias ventajas para la gestión de aplicaciones de múltiples contenedores:
- Simplifica la configuración: Defina toda la pila de su aplicación en un solo archivo YAML.
- Asegura la consistencia: Ejecute la misma configuración de aplicación en múltiples entornos.
- Gestiona las dependencias: Maneja el orden de inicio del servicio y la comunicación entre contenedores.
- Mejora la productividad: Ahorre tiempo con comandos simples para administrar todo el ciclo de vida de su aplicación.
En el siguiente paso, instalaremos Docker Compose y resolveremos el error "command not found".
Instalación de Docker Compose
Ahora que entendemos qué es Docker Compose, instalémoslo en nuestro sistema para resolver el error "command not found".
Descarga del binario de Docker Compose
El primer paso es descargar el binario de Docker Compose. El binario oficial de Docker Compose está disponible en GitHub. Usaremos el comando curl para descargarlo:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Este comando descarga el binario de Docker Compose que coincide con la arquitectura de su sistema operativo y lo guarda en /usr/local/bin/docker-compose. El comando tardará un momento en ejecutarse mientras descarga el archivo.
Hacer Docker Compose ejecutable
Después de descargar el binario, necesitamos hacerlo ejecutable:
sudo chmod +x /usr/local/bin/docker-compose
Este comando otorga permisos de ejecución al binario de Docker Compose.
Verificar la instalación
Ahora, verifiquemos que Docker Compose se haya instalado correctamente:
docker-compose --version
Debería ver una salida similar a esta:
Docker Compose version v2.17.2
Si aún ve el error "command not found", significa que el directorio /usr/local/bin podría no estar en el PATH de su sistema. Abordaremos este problema en el siguiente paso.
Entendiendo la variable PATH
La variable PATH es una variable de entorno en Linux que le indica al shell qué directorios buscar archivos ejecutables cuando ejecuta un comando. Para ver su PATH actual, ejecute:
echo $PATH
Debería ver una lista de directorios separados por dos puntos (:). Si /usr/local/bin no está en esta lista, eso podría explicar por qué el shell no puede encontrar el comando docker-compose.
En el siguiente paso, solucionaremos y resolveremos cualquier problema restante que pueda impedirnos usar Docker Compose.
Solución de problemas del error "Command Not Found"
Si aún encuentra el error "zsh: command not found: docker-compose" después de la instalación, solucionemos algunas causas comunes y sus soluciones.
Solución 1: Crear un enlace simbólico
Una solución común es crear un enlace simbólico al binario de Docker Compose en un directorio que definitivamente esté en su PATH, como /usr/bin:
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
Este comando crea un enlace simbólico (atajo) al binario de Docker Compose en el directorio /usr/bin, que normalmente se incluye en el PATH del sistema por defecto.
Después de crear el enlace simbólico, intente ejecutar Docker Compose nuevamente:
docker-compose --version
Ahora debería ver la información de la versión de Docker Compose sin ningún error.
Solución 2: Usar el plugin de Docker Compose (Método alternativo)
En las versiones más recientes de Docker, Compose está disponible como un plugin. Si prefiere usar este método, puede intentar:
docker compose version
Observe la ausencia de un guion entre docker y compose. Si este comando funciona, significa que Docker Compose está disponible como un plugin y puede usarlo con esta sintaxis en su lugar.
Solución 3: Agregar Docker Compose a su PATH
Si prefiere mantener Docker Compose en su ubicación actual, pero el enlace simbólico no funciona, puede agregar el directorio a su PATH manualmente:
echo 'export PATH=$PATH:/usr/local/bin' >> ~/.zshrc
source ~/.zshrc
Esto agrega /usr/local/bin a su PATH y aplica inmediatamente los cambios a su sesión actual.
Verificación
Independientemente de la solución que haya utilizado, verifique que Docker Compose ahora funcione correctamente:
docker-compose --version
Debería ver una salida similar a:
Docker Compose version v2.17.2
Ahora que hemos instalado y configurado Docker Compose con éxito, en el siguiente paso crearemos un proyecto Docker Compose simple para probar nuestra instalación.
Creación de un proyecto Docker Compose simple
Ahora que Docker Compose está correctamente instalado y funcionando, creemos un proyecto simple para probar nuestra configuración. Crearemos una aplicación web básica con un servidor web y una base de datos Redis.
Crear un directorio de proyecto
Primero, creemos un directorio dedicado para nuestro proyecto:
mkdir ~/project/docker-compose-test
cd ~/project/docker-compose-test
Crear un archivo Docker Compose
Ahora, creemos un archivo docker-compose.yml usando el editor de texto nano:
nano docker-compose.yml
Copie y pegue el siguiente contenido en el archivo:
version: "3"
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
redis:
image: redis:alpine
Este archivo Docker Compose define dos servicios:
web: Un servidor web Nginx que servirá contenido desde un directorio localredis: Una base de datos Redis para el almacenamiento en caché o el almacenamiento de datos de sesión
Presione Ctrl+O seguido de Enter para guardar el archivo, luego presione Ctrl+X para salir de nano.
Crear contenido HTML
Creemos una página HTML simple que nuestro servicio web servirá:
mkdir -p html
nano html/index.html
Copie y pegue el siguiente contenido en el archivo:
<!DOCTYPE html>
<html>
<head>
<title>Docker Compose Test</title>
</head>
<body>
<h1>Hello from Docker Compose!</h1>
<p>If you can see this, your Docker Compose setup is working correctly.</p>
</body>
</html>
Presione Ctrl+O seguido de Enter para guardar el archivo, luego presione Ctrl+X para salir de nano.
Ejecutar el proyecto Docker Compose
Ahora, iniciemos nuestro proyecto Docker Compose:
docker-compose up -d
La bandera -d ejecuta los contenedores en segundo plano (modo desasociado). Debería ver una salida similar a:
Creating network "docker-compose-test_default" with the default driver
Pulling web (nginx:alpine)...
Pulling redis (redis:alpine)...
[...]
Creating docker-compose-test_web_1 ... done
Creating docker-compose-test_redis_1 ... done
Verificar que los servicios se estén ejecutando
Verifiquemos que nuestros servicios se estén ejecutando correctamente:
docker-compose ps
Debería ver una salida similar a:
Name Command State Ports
------------------------------------------------------------------------------------
docker-compose-test_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp
docker-compose-test_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8080->80/tcp
Acceder a la aplicación web
Ahora puede acceder a la aplicación web abriendo un navegador web en la interfaz de LabEx y navegando a http://localhost:8080. Debería ver el mensaje "Hello from Docker Compose!".
Alternativamente, puede usar curl para verificar el servidor web desde la línea de comandos:
curl http://localhost:8080
Debería ver el contenido HTML que creamos anteriormente.
Detener el proyecto Docker Compose
Cuando termine de probar, puede detener el proyecto Docker Compose:
docker-compose down
Debería ver una salida similar a:
Stopping docker-compose-test_web_1 ... done
Stopping docker-compose-test_redis_1 ... done
Removing docker-compose-test_web_1 ... done
Removing docker-compose-test_redis_1 ... done
Removing network docker-compose-test_default
¡Felicidades! Ha instalado Docker Compose con éxito, ha resuelto el error "command not found" y ha probado su configuración con una aplicación simple de múltiples contenedores.
Resumen
En este laboratorio, ha aprendido a:
- Comprender el papel de Docker Compose en la gestión de aplicaciones de múltiples contenedores
- Instalar Docker Compose en su sistema
- Solucionar y resolver el error "zsh: command not found: docker-compose"
- Crear y ejecutar una aplicación simple de múltiples contenedores utilizando Docker Compose
Estas habilidades proporcionan una base sólida para trabajar con Docker y Docker Compose. Ahora puede usar con confianza Docker Compose para definir, implementar y administrar aplicaciones complejas de múltiples contenedores.
Para un aprendizaje adicional, considere explorar funciones más avanzadas de Docker Compose, como variables de entorno, redes, volúmenes y servicios de escalado. También es posible que desee aprender sobre Docker Compose en entornos de producción y cómo integrarlo con las tuberías CI/CD (Continuous Integration/Continuous Delivery).



