Como Usar o Docker Compose com Configuração de Rede Host

DockerBeginner
Pratique Agora

Introdução

Este tutorial guia você através do uso do Docker Compose com uma configuração de rede host em uma VM da nuvem LabEx. Docker Compose é uma ferramenta que ajuda a gerenciar múltiplos contêineres – pense em contêineres como ambientes leves e isolados que executam aplicações como um servidor web. Normalmente, o Docker isola a rede de um contêiner da máquina host (a VM em que você está trabalhando), mas a opção de rede host permite que o contêiner compartilhe a rede do host diretamente. Isso é útil quando sua aplicação precisa agir como se estivesse rodando diretamente no host, como acessar as portas do host sem configuração extra. Ao final, você configurará o Docker Compose, criará, implantará e testará um serviço web simples usando a rede host. O Docker já está pré-instalado no seu ambiente LabEx, mas também garantiremos que o Docker Compose esteja pronto.

Este Lab requer uma conexão com a internet para aprendizado, portanto, apenas usuários Pro podem iniciar a VM. Atualize sua conta para Pro.

Configurar o Docker Compose

Antes de mergulhar na configuração, vamos garantir que o Docker Compose esteja disponível na sua VM da nuvem LabEx. Embora o Docker já esteja pré-instalado, o Docker Compose – uma ferramenta separada para gerenciar configurações de múltiplos contêineres – pode não estar. Vamos instalá-lo rapidamente usando o terminal.

Abra o terminal na sua VM LabEx. O prompt deve mostrar /home/labex/project – este é o seu diretório de trabalho padrão. Execute estes comandos um por um:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose-install

Aqui está o que esses comandos fazem:

  • curl: Baixa o binário do Docker Compose da sua versão oficial no GitHub. A URL usa $(uname -s)-$(uname -m) para corresponder ao sistema da sua VM (por exemplo, Linux-x86_64). A versão 2.20.2 é estável e amplamente compatível.
  • -o /usr/local/bin/docker-compose: Salva-o em /usr/local/bin, um local padrão para ferramentas executáveis. sudo garante que você tenha permissão para escrever lá.
  • chmod +x: Torna o arquivo executável, para que você possa executá-lo como um comando. Novamente, sudo concede os direitos necessários.

Para confirmar que funcionou, execute:

docker-compose --version

Você deve ver uma saída como Docker Compose version v2.20.2. Se você receber "command not found", execute os comandos novamente com cuidado – verifique se há erros de digitação ou problemas de internet (a VM precisa de acesso à web para baixar). Esta etapa garante que você esteja pronto para usar docker-compose nas próximas etapas.

Criar um Arquivo Docker Compose com Rede Host

Agora que o Docker Compose está pronto, vamos criar um arquivo docker-compose.yml – seu projeto para executar um serviço web com rede host. Usaremos o nano, um editor de texto de terminal simples e amigável para iniciantes.

Para criar e editar o arquivo, siga estes passos:

  1. No seu terminal, certifique-se de estar no diretório do projeto:

    cd /home/labex/project
  2. Crie e abra o arquivo com nano:

    nano docker-compose.yml
  3. Digite ou cole o seguinte conteúdo no nano:

version: "3"
services:
  web:
    image: nginx:latest
    network_mode: host

Aqui está o que cada parte significa:

  • version: "3": Define o formato do arquivo Docker Compose. A versão 3 é um padrão comum, como escolher um modelo.
  • services: Lista os contêineres (ou "serviços") a serem executados, como trabalhadores para o seu projeto.
  • web: Nomeia seu serviço – chame-o como quiser, mas "web" se encaixa em um servidor web.
  • image: nginx:latest: Especifica o software – Nginx, um servidor web popular, com latest puxando a versão mais recente do Docker Hub (uma biblioteca de imagens de contêiner).
  • network_mode: host: A configuração chave. Normalmente, o Docker dá aos contêineres sua própria rede privada, isolando-os do host. O modo host permite que o contêiner use a rede da VM diretamente, para que o Nginx possa acessar as portas do host (como 80) sem etapas extras.
  1. Para salvar o arquivo no nano:
    • Pressione Ctrl + X para sair
    • Pressione Y para confirmar a gravação das alterações
    • Pressione Enter para confirmar o nome do arquivo

O arquivo agora está salvo em /home/labex/project, e você está pronto para a próxima etapa.

Implantar a Aplicação Docker Compose

Com o seu arquivo docker-compose.yml configurado, vamos implantar o contêiner Nginx – dizendo ao Docker para iniciá-lo com base no seu projeto. Vá para o terminal para isso.

No terminal em /home/labex/project, execute:

docker-compose up -d

Analisando:

  • docker-compose: A ferramenta que lê docker-compose.yml e gerencia seus serviços.
  • up: Inicia o serviço web (Nginx) definido no arquivo.
  • -d: Executa-o em segundo plano (modo "detached"), para que seu terminal permaneça livre.

O Docker Compose fará o download da imagem nginx:latest do Docker Hub se ela ainda não estiver na VM (você pode ver mensagens de download), e então iniciará o contêiner. Verifique se está em execução com:

docker ps

Isso lista os contêineres ativos. Procure por nginx:latest em "IMAGE" e "Up" em "STATUS" (por exemplo, "Up 5 seconds"). Você não verá mapeamentos de porta (como 0.0.0.0:80->80/tcp) porque network_mode: host usa as portas do host diretamente. Se nada aparecer, certifique-se de estar em /home/labex/project (pwd para verificar) e execute novamente docker-compose up -d.

Testar o Serviço Nginx na Rede Host

Agora que o contêiner está em execução com rede host, vamos testar se o Nginx serve páginas web na porta 80 do host – a porta web padrão.

No terminal em /home/labex/project, execute:

curl localhost:80

O que está acontecendo:

  • curl: Busca dados de um endereço web, como um navegador baseado em terminal.
  • localhost:80: Conecta-se à própria VM (localhost) na porta 80. Com network_mode: host, o Nginx do contêiner usa a rede do host, então sua porta 80 é a porta 80 do host.

Você deve ver HTML começando com <!DOCTYPE html> – a página de boas-vindas padrão do Nginx. Normalmente, o Docker isola as redes de contêineres, exigindo mapeamento de portas (por exemplo, porta 80 do host para a porta 80 do contêiner). O modo host ignora isso, permitindo que o Nginx se vincule diretamente à porta 80 da VM.

Se você receber "connection refused" (conexão recusada), verifique a Etapa 3 – execute docker ps para confirmar que o contêiner está "Up". Reinicie com docker-compose up -d se necessário, ou verifique o Docker com sudo service docker status. Sem navegador aqui, então curl é sua ferramenta de teste.

Explorar Logs e Limpar

Vamos verificar os logs do contêiner para ver o que está acontecendo dentro – uma habilidade chave de solução de problemas – e então limpar removendo-o.

Verificar Logs

Execute:

docker-compose logs web
  • docker-compose logs: Mostra a saída dos seus serviços.
  • web: Direciona o serviço web do docker-compose.yml.

Procure por linhas como "nginx starting" ou "listening on 0.0.0.0:80". Se você usou curl, pode ver "GET /" registrado. Erros (por exemplo, "port 80 failed") também seriam exibidos aqui – útil se o Nginx parar.

Limpar

Execute:

docker-compose down
  • docker-compose down: Para e remove o contêiner, liberando a porta 80 e organizando.

Verifique com:

docker ps

Nenhuma linha nginx significa que ele foi removido. Se persistir, execute novamente docker-compose down. O docker-compose.yml permanece, então você pode reiniciar mais tarde com docker-compose up -d. Isso encerra o ciclo de vida: configuração, implantação, teste e remoção.

Solução de Problemas e Melhores Práticas

Aqui está como lidar com soluços e usar o Docker Compose com sabedoria.

Dicas de Solução de Problemas

  • Contêiner Não Iniciando: Se docker ps estiver vazio, verifique docker-compose logs web para erros como "port in use" (porta em uso). Libere a porta 80 com sudo lsof -i :80 e sudo kill <PID>, então docker-compose up -d.
  • Nenhuma Resposta do curl: Confirme que o contêiner está em execução (docker ps) e que o Docker está rodando (sudo service docker status). Reinicie com docker-compose up -d ou sudo service docker restart.
  • Problemas com Arquivos: Se docker-compose up não conseguir encontrar o arquivo, verifique se você está em /home/labex/project (pwd) e se docker-compose.yml existe (ls).

Melhores Práticas

  • Limite o Uso de Rede Host: É simples, mas ignora o isolamento, arriscando a segurança se outros serviços estiverem em execução. Use-o para laboratórios, não para produção, a menos que seja necessário.
  • Verifique as Portas Antecipadamente: Teste com sudo netstat -tuln | grep :80 – limpe a porta 80 primeiro.
  • Mantenha os Arquivos: Salve docker-compose.yml em /home/labex/project para reutilização.
  • Monitore os Logs: Verifique regularmente os logs para identificar problemas precocemente.

Esses hábitos tornam seu trabalho com Docker confiável e ensinam habilidades essenciais.

Resumo

Você instalou o Docker Compose, criou um arquivo docker-compose.yml com rede host, implantou um contêiner Nginx, testou-o, verificou os logs e fez a limpeza. A rede host permite que os contêineres usem a rede do host diretamente, ignorando o isolamento do Docker – um truque poderoso. Essas etapas constroem uma base para gerenciar aplicativos Docker Compose e solucionar problemas, preparando você para projetos maiores.