# Redes de comunicação no [[Docker]] > [!NOTE] Redes de comunicação no [[Docker]] > As redes no [[Docker]] são o mecanismo fundamental que permite a comunicação entre contêineres, bem como a comunicação entre contêineres e o mundo exterior. Elas garantem o isolamento e a conectividade necessários para aplicações distribuídas. As redes permitem a comunicação entre múltiplos contêineres na mesma rede. Por padrão, o [[Docker]] mantém cada contêiner em uma rede isolada, garantindo que eles não se comuniquem a menos que explicitamente configurado. Para facilitar a construção e gerenciamento de redes complexas, o [[Docker Compose]] é uma ferramenta essencial. **:: Referência ::** [Site oficial do Docker](https://www.docker.com/) ## Tipos de Redes [[Docker]] O [[Docker]] oferece diversos drivers de rede, cada um com um propósito específico: ### 1. Rede Bridge (Padrão) - **Descrição:** É a rede padrão para novos contêineres. Contêineres conectados à mesma rede bridge podem se comunicar. * **Uso:** Ideal para aplicações de contêiner único ou pequenos grupos de contêineres que precisam se comunicar no mesmo host. * **Exemplo:** ```bash docker run --name meu-servidor-web --network bridge -p 80:80 meu-servidor-web-imagem docker run --name meu-banco-dados --network bridge meu-banco-dados-imagem ``` ### 2. Rede Host - **Descrição:** Remove o isolamento de rede entre o contêiner e o host [[Docker]]. O contêiner usa diretamente a pilha de rede do host. - * **Uso:** Para casos de uso específicos onde o desempenho da rede é crítico ou quando o contêiner precisa acessar serviços de rede diretamente no host. - * **Cuidado:** Menos seguro, pois o contêiner tem acesso total às interfaces de rede do host. ### 3. Rede None - **Descrição:** Desabilita completamente a rede para o contêiner. O contêiner não tem interfaces de rede. - * **Uso:** Para contêineres que não precisam de conectividade de rede, como tarefas de processamento de arquivos locais. ### 4. Redes Personalizadas (User-defined Bridge Networks) - **Descrição:** Criadas pelo usuário, oferecem melhor isolamento e descoberta de serviço automática por nome. - _Vantagens:_ - **Descoberta de Serviço Automática:** Contêineres podem se referir uns aos outros pelo nome do contêiner ou do serviço. - **Melhor Isolamento:** Contêineres em redes diferentes não podem se comunicar por padrão. - _Configuração DNS:_* O [[Docker]] fornece um servidor DNS interno para resolução de nomes. - _Como Criar:_ `bash docker network create minha-rede-app` - **Como Usar:** ```bash docker run --name app-frontend --network minha-rede-app -p 8080:80 app-frontend-imagem docker run --name app-backend --network minha-rede-app app-backend-imagem ``` ## Redes com [[Docker Compose]] O [[Docker Compose]] simplifica a gestão de redes para aplicações multi-contêiner. Por padrão, ele cria uma rede bridge para todos os serviços definidos no arquivo `docker-compose.yml`, permitindo que eles se comuniquem usando seus nomes de serviço. **Exemplo de `docker-compose.yml`:** ```yaml version: '3.8' services: web: image: nginx ports: - "80:80" networks: - app-network db: image: postgres environment: POSTGRES_DB: mydb POSTGRES_USER: user POSTGRES_PASSWORD: password networks: - app-network networks: app-network: driver: bridge