Solucionar el error 'zsh: command not found: docker-compose' con Docker Compose

DockerBeginner
Practicar Ahora

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:

  1. Simplifica la configuración: Defina toda la pila de su aplicación en un solo archivo YAML.
  2. Asegura la consistencia: Ejecute la misma configuración de aplicación en múltiples entornos.
  3. Gestiona las dependencias: Maneja el orden de inicio del servicio y la comunicación entre contenedores.
  4. 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 local
  • redis: 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:

  1. Comprender el papel de Docker Compose en la gestión de aplicaciones de múltiples contenedores
  2. Instalar Docker Compose en su sistema
  3. Solucionar y resolver el error "zsh: command not found: docker-compose"
  4. 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).