Docker Networking - Explore como os contêineres se comunicam entre si



Saiba tudo sobre os recursos de rede do Docker com uma compreensão do modelo de rede de contêiner e implementando-o com uma prática.

No mundo de hoje, as empresas estão interessadas em conteinerização, o que requer fortes habilidades de rede para configurar adequadamente uma arquitetura de contêiner e, portanto, isso introduz o conceito de Rede Docker.

Neste blog sobre Docker Networking, você percorrerá os seguintes tópicos:





O que é Docker?

Para entender o Docker, você precisa saber sobre a história de como os aplicativos eram implantados antes e como os aplicativos estão sendo implantados usando contêineres agora.

Implantação de aplicativos da maneira antiga e nova - Docker Networking - Edureka



Como você pode ver no diagrama acima, a maneira antiga tinha aplicativos no host.Portanto, um número n de aplicativos compartilha as bibliotecas presentes nesse sistema operacional.Mas, com a conteinerização, o sistema operacional terá um kernel que é a única coisa que será comum entre todos os aplicativos.Portanto, os aplicativos não podem acessar as bibliotecas uns dos outros.

Assim, Docker em termos simples é uma plataforma aberta para desenvolver, enviar e executar aplicativos, permitindo ao usuário separar aplicativos de infraestruturas com a ajuda de recipientes para entregar software rapidamente.

Então, como esses contêineres se comunicam entre si em várias situações?



Bem, isso vem através do Docker Networking.

Rede Docker

Antes de me aprofundar no Docker Networking, deixe-me mostrar o fluxo de trabalho do Docker.

java como converter double para int

Como você pode ver no diagrama acima. Um desenvolvedor escreve um código que estipula os requisitos do aplicativo ou as dependências em um arquivo Docker fácil de escrever e esse arquivo Docker produz imagens Docker. Portanto, quaisquer dependências necessárias para um determinado aplicativo estão presentes nesta imagem.

Agora, Docker Containers nada mais são do que a instância de tempo de execução do Docker Image. Essas imagens são carregadas no Docker Hub (repositório Git para imagens Docker) que contém repositórios públicos / privados.

Portanto, a partir de repositórios públicos, você também pode extrair sua imagem e enviar suas próprias imagens para o Docker Hub. Em seguida, a partir do Docker Hub, várias equipes, como as de Garantia de Qualidade ou de Produção, obterão essa imagem e prepararão seus próprios contêineres. Esses contêineres individuais comunicam-se uns com os outros por meio de uma rede para executar as ações necessárias, e isso nada mais é do que Rede Docker.

Portanto, você pode definir o Docker Networking como uma passagem de comunicação por meio da qual todos os contêineres isolados se comunicam entre si em várias situações para executar as ações necessárias.

Quais você acha que são os objetivos do Docker Networking?

Objetivos da Docker Networking

Flexibilidade - O Docker oferece flexibilidade ao permitir que qualquer número de aplicativos em várias plataformas se comuniquem entre si.

Multiplataforma - O Docker pode ser facilmente usado em plataforma cruzada que funciona em vários servidores com a ajuda de Docker Swarm Clusters.

Escalabilidade - Docker é uma rede totalmente distribuída, que permite que os aplicativos cresçam e escalem individualmente, garantindo o desempenho.

Descentralizado - Docker usa uma rede descentralizada, o que permite a capacidade de espalhar os aplicativos e altamente disponíveis. No caso de um contêiner ou host sumir repentinamente de seu pool de recursos, você pode ativar um recurso adicional ou passar para os serviços que ainda estão disponíveis.

Amigo do usuário - O Docker facilita a automação da implantação de serviços, tornando-os fáceis de usar no dia-a-dia.

Apoio, suporte - Docker oferece suportes prontos para uso. Portanto, a capacidade de usar o Docker Enterprise Edition e obter todas as funcionalidades de forma muito fácil e direta, torna a plataforma Docker muito fácil de ser usada.

Para habilitar os objetivos acima, você precisa de algo conhecido como Container Network Model.

Quer explorar vários estágios de DevOps?

Modelo de rede de contêiner (CNM)

Antes de dizer o que exatamente é um modelo de rede de contêiner, deixe-me informá-lo sobre a Libnetwork necessária antes de você entender o CNM.

Libnetwork é uma biblioteca Docker de código aberto que implementa todos os conceitos-chave que compõem o CNM.

Assim, Modelo de rede de contêiner (CNM) padroniza as etapas necessárias para fornecer rede para contêineres usando vários drivers de rede. O CNM requer um armazenamento de valor-chave distribuído como um console para armazenar a configuração de rede.

O CNM tem interfaces para plug-ins IPAM e plug-ins de rede.

As APIs de plug-in IPAM são usadas para criar / excluir pools de endereços e alocar / desalocar endereços IP de contêineres, enquanto as APIs de plug-ins de rede são usadas para criar / excluir redes e adicionar / remover contêineres de redes.

Um CNM se baseia principalmente em 5 objetos: Controlador de rede, Driver, Rede, Terminal e Sandbox.

Objetos de modelo de rede de contêiner

Controlador de rede: Fornece o ponto de entrada para Libnetwork que expõe APIs simples para Docker Engine para alocar e gerenciar redes. Visto que Libnetwork oferece suporte a vários drivers integrados e remotos, o Network Controller permite que os usuários conectem um driver específico a uma determinada rede.

Motorista: Possui a rede e é responsável por gerenciar a rede, tendo vários drivers participando para satisfazer vários casos de uso e cenários de implantação.

Rede: Fornece conectividade entre um grupo de terminais que pertencem à mesma rede e são isolados do resto. Assim, sempre que uma rede for criada ou atualizada, o Driver correspondente será notificado do evento.

Ponto final: Fornece a conectividade para serviços expostos por um contêiner em uma rede com outros serviços fornecidos por outros contêineres na rede. Um endpoint representa um serviço e não necessariamente um contêiner específico. Endpoint também possui um escopo global dentro de um cluster.

Caixa de areia: Criado quando os usuários solicitam a criação de um endpoint em uma rede. Um Sandbox pode ter vários pontos de extremidade anexados a diferentes redes que representam a configuração de rede do contêiner, como endereço IP, endereço MAC, rotas, DNS.

Então, esses foram os 5 objetos principais do CNM.

Agora, deixe-me contar a você os vários drivers de rede envolvidos na rede Docker.

Quer levar o aprendizado de DevOps a um próximo nível?

Drivers de rede

Existem principalmente 5 drivers de rede: Bridge, Host, None, Overlay, Macvlan

Ponte: A rede de ponte é uma rede interna padrão privada criada pelo docker no host. Assim, todos os containers recebem um endereço IP interno e esses containers podem acessar uns aos outros, usando este IP interno. As redes Bridge geralmente são usadas quando seus aplicativos são executados em contêineres autônomos que precisam se comunicar.

Hospedeiro : Este driver remove o isolamento de rede entre o host docker e os containers docker para usar a rede do host diretamente. Portanto, com isso, você não poderá executar vários contêineres da web no mesmo host, na mesma porta em que a porta agora é comum a todos os contêineres na rede do host.

o que são chef e fantoches

Nenhum : Neste tipo de rede, os containers não estão conectados a nenhuma rede e não têm acesso à rede externa ou outros containers. Então, essa rede é usada quandovocê deseja desabilitar completamente a pilha de rede em um contêiner e,apenas crie um dispositivo de loopback.

Sobreposição : Cria uma rede privada interna que se estende por todos os nós que participam do cluster swarm. Portanto, as redes de sobreposição facilitam a comunicação entre um serviço de swarm e um contêiner independente, ou entre dois contêineres independentes em diferentes Docker Daemons.

Macvlan: Permite que você atribua um endereço MAC a um contêiner, fazendo-o aparecer como um dispositivo físico em sua rede. Em seguida, o daemon Docker roteia o tráfego para contêineres por meio de seus endereços MAC. O driver Macvlan é a melhor escolha quando se espera que você esteja conectado diretamente à rede física, em vez de roteado pela pilha de rede do host Docker.

Tudo bem, essa era toda a teoria necessária para entender o Docker Networking. Agora, deixe-me seguir em frente e mostrar a você praticamente como as redes são criadas e os contêineres se comunicam.

Mãos em

Portanto, presumindo que todos vocês instalaram o Docker em seus sistemas, tenho um cenário para mostrar.

Suponha que você queira armazenar o nome e a ID dos cursos, para os quais precisará de um aplicativo da web. Basicamente, você precisa de um contêiner para o aplicativo da web e mais um contêiner como MySQL para o back-end, esse contêiner do MySQL deve ser vinculado ao contêiner do aplicativo da web.

Que tal eu executar o exemplo acima mencionado de forma prática.

Etapas envolvidas:

  • Inicialize o Docker Swarm para formar um cluster Swarm.
  • Crie uma rede de sobreposição
  • Crie serviços para aplicativos da web e MySQL
  • Conecte os aplicativos através da rede

Vamos começar!

Passo 1: Inicialize o Docker Swarm na máquina.

docker swarm init --advertise-addr 192.168.56.101

O sinalizador –advertise-addr configura o nó do gerenciador para publicar seu endereço como 192.168.56.101. Os outros nós do enxame devem ser capazes de acessar o gerenciador no endereço IP.

Passo 2: Agora, se você deseja unir este nó gerenciador ao nó trabalhador, copie o link que você obtém quando inicializa o swarm no nó trabalhador.
Etapa 3: Crie uma rede de sobreposição.

docker network create -d overlay myoverlaynetwork

Onde myoverlay é o nome da rede e -d permite que o Docker Daemon seja executado em segundo plano.

Etapa 4.1: Crie um serviço webapp1 e use a rede que você criou para implantar este serviço no cluster swarm.

docker service create --name webapp1 -d --network myoverlaynetwork -p 8001: 80 hshar / webapp

Onde -pé para encaminhamento de porta,hsharé o nome da conta no Docker Hub e webapp é o nome do aplicativo da web já presente no Docker Hub.

Etapa 4.2: Agora, verifique se o serviço foi criado ou não.

serviço docker ls

como definir o classpath no linux

Etapa 5.1: Agora, crie um serviço MySQL e use a rede que você criou para implantar o serviço no cluster swarm.

docker service create --name mysql -d --network myoverlaynetwork -p 3306: 3306 hshar / mysql: 5.5


Etapa 5.2: Agora, verifique se o serviço foi criado ou não.

serviço docker ls

Etapa 6.1: Depois disso, verifique qual contêiner está em execução em seu nó mestre e vá para o contêiner hshar / webapp.

docker ps

Etapa 6.2: Portanto, você pode ver que apenas o serviço webapp está no nó do gerenciador. Então, entre no contêiner do webapp.

docker exec -it container_id bash nano var / www / html / index.php

O comando docker ps listará os dois contêineres com seus respectivos ids. O segundo comando habilitará esse contêiner em um modo interativo.

Etapa 7: Agora, mude o $ servername de localhost para mysql e $ password de “” ”para“ edureka ”, e também mude todos os dados de banco de dados necessários e salve seu arquivo index.php usando o atalho de teclado Ctrl + x e depois disso y para salvar e pressione enter.

Etapa 8: Agora, vá para o contêiner mysql que está sendo executado em outro nó.

docker exec -it container_id bash

Etapa 9: Depois de entrar no contêiner mysql, digite os comandos abaixo para usar o banco de dados no MySQL.

Etapa 9.1: Obtenha acesso para usar o contêiner mysql.

mysql -u root -pedureka

Onde -u representa o usuário e -p é a senha de sua máquina.

Etapa 9.2: Crie um banco de dados no mysql que será usado para obter dados do webapp1.

CRIAR BANCO DE DADOS HandsOn

Etapa 9.3: Use o banco de dados criado.

USE O HandsOn

Etapa 9.4: Crie uma tabela neste banco de dados que será usada para obter dados do webapp1.

CRIAR TABELA course_details (course_name VARCHAR (10), course_id VARCHAR (11))

Etapa 9.5: Agora, saia do MySQL e do contêiner usando o comando Saída .

Etapa 10: Vá para o seu navegador e digite o endereço como localhost: 8001 / index.php . Isso abrirá seu aplicativo da web. Agora, insira os detalhes dos cursos e clique em Enviar consulta .

Etapa 11: Depois de clicar em Enviar consulta, vá para o nó em que o serviço MySQL está em execução e entre no contêiner.

docker exec -it container_id bash mysql -u root -pedureka USE tabelas HandsOn SHOW select * from course_details

Isso mostrará o resultado de todos os cursos, dos quais você preencheu os detalhes.

Aqui, termino meu blog do Docker Networking. Espero que você tenha gostado desse post. Você pode checar outros blogs na série também, que trata dos fundamentos do Docker.

Se você achou este blog do Docker Container relevante, verifique o por Edureka, uma empresa de aprendizagem online confiável com uma rede de mais de 450.000 alunos satisfeitos espalhados por todo o mundo. O curso Edureka DevOps Certification Training ajuda os alunos a obter experiência em vários processos e ferramentas DevOps, como Puppet, Jenkins, Docker, Nagios, Ansible e GIT para automatizar várias etapas no SDLC.

Procurando certificação em DevOps?

Tem uma pergunta para mim? Mencione isso na seção de comentários e entrarei em contato com você.