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:
- Simplifica a Configuração: Defina toda a sua pilha de aplicações em um único arquivo YAML
- Garante Consistência: Execute a mesma configuração de aplicação em múltiplos ambientes
- Gerencia Dependências: Lida com a ordem de inicialização dos serviços e a comunicação entre contêineres
- 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.
Solução 1: Criar um Link Simbólico
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 localredis: 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:
- Entender o papel do Docker Compose na gestão de aplicações multi-contêiner
- Instalar o Docker Compose em seu sistema
- Solucionar problemas e resolver o erro "zsh: command not found: docker-compose"
- 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.



