Salve, Deus, beleza? Continuando essa saga aqui no nosso módulo de Docker, a gente tinha usado o Nginx lá atrás para poder fazer aquele primeiro exemplo lá com o Dockerfile. E eu quero agregar ele aqui no Docker Compose e a gente vai fazer algo diferente. E a principal lição dessa aula é uma lição que a gente deve levar sempre com os containers, que a gente deve sempre rodar o mínimo de coisa dentro de um container, que a gente consegue controlar melhor os recursos e permitindo mais... Evitando falhas, no final das contas. Porque se a gente... Eu consigo criar um container que tem o Node, que tem o Nginx, que tem o MySQL, eu consigo jogar tudo num lugar só? Sim. Mas aí eles vão conflitar, eles vão brigar pelos recursos e se algum deles falhar, pode impactar no outro. Então, como o container é um processo, a ideia é que sempre a gente tente separar esses caras, porque a gente consegue escalonar, fazer as resiliências, as falhas e tudo mais. Então, a gente vai fazer essa ideia aqui com o Node, não que a gente tenha que necessariamente rodar um Nginx separado do Node. A gente pode ter imagem de produção que tem Nginx e Node numa mesma imagem, mas a gente pode separar eles. Eu posso rodar aqui um container para o Node e um container para o Nginx. A vantagem dessa abordagem é que eu posso ter ali só um Nginx fazendo um load balancer para vários Node.js. Então, vamos pegar aquele exemplo aqui que a gente fez daqui da aula 3, a gente não tem esse dockerfile daqui eu vou copiar ele pra cá então nós vamos ter agora um dockerfile nginx poderia colocar outro dockerfile node pra não confundir, mas eu não quero mudar o que a gente já tem ali. Então, aqui eu vou usar o Nginx que eu tenho aqui na minha máquina. Vamos fazer um Docker ImageLS. Sempre esqueço, é a versão 1910 aqui. Então, aqui nós vamos levantar somente o nosso NGINX. A gente vai colocar o NGINX. 119.10. Essa parte, então, não precisa. O COPY vai ter. O diretório de trabalho, essas informações aqui não precisam. E o EXPOSE na porta 8000. O COMMAND vai ser o próprio COMM command que já vai vir herdado, não preciso fazer nenhuma mudança. Então a gente só vai copiar isso aqui. Agora, copiado isso aqui, inclusive ele até colocou um outro ícone, o dockerfile, preciso pegar o Nginx Conf passar pra cá. Então, agora que vem o segredo da história aqui. Então, vamos colocar assim, a gente vai ter o Nginx e vai ter um build que como não é um Dockerfile padrão, eu vou até colocar aqui, vai ser o contexto. Aí é uma informação alinhada, um objeto, uma tag alinhada, o contexto vai ser ponto, e o Dockerfile vai ser esse Dockerfile.indnex. Então, assim que a gente tiver outro diretório, coloca outro diretório aqui e tudo mais. Então, assim que a gente tiver outro diretório, coloca outro diretório aqui e tudo mais. Aí, aqui dentro do conf, está o segredo. Aqui não é localhost mais, porque antes o Node.js e o Nix estavam dentro do mesmo container. Aqui vai ser app na porta 3000. Lembra que a gente falou que é criada uma rede que eles conseguem se comunicar através do nome? Então, vai ser app. Justamente a porta não é 8000, 8000 na nossa máquina. A gente está fazendo o bind lá com o namespace que a gente aprendeu também no curso. Beleza. Vamos rodar isso aqui. Sempre tem surpresas, vamos ver se vai dar certo de primeira. Então, deixa ele rodar tudo bonitinho ali. O app agora está conectado. Vamos fazer o comando docker compose PS e ver todo mundo que está de pé. Então, eu tenho o app, o status, cadê o status dele? É porque se está PS, está up, né? Está aqui, ó. Na verdade, não necessariamente. Ele poderia estar parado e mostrando aqui. Então, está up. O MySQL está up e o Nginx também está up. A gente consegue ver os logs de tudo o que aconteceu. Vamos ver aqui. Somente os logs do Nginx, eu posso passar somente o nome lá do service e vejo os logs do Nginx. Ficou de bola. Então, agora, vamos fazer aqui um curr para o... Oi? Ah, a gente não habilitou porta, né? Então, a outra mudança que a gente tem que fazer aqui, isso aqui não tem mais. Eu vou deixar comentar para vocês poderem brincar. E eu preciso passar aqui ports 8080 vai bater na 80 do Nginx. Então, agora o meu Node não é exposto, dando aquela segurança que a gente precisa ali. Então, se eu fiz modificação no meu Dockerfile, eu tenho que fazer um Ctrl-C, ele vai parar tudo, e aí a gente vai rodar novamente. Agora sim, o Node está de pé. Vamos fazer um curr. E está lá o Hello World. A gente está acessando o Nginx, que acaba redirecionando como proxy reverso para um outro container. E aí que seria interessante nesse caso, por quê? Voltando para explicar agora de forma mais específica. O Nginx é um servidor web parrudo, que vai aguentar uma paulada ali, que tem muito mais recursos em relação a ser um serviço web do que o Node. Então, eu poderia ter ali umas 10 réplicas de Node.js, enfim, e aqui nesse conf, eu poderia fazer uma configuração para ele poder balancear essa carga entre essas réplicas e tudo mais e o Nginx eu poderia até ter múltiplas instâncias dele mas eu poderia ter uma só para poder centralizar ali, enfim então a gente consegue fazer todas as configurações com o Dockerfile então nesse caso o que é legal é que às vezes eu poderia ter outras aplicações também sendo servidas aqui pelo Nginx, e se aconteceu do meu app crachar, o meu Nginx continua funcionando, mas eu não vou conseguir mais acessar a aplicação do Node, mas ele continua servindo outras aplicações. Então, quanto menor o número menor de ferramentas eu colocar ali dentro de um container, normalmente a regra de ouro é coloque uma ferramenta dentro do container, porque você consegue balancear, consegue gerenciar mais as falhas. Se o próprio Nginx falhou, a gente sabe que está separado ali, eu não tenho que também ficar fazendo uma inspeção com Nginx falhou, a gente sabe que está separado ali. Eu não tenho também que ficar fazendo uma inspeção com um monte de teorias. Porque quando a gente roda os logs, ah, pera aí, eu rodei o log do Node, está ok. Então, é o Nginx que está com problema. Eu sei que eu tenho que mexer aqui, eu só tenho que levantar ele. Então, a ideia é sempre a gente ter esses múltiplos containers