CodeGym /Cursos /Docker SELF /Conexão entre containers

Conexão entre containers

Docker SELF
Nível 17 , Lição 2
Disponível

3.1 Básico de bridge network

A rede bridge é o driver de rede padrão no Docker e é usada para criar uma rede isolada onde os containers podem interagir entre si. Essa rede permite que os containers se comuniquem por endereços IP e nomes de host, oferecendo uma forma prática de organizar a interação entre diferentes componentes de aplicações multicontainer.

A rede bridge cria uma rede interna privada no nível do host, que é isolada da rede externa do host. Containers conectados a essa rede podem interagir uns com os outros, mas não podem ser acessados diretamente de fora sem configuração de redirecionamento de portas.

Criação automática da bridge network

Por padrão, o Docker cria a rede bridge durante a instalação, e os containers que são iniciados sem a especificação de uma rede específica são automaticamente conectados a essa rede.

Exemplo de criação e uso de containers em uma bridge network

1. Executando containers na rede bridge:

Neste exemplo, executamos dois containers: container1 com Nginx e container2 com Busybox. Ambos os containers estão conectados à rede bridge padrão.

Terminal

docker run -d --name container1 nginx
docker run -d --name container2 busybox sleep 1000

2. Verificando os endereços IP dos containers:

Para verificar os endereços IP dos containers, use o comando docker inspect.

Esses comandos exibirão os endereços IP dos containers, que podem ser usados para estabelecer comunicação entre eles.

Terminal

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container1
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container2

3. Comunicação entre containers por endereço IP:

Para testar a comunicação entre containers, use o comando ping do container container2 para pingar o container1.

Se os containers estiverem devidamente conectados à rede bridge, o comando ping será bem-sucedido.

Terminal

docker exec container2 ping -c 4 <IP_ADDRESS_OF_CONTAINER1>

Explicação: A rede bridge oferece uma solução simples para aplicações locais em que os containers precisam interagir entre si, permanecendo isolados da rede externa. O ping por endereço IP é uma forma básica de verificar a conexão de rede, mas para aplicações mais complexas pode ser necessário configurar DNS ou drivers de rede adicionais.

3.2 Uso de nomes de host

Usando nomes de host para conexão entre containers

Além de usar endereços IP, o Docker também permite usar nomes de containers para conectá-los. Isso facilita a configuração, pois os nomes dos containers permanecem constantes, ao contrário dos endereços IP, que podem mudar ao reiniciar os containers.

Exemplo de conexão usando nome de host

1. Rodando containers especificando a rede bridge:

Terminal

docker run -d --name webserver --network bridge nginx
docker run -d --name appserver --network bridge busybox sleep 1000
    

2. Testando a conexão pelo nome de host:

Use o comando ping do container appserver para "pingar" o webserver:

Terminal

docker exec appserver ping -c 4 webserver 
    

Criando uma bridge network personalizada

Em vez de usar a rede bridge padrão, você pode criar uma rede bridge personalizada para ter mais controle sobre a interação entre containers.

Exemplo de criação de rede personalizada

1. Criando uma rede personalizada:

Terminal

docker network create --driver bridge my_bridge_network 
    

2. Rodando containers na rede personalizada:

Terminal

docker run -d --name webserver --network my_bridge_network nginx
docker run -d --name appserver --network my_bridge_network busybox sleep 1000 
    

3. Testando a conexão pelo nome de host:

Terminal

docker exec appserver ping -c 4 webserver 
    

3.3 Exemplos com múltiplos hosts

Exemplos práticos de uso

Exemplo 1: Servidor web e banco de dados

Crie um arquivo docker-compose.yml para o servidor web e o banco de dados:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    networks:
      - my_bridge_network
        
  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    networks:
      - my_bridge_network
        
networks:
  my_bridge_network:
    driver: bridge

Inicie o Docker Compose:

Terminal


docker compose up -d 

Teste a conexão entre os containers:

Terminal


docker compose exec web ping -c 4 db 

Exemplo 2: Arquitetura de microsserviços

Crie um arquivo docker-compose.yml para a aplicação de microsserviços:

Yaml

version: '3.8'

services:
  frontend:
    image: nginx:latest
    networks:
      - my_bridge_network
        
  backend:
    image: mybackend:latest
    networks:
      - my_bridge_network
        
  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    networks:
      - my_bridge_network
        
networks:
  my_bridge_network:
    driver: bridge

Inicie o Docker Compose:

Terminal

        
docker compose up -d 

Teste a conexão entre os containers:

Terminal

docker compose exec backend ping -c 4 db

docker compose exec frontend ping -c 4 backend 
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION