Docker compor rede de ponte

Docker compor rede de ponte
Docker Compose é uma maneira fácil de implantar aplicativos multi-containers. Ele automatiza muitas das reservas de reserva, networking e gerenciamento de recursos de aplicativos em um único docker-composição do Docker.Arquivo YML. Você pode aumentar o aplicativo executando o Docker-Compose para cima e volte-o para baixo usando o Docker-Compose Down.

Muito é adicionado ao nosso ambiente do Docker, que é esquecido e depois excluído com o último comando. Um dos objeto mais importante é uma rede de pontes. É nisso que nos concentraremos. Mais precisamente, redes de ponte.

Docker Bridge Network

Docker tem muitos motoristas relacionados a redes. Dois dos mais importantes são o motorista da rede de pontes e sobrepõe um. Este último é usado para o modo de enxame do Docker, onde os contêineres que atropelam nós diferentes ainda podem fazer parte da sub -rede abstrata única. Rede de pontes, no entanto, é a que nos interessa aqui.

Para criar uma nova rede Docker chamada My-Network e inspecione-a, execute:

$ Docker Network Create -D Bridge My -Network
$ Docker Inspecione minha rede

Você verá, entre outras coisas, uma máscara de sub -rede e um gateway padrão.

..
"Config": [

"Subnet": "172.18.0.0/16 ",
"Gateway": "172.18.0.1 "

..

Qualquer contêiner que se conecte a esta rede receberá um IP no intervalo de 172.18.0.2 a 172.18.255.254. Vamos tentar criar alguns contêineres nesta rede:

$ DOCKER RUN -DIT -NAME container1 -Network My -Network Ubuntu: mais recente
$ DOCKER RUN -DIT -Nome Container2 -Network My -Network Ubuntu: mais recente

Se você executar agora, inspecione a minha rede, notará que os contêineres individuais com o nome adequado e os endereços IP correspondentes aparecem no campo de contêineres da saída JSON.

$ Docker Inspecione minha rede
..
"Containers":
"8CE5CD67E6AED180B5D0B6B0FCD597175D6154C9208DAA9DE304AEC94757E99B":
"Nome": "Container1",
"EndpointId": "93D020D22172D6C98A0B88E78A7A01F6D1A3D44B983E7454FBA7C1F1BE5FAE9D",
"Macaddress": "02: 42: AC: 12: 00: 02",
"IPv4Address": "172.18.0.2/16 ",
"IPv6Address": ""
,
"AF1434DF6F86D2DF96ACA1D7348DD6C815A4989EC07FB0F3CFEA95D4A38B4F74":
"Nome": "Container2",
"EndpointId": "3A5F57639C71685A10584FD392C20ABC5AE693684860BEF486404D26B332395A",
"MacAdress": "02: 42: AC: 12: 00: 03",
"IPv4Address": "172.18.0.3/16 ",
"IPv6Address": ""

..

Se você criar outra rede My-Network2, ele terá uma máscara de sub-rede diferente como 172.19.0.0/16 e recipientes nele serão isolados de contêineres em outras redes. Então, idealmente, você deseja uma rede por aplicativo, então todo aplicativo é seguro e isolado um do outro.

Como a composição cria uma rede

Docker Compose entende a idéia por trás dos serviços de execução de um aplicativo em uma rede. Quando você implanta um aplicativo usando o Docker Compose File, mesmo quando não há menção a parâmetros específicos de rede, o Docker Compose criará uma nova rede de pontes e implantará o contêiner nessa rede.

Se o Docker-Compose.YML está no diretório My-App, o nome do diretório será usado para nomear a rede, bem como os contêineres montados em cima dele. Por exemplo, se eu criar um diretório:

$ MKDIR MY-APP
$ CD My-App
$ vim Docker-Compose.yml

E adicione o seguinte conteúdo ao Docker-Compose.Arquivo YML:

Versão: '3'
Serviços:
my-nginx:
Imagem: Nginx: mais recente

Observe como não exportamos nenhuma porta. Vamos implantar este aplicativo:

$ Docker -Compõe Up -d

Isso cria uma nova rede chamada My-App_Default usando o driver de rede Bridge que discutimos antes.Você pode listar todas as redes em sua configuração pessoal usando o Docker Network LS e depois escolher a interface de rede que corresponde ao nome do seu diretório. Depois de ter o nome da rede, você pode inspecionar o Docker para ver todos os contêineres que fazem parte dessa rede, juntamente com seus endereços IP individuais e máscara de sub -rede.

Se criarmos outro contêiner, usando diretamente a CLI (isso não é recomendado para casos de uso do mundo real) nessa rede, podemos realmente conversar com nosso serviço My-Nginx.

$ DOCKER RUN -DIT -NAME CONTENTIMENTO4 --NETWORK MY -APP_DEFAULL UBUNTU: mais recente
$ Docker Exec -it Container4 Bash
root@a32acdf15a97:/# Curl http: // my-app_my-nginx_1

Isso imprimirá um arquivo HTML com trechos familiares como "Welcome to Nginx" visível. O servidor da web nginx é acessível de dentro da rede sem termos que publicar nenhuma porta! Mais importante, você nem precisa alcançá -lo usando seu IP privado, você pode simplesmente chamá -lo pelo nome do host (que é o nome do contêiner, como mostrado no Docker PS).

Ao executar um banco de dados e conectá -lo ao front -end, você não precisará publicar a porta do banco de dados. Em vez disso, você pode chegar ao banco de dados do servidor da web chamando seu nome de host previsível. Mesmo quando o Docker Compose é executado em outro lugar onde e o IP e a sub -rede podem agora diferir, os contêineres ainda poderão conversar um com o outro.

Obviamente, para publicar um porto para o mundo exterior, escrevíamos algo como o seguinte:

Versão: '3'
Serviços:
my-nginx:
Imagem: Nginx: mais recente
porta:
- “8080: 80”

Agora as pessoas podem acessar o servidor da web da porta 8080 no IP do seu host do Docker. Isso pode ser, por exemplo, o IP público do seu VPS ou apenas localhost se você estiver executando o Docker no seu desktop. Mais uma vez, eu enfatizo, você não precisa expor nenhuma porta para o seu contêiner de banco de dados, porque o servidor da web pode conversar diretamente com ele e, portanto, isso reduz o risco de bancos de dados expostos à Internet.

Quando você reduz sua inscrição, usando:

$ docker-compor para baixo

Esta rede de ponte personalizada, juntamente com todos os recipientes efêmeros que foram criados e anexados em cima, usando o Docker-Compose.arquivo yml, será excluído. Deixando seu ambiente de Docker em um estado limpo.

Definindo sua própria rede

Compor permite que você defina sua própria definição de rede. Isso incluiria opções para máscara de sub -rede, endereços IPv6, entre outras coisas. A maneira como é feita é que temos uma rede de nível superior, assim como serviços ou versão são chaves de nível superior. Esta chave não tem indentração. Sob a chave das redes, agora podemos definir vários atributos da rede, pois agora vamos simplificar e apenas mencionar que ela deve usar o driver da ponte.

Versão: '3'
Redes:
minha rede:
Motorista: Bridge

Agora, cada contêiner pode se conectar a várias redes; portanto, na seção de serviços, mencionamos o nome da rede personalizada. A chave das redes aqui espera uma lista de redes.

Versão: '3'
Serviços:
my-nginx:
Imagem: Nginx: mais recente
Redes:
- minha rede
- Outra rede de rede # Esta é outra rede que você pode ter criado.

Por fim, a ordem em que a rede é definida e depois usada dentro de uma definição de serviço é relevante. Então, todo o arquivo YML ficará assim:

Versão: '3'
Serviços:
my-nginx:
Imagem: Nginx: mais recente
Redes:
- minha rede
Redes:
minha rede:
Motorista: Bridge

Outras informações

Ao escrever suas próprias definições de rede, você pode querer consultar a documentação oficial. Para uma rápida olhada nas redes de nível superior, visite este link e para a chave das redes de nível de serviço aqui está a referência.

Você também pode tentar especificar sub -redes na definição de redes de nível superior para que os serviços possam ter uma gama predeterminada de endereços IP.