Salve, Daz, beleza? Continua a nossa saga aqui no nosso módulo de Docker. Agora, pela primeira vez, vamos trabalhar com um pouquinho de rede aqui. Nós já rodamos o Nginx várias vezes durante as aulas, mas ainda a gente não testou o funcionamento do Nginx no browser. Será que eu consigo rodar ali o servidor web e ver o resultado no browser? É óbvio que sim, mas a gente vai ter que fazer uma publicação de portas. E aí que ter aprendido o namespace lá atrás vai, de fato, esclarecer mais a sua cabeça sobre o porquê que é necessário fazer a publicação de portas. Então, vamos brincar com isso aqui. Deixa eu até ver se eu tenho o Nginx rodando aqui. Nossa, eu tenho isso aqui rodando. Então, vamos fazer um... um rm node2, menos f, né? Porque ele está rodando, então ele vai tanto parar e destruir com... Se não passasse menos ff", não ia deixar. Se a gente executar o Nginx... Vamos executar dessa forma aqui. Colocar o Nginx 3 aí. A gente vê aqui que o Docker identificou uma porta que ele está rodando. Depois a gente vai entender como o Docker identifica isso. Mas ele está rodando na porta 80. Então, se eu chegar aqui em localhost, claramente eu não vou conseguir. A gente aprendeu o conceito de namespace. A gente aprendeu o conceito de namespace, e agora aqui, mais uma vez, ele deixa claro esse isolamento, porque eu tenho a porta 80 que está sendo alocada dentro do namespace. Esse pequeno mundinho lá tem as portas também que ficam alocadas. Então, isso funciona lá dentro. Vamos fazer aqui um pequeno teste? Se a gente fizer um exec-it enginex3sh. Eu tenho curr? Tenho, né? Então, se eu fizer um http://localhost. Aqui, o Welcome to Nginx. Aquela página padrão ali do Nginx. Mas a nossa máquina, a gente não consegue acessar. Aqui eu estou dentro do namespace. Estou manipulando dentro dessa jaula. Então, a gente vai ter que fazer um bind da porta 80 desse namespace com o nosso contexto global para acessar nessa porta que eu colocar. Então, a gente vai ter que fazer o seguinte. Dessa forma que está aqui, não rola mais. Eu tenho que rodar o container de novo. Então, vamos fazer um stop no Nginx 3. E agora, vamos procurar aqui o comando novamente. Nós vamos passar mais uma opção. Eu vou passar a opção "-p", que é para publicar a porta. E aí, a gente vai fazer assim. Eu quero acessar na minha máquina, no 8000. Não vou colocar 8080 na minha máquina que não vai funcionar pra 80 do namespace lá do container tá isolado, pronto agora ao fazer o docker-sps o docker identificou então como tá o IP tudo zerado, qualquer IP que eu acessar aqui na minha máquina local na porta 8000 vai redirecionar lá para o item do container. Então vamos dar uma olhada aqui. Aí, welcome to NGINX. Então, quando eu acesso isso aqui nessa porta, nós temos um bind de interface de rede para dentro lá do namespace. E aqui nós temos aquelas mesmas regras de execução de processo e porta. Eu só posso ter um processo alocado para uma porta. Então, se eu colocar aqui novamente esse comando, mudando para o Nginx 4, ele vai dar um erro, porque ele vai falar, opa, espera aí, você já tem um bind para a porta 8000, você tem um processo rodando aí nela, eu não posso rodar novamente. Mas eu posso mudar aqui para 8001? Posso, não deu nenhum erro nenhum. Mas, poxa, a 80 já não tá sendo usada? Lembre-se, né, cada container está rodando num namespace, ele tá numa jaula. Então, ele tem todas as portas disponíveis. E aí tem o bind sendo feito aqui pra 8001. Então, agora eu tenho dois Nginx, né, e aqui a gente vê como que é fácil, aqui para o 8001. Então, agora eu tenho dois Nginx. E aqui a gente vê como é fácil, muito mais conveniente rodar containers. Poxa, como que você conseguiria rodar dois Nginx assim facilmente na sua máquina? Só roda ali um comando e já tem a imagem prontinha para você poder trabalhar. Então, pronto. A gente viu aqui como se faz essa publicação. Então, sempre a esquerda dos dois pontos é a nossa máquina, que a gente chama de host. E do lado direito, o container. A gente pode fazer os binds conforme a gente quiser. Vamos brincar aqui com... Eu vou entrar no Nginx. Eu estou rodando o Nginx 3, né? Vamos fazer aqui um ls em usr. local share Eu não lembro o caminho. A gente tem aqui o caminho que fica... barra live. Aqui é o Indnex É o Barra share Indnex HTML Então é aqui que está aquele HTML lá Se eu quiser fazer uma Modificação nele Eu não tenho o Vim aqui, então a gente pode fazer Alpine, APK Update, APK Vim, Add Vim, e poder adicionar o Vim. pegar aqui o caminho, posso vir no arquivo e aqui a gente vai fazer a modificação. Então, vou lá, Nginx, MVA Full Cycle. Na verdade, eu coloquei... pode ser daquela forma, não tem problema apertei o ESC errado esse aqui continua com o welcome to Nginx, que é o outro Nginx que a gente rodou depois, agora esse aqui tem que ter mudado a gente tem dois containers baseados na imagem que é imutável o container é mutável e nós tivemos aqui a nossa modificação e essa publicação de portas o O que eu acho mais legal é justamente entender esse conceito de namespace e saber ali que a gente tem um submundo com essas portas lá. Também da mesma forma, dentro aqui do mesmo namespace, eu não posso ter dois processos rodando na mesma porta. Então, se eu tentar rodar aqui o Nginx novamente, está vendo que ele fala que o endereço já está sendo utilizado? Ele está sendo utilizado lá dentro desse namespace que está alocado ali para o container. Então, isso aqui é muito comum. A gente pode fazer essa publicação de portas, é muito comum para banco de dados. A gente pode rodar uma SQL da vida. Deixa eu ver se eu tenho uma SQL aqui. Vamos fazer um run com essas opções. Menos D eu não quero, a gente vai ver os logs, aí vamos colocar assim, mais ql1, e a imagem é mais ql2, tenho aqui uma que não precisa baixar, 8030-debian, que é um derivado de Debian, a imagem também é menor, aí eu tenho que passar aqui duas informações, porque se eu levantar dessa forma... Está vendo que aporta 8 mil? Vamos colocar aqui 3306 na minha máquina, apontando para 3306 do MySQL, que é a porta padrão lá. Ele vai exigir aqui que a gente passe variáveis de ambiente, então aqui eu vou ter que passar pelo menos essa aqui, que é a senha do root, a variável de ambiente. Quando ele vai criar o banco pela primeira vez, ele vai lá e define a senha do usuário, porque senão a gente não vai conseguir logar no banco. Então, aqui outra vez, só para poder ver o terminal, ele vai mostrar aqui no final que ele está aqui, está Ready for Connections. Então, essa publicação que a gente fez, vamos fazer aqui um Docker Pass, ela vai mostrar que a gente está fazendo o bind na 3305 da nossa máquina. Aqui eu estou não tenho problema utilizar as duas portas iguais. Aí eu poderia usar um software como esse DBWeaver que tem utilizado aí, o MySQL Workbench para poder fazer a conexão. Se eu não faço o bind, esse software que está na minha máquina, ele não vai conseguir enxergar ali a rede que está isolada com o namespace do container. Então, isso aqui é muito comum e a gente consegue normalmente acessar o nosso banco de dados. Então, pessoal, vamos continuar nossa saga. É isso aí e até a próxima.