Solucionar 'zsh: command not found: docker-compose' com Docker Compose

DockerBeginner
Pratique Agora

Introdução

O Docker Compose é uma ferramenta essencial para gerenciar aplicações Docker com múltiplos contêineres. Este laboratório irá guiá-lo na resolução do erro comum "zsh: command not found: docker-compose" que muitos usuários encontram ao começar a usar o Docker Compose.

Ao completar este laboratório, você aprenderá como instalar corretamente o Docker Compose, solucionar problemas relacionados a caminhos (path) e usar o Docker Compose para executar uma aplicação simples com múltiplos contêineres. Essas habilidades são fundamentais para desenvolvedores que trabalham com aplicações em contêineres.

Entendendo Docker e Docker Compose

Antes de começarmos a solucionar problemas, vamos entender o que é o Docker Compose e por que ele é importante no ecossistema Docker.

O que é Docker?

Docker é uma plataforma que permite aos desenvolvedores construir, empacotar e executar aplicações em contêineres. Contêineres são ambientes leves e isolados que incluem tudo o que é necessário para executar uma aplicação - código, runtime, ferramentas do sistema, bibliotecas e configurações.

O que é Docker Compose?

Docker Compose é uma ferramenta para definir e executar aplicações Docker com múltiplos contêineres. Com o Docker Compose, você usa um arquivo YAML para configurar os serviços, redes e volumes da sua aplicação. Então, com um único comando, você pode criar e iniciar todos os serviços a partir da sua configuração.

Vamos verificar se o Docker está corretamente instalado em nosso sistema:

docker --version

Você deve ver uma saída semelhante a esta:

Docker version 20.10.21, build baeda1f

Isso confirma que o Docker está instalado e pronto para uso. Agora, vamos tentar executar o Docker Compose para ver se ele está instalado:

docker-compose --version

Se o Docker Compose não estiver instalado, você verá o erro:

zsh: command not found: docker-compose

Esta mensagem de erro é o foco do nosso laboratório - vamos solucionar e corrigir este problema nos próximos passos.

Por que usar Docker Compose?

O Docker Compose oferece várias vantagens para gerenciar aplicações com múltiplos contêineres:

  1. Simplifica a Configuração: Defina toda a sua pilha de aplicações em um único arquivo YAML
  2. Garante Consistência: Execute a mesma configuração de aplicação em múltiplos ambientes
  3. Gerencia Dependências: Lida com a ordem de inicialização dos serviços e a comunicação entre contêineres
  4. Melhora a Produtividade: Economize tempo com comandos simples para gerenciar todo o ciclo de vida da sua aplicação

No próximo passo, vamos instalar o Docker Compose e resolver o erro "command not found".

Instalando o Docker Compose

Agora que entendemos o que é o Docker Compose, vamos instalá-lo em nosso sistema para resolver o erro "command not found".

Baixando o Binário do Docker Compose

O primeiro passo é baixar o binário do Docker Compose. O binário oficial do Docker Compose está disponível no GitHub. Usaremos o comando curl para baixá-lo:

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 baixa o binário do Docker Compose que corresponde à arquitetura do seu sistema operacional e o salva em /usr/local/bin/docker-compose. O comando levará um momento para ser executado, pois ele baixa o arquivo.

Tornando o Docker Compose Executável

Após baixar o binário, precisamos torná-lo executável:

sudo chmod +x /usr/local/bin/docker-compose

Este comando concede permissões de execução ao binário do Docker Compose.

Verificando a Instalação

Agora, vamos verificar se o Docker Compose foi instalado corretamente:

docker-compose --version

Você deve ver uma saída semelhante a esta:

Docker Compose version v2.17.2

Se você ainda vir o erro "command not found", isso significa que o diretório /usr/local/bin pode não estar no PATH do seu sistema. Abordaremos esse problema no próximo passo.

Entendendo a Variável PATH

A variável PATH é uma variável de ambiente no Linux que informa ao shell quais diretórios pesquisar por arquivos executáveis quando você executa um comando. Para visualizar seu PATH atual, execute:

echo $PATH

Você deve ver uma lista de diretórios separados por dois pontos (:). Se /usr/local/bin não estiver nesta lista, isso pode explicar por que o shell não consegue encontrar o comando docker-compose.

No próximo passo, vamos solucionar e resolver quaisquer problemas restantes que possam nos impedir de usar o Docker Compose.

Solucionando o Erro "Command Not Found"

Se você ainda estiver encontrando o erro "zsh: command not found: docker-compose" após a instalação, vamos solucionar algumas causas comuns e suas soluções.

Uma solução comum é criar um link simbólico para o binário do Docker Compose em um diretório que certamente está no seu PATH, como /usr/bin:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Este comando cria um link simbólico (atalho) para o binário do Docker Compose no diretório /usr/bin, que normalmente está incluído no PATH do sistema por padrão.

Após criar o link simbólico, tente executar o Docker Compose novamente:

docker-compose --version

Você deve agora ver as informações da versão do Docker Compose sem nenhum erro.

Solução 2: Usar o Plugin Docker Compose (Método Alternativo)

Em versões mais recentes do Docker, o Compose está disponível como um plugin. Se você preferir usar este método, pode tentar:

docker compose version

Observe a ausência de um hífen entre docker e compose. Se este comando funcionar, significa que o Docker Compose está disponível como um plugin, e você pode usá-lo com esta sintaxe em vez disso.

Solução 3: Adicionar o Docker Compose ao Seu PATH

Se você preferir manter o Docker Compose em sua localização atual, mas o link simbólico não funcionar, você pode adicionar o diretório ao seu PATH manualmente:

echo 'export PATH=$PATH:/usr/local/bin' >> ~/.zshrc
source ~/.zshrc

Isso adiciona /usr/local/bin ao seu PATH e aplica imediatamente as alterações à sua sessão atual.

Verificação

Independentemente da solução que você usou, verifique se o Docker Compose está funcionando corretamente agora:

docker-compose --version

Você deve ver uma saída semelhante a:

Docker Compose version v2.17.2

Agora que instalamos e configuramos o Docker Compose com sucesso, no próximo passo criaremos um projeto Docker Compose simples para testar nossa instalação.

Criando um Projeto Docker Compose Simples

Agora que o Docker Compose está devidamente instalado e funcionando, vamos criar um projeto simples para testar nossa configuração. Criaremos uma aplicação web básica com um servidor web e um banco de dados Redis.

Criar um Diretório de Projeto

Primeiro, vamos criar um diretório dedicado para nosso projeto:

mkdir ~/project/docker-compose-test
cd ~/project/docker-compose-test

Criar um Arquivo Docker Compose

Agora, vamos criar um arquivo docker-compose.yml usando o editor de texto nano:

nano docker-compose.yml

Copie e cole o seguinte conteúdo no arquivo:

version: "3"
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
  redis:
    image: redis:alpine

Este arquivo Docker Compose define dois serviços:

  • web: Um servidor web Nginx que servirá conteúdo de um diretório local
  • redis: Um banco de dados Redis para cache ou armazenamento de dados de sessão

Pressione Ctrl+O seguido por Enter para salvar o arquivo, depois pressione Ctrl+X para sair do nano.

Criar Conteúdo HTML

Vamos criar uma página HTML simples que nosso serviço web servirá:

mkdir -p html
nano html/index.html

Copie e cole o seguinte conteúdo no arquivo:

<!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>

Pressione Ctrl+O seguido por Enter para salvar o arquivo, depois pressione Ctrl+X para sair do nano.

Executar o Projeto Docker Compose

Agora, vamos iniciar nosso projeto Docker Compose:

docker-compose up -d

A flag -d executa os contêineres em segundo plano (modo detached). Você deve ver uma saída semelhante 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 se os Serviços Estão em Execução

Vamos verificar se nossos serviços estão sendo executados corretamente:

docker-compose ps

Você deve ver uma saída semelhante 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

Acessar a Aplicação Web

Agora você pode acessar a aplicação web abrindo um navegador web na interface do LabEx e navegando para http://localhost:8080. Você deve ver a mensagem "Hello from Docker Compose!".

Alternativamente, você pode usar curl para verificar o servidor web a partir da linha de comando:

curl http://localhost:8080

Você deve ver o conteúdo HTML que criamos anteriormente.

Parar o Projeto Docker Compose

Quando terminar os testes, você pode parar o projeto Docker Compose:

docker-compose down

Você deve ver uma saída semelhante 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

Parabéns! Você instalou com sucesso o Docker Compose, resolveu o erro "command not found" e testou sua configuração com uma aplicação simples de múltiplos contêineres.

Resumo

Neste laboratório, você aprendeu a:

  1. Entender o papel do Docker Compose na gestão de aplicações multi-contêiner
  2. Instalar o Docker Compose em seu sistema
  3. Solucionar problemas e resolver o erro "zsh: command not found: docker-compose"
  4. Criar e executar uma aplicação multi-contêiner simples usando o Docker Compose

Essas habilidades fornecem uma base sólida para trabalhar com Docker e Docker Compose. Agora você pode usar com confiança o Docker Compose para definir, implantar e gerenciar aplicações multi-contêiner complexas.

Para aprendizado adicional, considere explorar recursos mais avançados do Docker Compose, como variáveis de ambiente, redes, volumes e dimensionamento de serviços. Você também pode querer aprender sobre o Docker Compose em ambientes de produção e como integrá-lo com pipelines CI/CD.