Gerenciamento de Redes no Docker

 Uma das principais diferenças entre uma rede no Docker e uma rede convencional é a simplicidade. Com a rede no Docker, os usuários podem gerenciar facilmente a comunicação entre containers e os nós externos ao ambiente Docker sem se preocupar com os detalhes técnicos da rede. Isso é possível graças à camada de abstração fornecida pelo Docker, que cuida dos detalhes da rede para você.

Isso significa que o Docker fornece uma camada de abstração que permite aos usuários gerenciar facilmente a comunicação entre containers e outros nós sem se preocupar com os detalhes técnicos da rede subjacente. Em vez disso, o Docker cuida desses detalhes, permitindo que se concentre em desenvolver aplicativos.

Essa camada de abstração é possível graças aos drivers de rede fornecidos pelo Docker. O Docker fornece vários drivers de rede que permitem aos usuários criar redes personalizadas para atender às necessidades específicas de seus aplicativos. Além disso, o Docker cuida da conectividade e descoberta de serviços para você.

Em contrapartida, configurar uma rede convencional pode ser um processo complexo e demorado. É necessário entender os detalhes técnicos da rede e configurar manualmente vários componentes, como switches, roteadores e firewalls. Além disso, é necessário gerenciar a conectividade e descoberta de serviços manualmente, o que pode ser um processo complexo e propenso a erros.

Uma das razões pelas quais os containers e serviços do Docker são tão poderosos é que você pode conectá-los entre si ou conectá-los a cargas de trabalho não-Docker. Os containers e serviços do Docker nem mesmo precisam estar cientes de que estão sendo implantados no Docker ou se seus pares também são cargas de trabalho do Docker ou não. Isso é possível graças à abstração de rede fornecida pelo Docker.

O subsistema de rede do Docker é conectável, usando drivers. Existem vários drivers de rede disponíveis por padrão, como bridge, host, overlay, ipvlan e macvlan. Existem vários drivers de rede disponíveis por padrão no Docker, cada um com suas próprias funcionalidades e usos:

Bridge: É a rede padrão que o Docker usa quando você inicia um novo container. Os containers conectados a essa rede podem se comunicar uns com os outros e também com o host Docker. Essa rede também permite que os containers acessem a Internet. As redes bridge geralmente são usadas quando suas aplicações são executadas em uma única máquina host em containers autônomos que precisam se comunicar.

Host: Para containers autônomos, remove o isolamento de rede entre o container e o host do Docker e usa a rede do host diretamente. Isso pode ser útil para casos de uso específicos onde o desempenho da rede é crítico. Como o container compartilha a pilha de rede do host, não há sobrecarga adicional de rede ao enviar dados entre o container e o host.

None: Quando um container é conectado à rede none, ele não tem acesso à rede externa. Essa opção é útil quando você deseja isolar completamente um container da rede.

Overlay: As redes overlay conectam vários daemons do Docker juntos e permitem que os serviços swarm se comuniquem entre si. Você também pode usar redes overlay para facilitar a comunicação entre um serviço swarm e um container autônomo ou entre dois containers autônomos em diferentes daemons do Docker. É usado para conectar containers em diferentes máquinas host.

Macvlan: As redes macvlan permitem atribuir um endereço MAC a um container, fazendo com que ele pareça um dispositivo físico em sua rede. O daemon do Docker roteia o tráfego para os containers por seus endereços MAC. Usar o driver macvlan às vezes é a melhor escolha ao lidar com aplicativos legados que esperam estar conectados diretamente à rede física, em vez de serem roteados através da pilha de rede do host do Docker.

Ipvlan: As redes ipvlan permitem aos usuários controle total sobre o endereçamento IPv4 e IPv6.

Esses drivers permitem que você crie redes personalizadas para atender às necessidades específicas de seus aplicativos. Quando você instala o Docker Engine, ele cria automaticamente 3 redes: bridge, host e none.

Comando docker network

O comando docker network é usado para gerenciar redes no Docker. Aqui estão algumas das opções mais comuns usadas com este comando:

docker network create: Cria uma nova rede.

docker network connect: Conecta um container a uma rede.

docker network disconnect: Desconecta um container de uma rede.

docker network ls: Lista todas as redes disponíveis.

docker network inspect: Exibe informações detalhadas sobre uma rede específica.

docker network rm: Remove uma rede.


Exemplo de utilização de rede no Docker:

Vamos imaginar que você está desenvolvendo um aplicativo web que consiste em um front-end, um back-end e um banco de dados. Cada componente do aplicativo é executado em um container Docker separado. Você deseja que os containers se comuniquem entre si para que o front-end possa enviar solicitações ao back-end e o back-end possa acessar o banco de dados.

Sem a rede no Docker, você teria que configurar manualmente a rede para permitir a comunicação entre os containers. Isso pode ser um processo complexo e demorado que requer conhecimento técnico sobre redes.

Com a rede no Docker, no entanto, você pode facilmente criar uma rede personalizada para atender às necessidades de seu aplicativo. Aqui está um exemplo de como usar a rede bridge do Docker para conectar dois containers:

Inicie o primeiro container e atribua a ele um nome:

docker run -dit --name container1 ubuntu

Inicie o segundo container e conecte-o à rede bridge do primeiro container:

docker run -dit --name container2 --network container:container1 ubuntu

Agora você pode usar o comando docker exec para executar comandos em cada container e verificar se eles podem se comunicar entre si. Por exemplo, você pode instalar o ping em cada container e usá-lo para verificar a conectividade de rede:

docker exec -it container1 apt-get update

docker exec -it container1 apt-get install -y iputils-ping

docker exec -it container2 apt-get update

docker exec -it container2 apt-get install -y iputils-ping

Em seguida, obtenha o endereço IP do primeiro container:

docker exec -it container1 hostname -i

Use o comando ping no segundo container para verificar a conectividade com o primeiro container:

docker exec -it container2 ping <IP do primeiro container>

Você deve ver as respostas do ping indicando que os dois containers podem se comunicar entre si através da rede bridge.

Noutro exemplo, você pode criar uma rede bridge para conectar os containers em uma única máquina host. O Docker cuida da conectividade e descoberta de serviços para você, permitindo que seus containers se comuniquem entre si sem que você precise se preocupar com os detalhes da rede.

Para criar a rede bridge, você pode usar o seguinte comando:

docker network create --driver bridge my-bridge-network

Em seguida, você pode conectar cada container à rede recém-criada usando o seguinte comando:

docker network connect my-bridge-network <container-name>

Agora seus containers podem se comunicar entre si usando a rede bridge criada. O front-end pode enviar solicitações ao back-end e o back-end pode acessar o banco de dados sem que você precise se preocupar com os detalhes da rede.

Esse é apenas um exemplo simples de como a camada de abstração fornecida pela rede no Docker simplifica a complexidade da rede subjacente e permite que os usuários gerenciem facilmente a comunicação entre containers e outros nós.

No exemplo destacado abaixo, uma rede bridge Docker é criada e dois containers são anexados a ela. Sem configuração extra, o Docker Engine faz a fiação necessária, fornece descoberta de serviço para os containers e configura regras de segurança para evitar a comunicação com outras redes.

docker network create -d bridge mybridge

docker run -d --net mybridge --name db redis

docker run -d --net mybridge -e DB=db -p 8000:5000 --name web chrch/web

Aqui está uma explicação de cada linha de comando do exemplo acima:

docker network create -d bridge mybridge

Este comando cria uma rede bridge chamada “mybridge” usando o driver de rede bridge do Docker.

docker run -d --net mybridge --name db redis

Este comando executa um container em segundo plano (-d) usando a imagem “redis”. O container é conectado à rede “mybridge” (--net mybridge) e recebe o nome “db” (--name db).

docker run -d --net mybridge -e DB=db -p 8000:5000 --name web chrch/web

Este comando executa um container em segundo plano (-d) usando a imagem “chrch/web”. O container é conectado à rede “mybridge” (--net mybridge), recebe o nome “web” (--name web), define a variável de ambiente “DB” como “db” (-e DB=db) e mapeia a porta 8000 do host para a porta 5000 do container (-p 8000:5000).

Para testar o acesso à aplicação do exemplo anterior via navegador, você pode seguir os seguintes passos:

Abra um navegador da web e digite o endereço IP do host e a porta mapeada na barra de endereço. No exemplo anterior, a porta 8000 foi mapeada para o container do front-end, então você deve usar essa porta.

Por exemplo, se o endereço IP do host for 192.168.1.100, você pode acessar a aplicação usando a URL http://192.168.1.100:8000. Se você estiver executando o Docker em sua máquina local, você também pode usar localhost ou 127.0.0.1 como endereço IP do host.

2. Pressione Enter para acessar a aplicação. Se tudo estiver configurado corretamente, você deve ver a página inicial da aplicação.

Em resumo, a rede no Docker é uma abstração poderosa que permite gerenciar facilmente a comunicação entre containers e nós externos ao ambiente Docker. Com vários drivers de rede disponíveis e a capacidade de criar suas próprias redes personalizadas, você tem controle total sobre como seus aplicativos se comunicam entre si.

Comentários

Postagens mais visitadas deste blog

Proteja-se Contra o Phishing: Dicas Essenciais para Evitar Armadilhas Online e Manter-se Seguro