Salve, Deus, beleza? Conte a nossa saga aqui, nosso módulo de Docker. Essa última aula vai ser muito interessante para a gente poder aprofundar um pouquinho mais nas configurações de rede, entendendo como que o Docker funciona. Vai acontecer muito, tanto em desenvolvimento quanto em produção, de nós termos dois Docker Composes rodando, por exemplo. Então, eu tenho dois containers que estão em redes diferentes. Se eles não estiverem, obviamente, na host. Se eu tiver 10 Docker Composes, todo mundo está rodando com o modo da rede host, está todo mundo conseguindo se comunicar. Mas acontece que, às vezes vezes a gente não trabalha com o modo host, trabalha com o modo bridge, e aí a gente tem que criar uma rede entre esses containers de Docker Compose separados, para que eles possam fazer a comunicação e isso pode se tornar ruim, tanto pode se tornar, não ruim, mas chato de gerenciar. Então, nessa aula, eu vou mostrar para vocês um recurso que é um recurso muito comum que a comunidade Docker utiliza. Vamos fazer aqui... Vou criar 105 e aí vou colocar conectando containers via um endereço único. Como eu vou criar uma pasta, depois eu coloco o readme lá dentro. A gente tem aqui aqueles arquivinhos vamos passar para cá e a gente vai brincar um pouquinho com eles aqui. Então, a gente vai brincar um pouquinho com eles aqui então a gente estava falando que cada docker compose, se eu rodar isso aqui agora sem o modo deixa eu tirar todos os três se eu tirar o network host vai criar uma rede bridge entre eles e se eu tiver um outro docker compose eles não vão conseguir se comunicar, aí eu tenho duas opções pra poder trabalhar um docker-composer entre eles, e se eu tiver um outro docker-composer eles não vão conseguir se comunicar. Aí eu tenho duas opções para poder trabalhar. A primeira delas é fazer um docker-network-create, eu crio lá uma rede, aí eu vou habilitar em ambos os lados, e aí vai fazer com que não se crie ali a rede default, que a gente vai chegar em cada um deles, e vai fazer um network, networks, e colocar aqui my network, né? Uma outra forma é deixar um dos Docker Composes criar a default, a gente sabe que vai ter ali o nome da pasta, underscore default. Então, por exemplo, eu estou nessa... No momento, eu estou nessa rede host aqui, né? Então, ele vai fazer assim, 03, rede host, underscore default. Aí, a gente vai chegar lá no outro, eu já expliquei isso aqui. E eu vou colocar que é uma rede externa. E aí, em cada container eu coloco. Então olha que isso aqui pode ser um pouco chato de fazer e não produtivo, e às vezes você pode ter uma malha maior de dockers com poses, e aí você fica criando essas redes e fica complicado gerenciar isso. Então, existe uma forma de a gente criar o endereço único para fazer com que essa comunicação fique mais simples. Então, o que a gente tem que entender a arquitetura da coisa? Então, vamos lá. A gente vai criar um endereço que é o host docker interno. Poderia ser qualquer coisa, mas isso aqui é o que a comunidade usa. Então, todo mundo vai reconhecer esse endereço. Nós vamos colocar dentro do etc barra host de cada container, ele vai precisar se comunicar com outro, vai ficar exatamente assim. O host gateway, ou seja, o endereço do docker que quase sempre é 172 1701 equivale ao host docker interno. Então, se eu precisar, estou no node, dentro do container node, preciso me comunicar com uma SQL que está em outro lugar. Então, vai ser host docker interno na porta 3306. Então, quando acessar esse endereço, vai para o gateway do docker que vai acabar batendo na nossa máquina, aí nós vamos ter o nosso etc barra hosts que vai ter 127.0.0.1 host docker interno. Então, quando eu precisei fazer a comunicação, saiu da rede ali do docker, bateu na máquina, então ele vai redirecionar para o próprio local host, a gente vai estar com a porta 3306. Então, ele saiu da rede, bateu na máquina e foi para dentro do outro container que está com a porta exposta. Então, vai ser justamente isso. Para poder fazer essa configuração, vamos lá. Deixa eu ir aqui para 05. Isso é muito importante. Para você que está no Windows, você não mexe no seu etc barra hosts eu tenho aqui o meu etc barra hosts do WSL, você não vai mexer nele, ele espelha o que está no Windows então você vai chegar em C dois pontos Windows 15 32 a barra driver a qualquer barra o contrário mas e enfim e certa barra rosto vai estar esse arquivo edite com o bloco de notas aí em modo administrador porque você tem que ter permissão, aí você vai acrescentar justamente essa linha no finalzinho do arquivo, 127.0.0.1, host do arquivo interno. Então, para o Windows, você faz essa alteração. Para o caso do Mac e do Linux, como é o sistema Unix, você vai editar diretamente o seu excerto barro, ou se precisa de permissão também de administrador, usa o Vim ou qualquer outro editor, acrescenta essa mesma história aqui. Então, olha só. Vamos pegar aqui o caso que a gente tenha... é uma simulação que a gente vai fazer aqui. Eu vou ter um node, vamos colocar assim, colocar um rename. Esse aqui vai ser o do Node. Eu vou duplicar e vou ter do MySQL. Então, nesse daqui eu vou retirar o banco de dados. E nesse daqui eu vou retirar o Node. Pronto. Aí nesse caso aqui de Health Check eu não tenho mais. Porque o Health Check ali é quando eu tenho os containers conectados na mesma rede, eles conseguem fazer o RefCheck através do nome. Aí, para poder subir o Node aqui, tem a estratégia do Always, e a gente poderia trabalhar com outras coisas, mas isso aí é outro assunto. Deixa eu tirar o NetworkHost daqui e o network host daqui. Pronto. Então a gente vai chegar em cada um deles, nós vamos colocar assim, extra hosts, e aí eu vou passar, esse host docker interno vai ser dois pontos host traço gate. A gente vai entender exatamente o que isso aqui vai acabar causando. A gente vai entender aqui. Agora, o caso do node, quando ele subir, deixa eu tirar esse... Toda vez que ele iniciar, não tem problema. Quando ele crachar aqui eu entro no do MySQL que a gente consegue ver o que que vai acontecer. Deixa eu tirar esse outro docker-compose daqui. Então eu estou dentro da pasta correta, a gente vai fazer "-f docker-compose", Vamos subir o MySQL primeiro. Então, up. Beleza, ele vai subir lá. Primeiro vamos olhar o MySQL, depois a gente sobe o Node. Então, vamos entrar lá na pastinha. Estou aqui no capítulo 7. 5. Aí se eu quiser fazer um exec aqui, eu tenho que passar o "-f exec db bash". Agora eu vou fazer um catch no etc barra hosts do container. Então olha só o que ele vai fazer. Eu poderia colocar o ip aqui, que é o que ele vai fazer. Eu poderia colocar o IP aqui, que é esse que está aparecendo. Esse aqui, ó. Esse aqui é o IP do container. Eu poderia colocar esse IP lá direto, mas às vezes ele pode mudar. Ele pode ser diferente. Então, esse host docker gate, o que ele faz? quando o container sobe o docker vai editar o etc barra host do container, fazendo a inversão fazendo o aquele host gate, vai ser o IP do gate da rede do docker, e o host docker interno fica aqui, então toda vez que a gente quiser fazer um ping, acho que não tem ping aqui, né? Ou tem? Não tem ping aqui, mas aí ele iria acabar batendo na nossa máquina, porque ele ia sair da rede e bater na nossa máquina. Então como essa configuração também está no Node, Node na verdade nem precisa porque na verdade não é SQL que não precisa. Porque é o Node que vai se comunicar. Então, eu não preciso sair espalhando isso pra todo e quanto lugar. Então, agora, eu vou subir o do Node, mas o do Node, aqui, ó, vai ser host docker-interno. O restante vai ser igual, porta 3306. Beleza. Então, eu já subi ali o MySQL, mas essa configuração ali do host não vai ter influência nenhuma. Então agora vamos mudar aqui para node, fazer um up, menos menos build, só para poder forçar o build. E,, ele depende esse carinha aqui, ele depende de DB, né? tem mais essa dependência então vamos subir aqui e ver se ele vai mostrar aquele conectando tudo bonitinho lá e ele não conseguiu se conectar, claro porque eu preciso fazer uma coisa aqui que é o MySQL. Posso subir de novo. Subiu ali. Então vamos subir o Node. Acho que já está prontinho aqui para poder conectar né, o docker internal ele vai acabar fazendo, executando aqui o index né Tá, o MySQL está de pé e ele tá aqui fazendo o que ainda? Ele já deveria ter dado alguma coisa que ele já deveria ter dado alguma coisa será que a gente consegue fazer aqui... ah não, 3 mil eu não expus nesse caso aqui, inclusive não estou usando o Nginx, deixa eu até matar esse arquivo aqui e matar esse arquivo aqui também. Por algum motivo, o que ele está demorando para poder iniciar? Vamos expor aqui o Node na porta 3000 vou parar aqui está conectado agora com o banco de dados. Maravilha, então eu consegui comunicar. A gente pode entrar... Fazer um exec. Na verdade, aqui o diretório está errado. Posso fazer um exec aqui. Então, apt-update e apt-install ip utils ping Está um pouquinho lerdo, né? Está bem lerdinho. Estranho. Pronto. Agora, se eu fizer um ping Host docker interno A gente vai ver ele batendo Aqui no endereço Que é Colocado Ali nessa barra host Então isso aqui é bem melhor do que colocar endereço Ultimamente eu colocava endereço, mas muitas pessoas tinham um gate do docker Com outros endereços Aconteceram alguns conflitos, então é bom colocar assim. Então, dessa forma, a gente pode fazer essa comunicação entre containers que estão em redes totalmente diferentes, através desse endereço único. Isso vai ser bem normal, você vai ter ferramentas como um ReptMQ, que você está rodando separado, um Apache Kafka, um Redis, e aí ficar, eu acho muito melhor usar esse endereço do que usar uma rede porque principalmente para desenvolver se torna um pouco burocrático. Então, isso aqui é um recurso muito útil também com o Docker, pessoal. Show de bola. Então, fechamos aqui a nossa parte de network, vamos ainda continuando. Agora a gente vai para a finalização da nossa saga aqui de Docker.