Como configurar redes para contêineres Docker

DockerBeginner
Pratique Agora

Introdução

O Docker tornou-se uma tecnologia amplamente adotada para a contenção de aplicações, mas a gestão da rede de contentores Docker pode ser uma tarefa crucial, mas complexa. Este tutorial guiará você através do processo de configuração da rede para seus contentores Docker, cobrindo os fundamentos das redes Docker, a configuração de drivers de rede e a conexão de contentores aos hosts.

Fundamentos de Rede Docker

Compreendendo as Redes Docker

O Docker fornece vários tipos de drivers de rede que permitem configurar a rede para seus contêineres. O driver de rede padrão é o driver bridge, que cria uma ponte virtual na máquina hospedeira e conecta cada contêiner a ela. Isso permite que os contêineres se comuniquem entre si e com a máquina hospedeira.

graph LR Host -- Ponte de Rede --> Container1 Host -- Ponte de Rede --> Container2 Container1 -- Ponte de Rede --> Container2

Além do driver bridge, o Docker também suporta outros drivers de rede, como host, overlay, macvlan e none. Cada driver possui seus próprios casos de uso e características, que exploraremos na próxima seção.

Tipos de Drivers de Rede

  1. Bridge: O driver de rede padrão, que cria uma ponte virtual na máquina hospedeira e conecta os contêineres a ela.
  2. Host: Permite que um contêiner utilize diretamente a pilha de rede do host, contornando a rede virtual.
  3. Overlay: Permite a comunicação entre contêineres em vários hosts Docker, criando uma rede distribuída.
  4. Macvlan: Permite que os contêineres recebam um endereço MAC, fazendo com que eles apareçam como dispositivos físicos na rede.
  5. None: Desabilita a rede para um contêiner, isolando-o da rede.

Cada driver de rede possui suas próprias vantagens e casos de uso. Por exemplo, o driver host é útil para aplicações sensíveis ao desempenho, enquanto o driver overlay é essencial para a construção de aplicações distribuídas em vários hosts.

graph LR Host -- Bridge --> Container1 Host -- Host --> Container2 Host1 -- Overlay --> Container3 Host2 -- Overlay --> Container4 Host -- Macvlan --> Container5 Host -- None --> Container6

Compreender os diferentes drivers de rede e seus casos de uso é crucial para configurar a rede em seu ambiente Docker.

Configurando Drivers de Rede

Configurando a Rede Bridge

A rede bridge é o driver de rede padrão no Docker. Para criar uma nova rede bridge, você pode usar o seguinte comando:

docker network create my-bridge-network

Em seguida, você pode conectar um contêiner à nova rede bridge usando a flag --network:

docker run -d --name my-container --network my-bridge-network nginx

Contêineres na mesma rede bridge podem se comunicar entre si usando o nome do contêiner ou o endereço IP do contêiner.

Configurando a Rede Host

Para usar o driver de rede host, você pode iniciar um contêiner com a flag --network host:

docker run -d --name my-host-container --network host nginx

Ao usar a rede host, o contêiner compartilhará a pilha de rede do host, permitindo que acesse as interfaces de rede e as portas do host diretamente.

Configurando a Rede Overlay

Para criar uma rede overlay, você primeiro precisa inicializar um cluster Docker Swarm. Depois que o Swarm estiver configurado, você pode criar uma rede overlay com o seguinte comando:

docker network create --driver overlay my-overlay-network

Os contêineres podem então ser conectados à rede overlay usando a flag --network, assim como com a rede bridge.

docker run -d --name my-overlay-container --network my-overlay-network nginx

As redes overlay permitem a comunicação entre contêineres em vários hosts Docker.

Configurando a Rede Macvlan

Para usar o driver de rede macvlan, você precisa especificar a interface pai no host. Você pode criar uma nova rede macvlan com o seguinte comando:

docker network create -d macvlan --subnet=172.16.86.0/24 --gateway=172.16.86.1 -o parent=eth0 my-macvlan-network

Os contêineres podem então ser conectados à rede macvlan usando a flag --network.

docker run -d --name my-macvlan-container --network my-macvlan-network nginx

As redes Macvlan permitem que os contêineres tenham seus próprios endereços MAC, fazendo com que eles apareçam como dispositivos físicos na rede.

Compreendendo como configurar esses diferentes drivers de rede, você pode escolher a solução mais adequada para suas aplicações baseadas em Docker.

Conectando Contêineres e Hosts

Expondo Portas de Contêiner

Para permitir acesso externo a um serviço em execução dentro de um contêiner, você precisa expor a porta do contêiner. Isso pode ser feito usando a flag -p ou --publish ao iniciar um contêiner:

docker run -d -p 80:80 --name my-web-server nginx

No exemplo acima, a porta 80 na máquina hospedeira é mapeada para a porta 80 dentro do contêiner. Isso permite que clientes acessem o servidor web Nginx em execução no contêiner.

Ligando Contêineres

Você também pode conectar contêineres entre si usando a flag --link. Isso permite que um contêiner acesse as variáveis de ambiente e informações de rede de outro contêiner.

docker run -d --name my-db-server mysql
docker run -d --name my-app-server --link my-db-server:db nginx

Neste exemplo, o contêiner my-app-server pode acessar o contêiner my-db-server usando o apelido db.

Usando Docker Compose

Docker Compose é uma ferramenta que simplifica o processo de definir e executar aplicações multi-contêiner. Você pode usar o Compose para definir a configuração de rede e os relacionamentos de contêiner em um arquivo YAML.

Aqui está um exemplo de arquivo docker-compose.yml:

version: "3"
services:
  web:
    image: nginx
    ports:
      - "80:80"
    networks:
      - my-network
  db:
    image: mysql
    networks:
      - my-network
networks:
  my-network:
    driver: bridge

Neste exemplo, os serviços web e db estão conectados à rede bridge my-network, permitindo que se comuniquem entre si.

Compreendendo como expor portas de contêiner, conectar contêineres e usar o Docker Compose, você pode conectar seus contêineres e hosts de forma eficaz para construir aplicações distribuídas e complexas.

Resumo

Ao final deste tutorial, você terá um conhecimento abrangente sobre redes Docker e será capaz de configurar as configurações de rede de seus contêineres de forma eficaz. Você aprenderá como aproveitar diferentes drivers de rede, conectar seus contêineres aos hosts e otimizar o desempenho geral de rede de suas aplicações baseadas em Docker.