# 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