Fala galera e aí tudo bem com vocês Como que você estão hoje comecei a Live diferente sem o contador aquele né Já comecei a Live começando mesmo já aparecendo por aqui porque a Live de hoje vai ser longa galera hoje vai ser intensivão de docker tem muito conteúdo pra gente falar sobre então não dá pr perder temp só me de um OK se vocês estão por aí se está tudo certo né V me dando um sinal de vida eu vi que o André já tá por aí o Shadow também o and o André falou que
as férias estão acabando com com as rotinas dele eu sou assim também quando eu entro de férias a minha rotina vai por água baixa não tenho mais férias não tenho mais rotina nenhuma mas faz parte né férias Acho que é bom não ter rotina por um tempo porque senão muita rotina a gente parece um robô O Nelson tá por aí também boa noite Wellington o Enzo o vin também o dailan Nataniel boa O João tá por aí também o Douglas boa beleza galera tudo certo Tudo certo e nada resolvido vamos começar a nossa Live Pois
é eu sem rotina me sinto quebrado eu também tipo assim quando eu tô no dia a dia do trabalho eu preciso de rotina se eu não tiver rotina primeiro eu não consigo fazer tudo que eu tenho que fazer e segundo parece que tá faltando algo assim para mim eu sou uma pessoa muito organizadinha muito perfeccionista tipo assim sou meio chata sabe com essas coisas de de dia a dia então eu preciso de uma rotina eu preciso ter cronometrado Não exatamente mas tipo ah primeiro eu quero ir na academia depois eu tenho Daily depois eu sabe
tudo organizadinho e tal para funcionar senão não funciona mas é isso programação orientada a objeto está me matando boa eu vou compartilhar a tela galera e eu crii um notion pra gente pra gente ir se guiando né O notion que vocês já estão acostumados quem assistiu a última Live que teve aqui no canal que foi na sexta-feira a Live de hoje é completamente diferente tá a Live de hoje a Live coding é conteúdo técnico é o estilo de Live que a gente já tá acostumado aqui no canal aquela Live de sexta feira é um novo
quadro do canal que é uma live bem mais descontraída e é pra gente falar de Notícias eu vou tomando café ali junto com vocês é uma dinâmica totalmente diferente então quem não assistiu a última Live de sexta convido vocês essa semana vai rolar de novo não sei se eu vou fazer quinta ou sexta essa semana vou postar e depois o a enquete para vocês decidirem mas é uma live diferente a Live de hoje é conteúdo técnico mesmo mas é pra gente ir trocando ideia também e aprendendo junto certo eu vou mandar o link do notion
E aí bora começar galera vou mandar aqui o link para vocês eu sei que vocês gostam de acompanhar ou também de ter salvo aí para para usar para estudar depois então já mandei aí no chat eu vou fixar aqui no chat só para quem entrar depois também consegui o link então pera aí deixa eu só fixar aqui pra gente e aí nós vamos começar boa galera primeiro ponto que eu queria ver com vocês entender aqui do do chat né É em que nível de docker vocês estão tipo assim ó vocês se consideram pessoas que já
conhecem o docker já sabem utilizar ou São pessoas que ah não conheço ainda não tenho nenhuma confiança sobre docker não sei nem por onde começar ou cara já trabalho com docker já sei um monte de coisa já manjo e tal eu quero entender o onde vocês se enquadram né tipo onde vocês se sentem hoje em relação ao docker e eu faço essa pergunta tanto para eu me guiar aqui com os conteúdos tipo no que que eu preciso focar mais ã tanto também para eu entender vocês Eu gosto de conhecer vocês então é isso eu vou
mandar aqui uma enquete eu não sei nada Eu manjo um pouco eu já manjo muito Eu já manjo muito eu vou falar para vocês uma uma coisa que eu não tinha tinha falado aqui antes que é eu demorei muito para aprender docker mas tipo assim muito mesmo sério sem sacanagem Eu só fui aprender docker depois que eu virei plena ã quando eu era Júnior eu não sabia nada de docker nada de nada Galera tô falando sério eu não sabia nada eu não sabia nem buildar uma imagem do docker tipo assim já tinha feito uma vez
procurado comando no Google e realizado porque precisava mas tipo nem sabia o que tava fazendo e nem sabia o que que é docker tipo eu me confundia toda eu fui aprender docker mesmo depois que eu vrei plena porque aí né a responsabilidade bateu na porta e eu precisava saber Foi algo que eu eu posterguei muito meus estudos sabe só que foi um um aprendizado muito importante assim para mim depois que eu aprendi mais sobre docker e mais sobre infraestrutura na Cloud aws enfim VPS rede privada esse tipo de ento me trouxe um um um como
é que eu posso dizer um Boost enorme assim paraa minha carreira sabe eu consegui assumir responsabilidades muito mais complexas no meu trabalho projetos muito mais complexos isso Acabou me trazendo muitas vantagens de visibilidade eh de reconhecimento também então foi um conhecimento bem importante porque a maioria das pessoas não manja disso né então foi muito importante mas foi algo que eu posterguei muito na minha carreira eh o daan falou que ele também ele só depois de muitos anos foi foi entender o Douglas falou que já usou bastante e o Renato falou eu só sei o que
é o comando para subir sei nada só subir um contêiner mais fic e nada mais iniciante Júnior meu nível instalar docker com interface gráfica no Windows boa Tá então vamos lá nós vamos começar aqui do zero o Vini falou que é intermediário já mexe um pouco cleon é avançado belê a galera que já é avançada Como já sabem né vão me ajudando aí no chat complementando adicionando mais aqui pra nossa discussão o conhecimento de vocês Ajuda também quem está aqui assistindo Quem ainda não sabe nada nós vamos começar agora então vamos lá já tem um
vídeo de docker aqui no canal vou mandar o link para vocês eu vou dar um recap desse vídeo mas eu vou ir além do que a gente viu nesse vídeo tá no vídeo esse que tem aqui no canal eu fui só nos comandinho básicos mas eu quero na Live de hoje dar uma pelada sobre docker compose também porque eu acho que é algo super importante e vai fazer diferença para vocês saber docker compos também então tá aí no chat certo o link do vídeo salvem para assistir depois quem tá aprendendo o docker do zero agora
começando agora esse vídeo vai ajudar bastante ele é um tipo um curso para iniciantes de docker mas eu vou dar uma recapitulada nessa parte Inicial também então o docker para quem não sabe é uma é uma ferramenta certo aqui eu coloquei uma plataforma Mas é uma ferramenta que permite que a gente a virtualização das nossas aplicações e a gente chama isso né essa esse processo de virtualização de contêiner né a gente cria um contêiner para virtualizar o nosso app isso vai permitir que a gente empacote distribua e execute a nossa aplicação de uma forma 100%
isolada da máquina onde ela tá rodando 100% não né Eu já teve discussão no canal aqui sobre isso mas 99 por isolada e consistente O que que significa esse consistente Sabe aquele problema que a gente tem de ah na minha máquina funciona e na máquina do fulano não funciona por que que esses problemas costumam acontecer bom porque normalmente na máquina do fulano ele tá com a versão do SSH diferente o Fulano tá com a versão 18 do node tu tá com a 21 o Fulano tá com rodando no Ubunto e tu tá rodando no macos
ou tu tá rodando no Debian o Fulano ele tem a jdk 21 e tu tá com a jdk 18 sabe tudo isso relacionado ao nosso ambiente impacta no momento que a gente vai Executar a nossa aplicação que a gente vai ã colocar ela para rodar né toda a configuração ali do ambiente impacta então o que que qual o problema que o docker resolve o docker resolve o problema de tu pegar essa tua aplicação e empacotar ela de uma maneira que tu coloque nesse pacotinho tudo que tu precisa para aquela aplicação executar então Então se uma
aplicação Java nesse teu pacotinho tu vai ter a jdk ali já né no pacotinho E aí tu vai só executar aquele pacotinho se é uma aplicação node tu já vai ter dentro desse teu pacotinho o node instalado né E já vai rodar o comando npm instal por exemplo então tu empacota dentro do teu contêiner que é o a A nomenclatura correta tudo que tu precisa para que aquela tua aplicação Execute de maneira consistente E aí chega um ponto que confunde muitas pessoas que é as máquinas virtuais né quando a gente escuta o conceito de docker
e máquina virtual pela primeira vez parece a mesma coisa só que não é o docker ele não é uma máquina virtual Inclusive tem um vídeo aqui no canal também explicando a diferença entre docker e máquinas virtuais eu vou mandar aqui no chat para vocês assistirem depois é um vídeo bem aprofundado tá bem bacana sa eh tipo eu gostei bastante desse vídeo pelo menos mas eu gosto desses conceitos mais eh teóricos então eu sou suspeita para falar mas tá um vídeo bem legal explicando essa diferença acho que vai ajudar bastante para quem tem essa dúvida também
mas eu vou dar uma pincelada rápida aqui no vídeo ã hã então o docker ele é diferente de uma máquina virtual porque os contêiners do docker né eles vão compartilhar o Kernel do sistema operacional né eles vão vamos compartilhar o Kernel do da máquina host por isso que eu disse que não é 100% isolado né 99% porque querendo ou não ele compartilha a camada do Kernel com o host uma máquina virtual quando ela tá mesmo que ela Rode ali dentro daquela máquina física né que ela tá rodando em cima de um host físico a máquina
virtual ela é 100% isolada certo a WS utiliza a máquina virtual para com para que que ela consiga compartilhar os recursos de uma máquina física entre vários clientes então eu posso ter um projeto lá dentro da WS que tá rodando na mesma máquina física que o teu projeto tá rodando lá só que a gente não sabe por quê Porque os nossos dois projetos estão rodando em máquinas virtuais que foram né construídas ali hospedadas em cima daquele host do host original e aí as máquinas virtuais elas são 100% isoladas os contêiners não eles compartilham ali algumas
coisas do sistema operacional se eu não me engano eles compartilham a interface de H não interface de rede não algumas algumas coisas de rede eles compartilham também não 100% na interface de rede Quase que eu falei bobagem mas isso torna os contêiners mais leves e eficientes tá as máquinas virtuais elas são mais pesadas de rodar porque tu tá emulando 100% uma máquina real né o contêiner não ele ele não tá emulando uma máquina certo ele tá só colocando ali o que é necessário para executar aquela aplicação é basicamente isso que é o docker tá E
aí quando a gente fala de docker a primeira coisa que tu precisa saber quando tu tá aprendendo docker é saber construir um docker file o que que vai ser o que que é o docker file o docfile vai ser um arquivo onde tu vai colocar todas as instruções necessárias todos os steps necessários para construir uma imagem da tua aplicação a imagem da tua aplicação é basicamente um como é que eu posso falar um SnapShot da tua aplicação no momento em que tu construiu a imagem mas né todo o ambiente que precisa para aquela aplicação rodar
que aquela imagem quando executada ela sobe um contêiner na tua máquina né um container docker então uma imagem é basicamente o o código fonte paraa criação de um contêiner o contêiner é criado em cima de uma imagem e a imagem é um SnapShot atual do da tua aplicação né tu pode gerar várias imagens da tua de uma única aplicação que a medida que tu vai fazendo atualizações na aplicação né atualizou a versão do node fez modificações no código etc tu vai gerando nova novas versões dessa tua imagem a imagem contém um SnapShot atual da tua
aplicação e do ambiente que tu que tu precisa ali para ela e aí tu pode criar um contêiner a partir de uma imagem e a gente faz as especificações dessa construção da nossa imagem através desse arquivo docar file certo então a primeira coisa que eu quero mostrar para vocês é como que se faz como que se constrói uma imagem então eu eu crio uma aplicação inha angular aqui e eu vou compartilhar a tela para vocês verem deixa eu parar aqui de apresentar notion e pegar aqui essa aplicação angler esse projeto angler ele é simplesmente um
projeto angular vazio Eu só dei NG New angular hello world certo eu só Criei um projeto angler vazio foi só isso que eu fiz só para vocês não acharem que que tá faltando alguma coisa então eu simplesmente só dei um NG New e criei esse projeto angler tá se eu vier aqui e executar npm Run start vocês vão ver que ele vai iniciar essa minha aplicação angler na porta 4200 e basicamente vai mostrar aqui o hello world do angler né é isso aqui minha aplicação angler então o que que a gente vai fazer a gente
vai dockerizar essa aplicação angler e tem vídeo disso aqui no canal também cara tem muito vídeo de L aqui no canal Acabei de perceber à medida que eu vou falando das coisas eu vou me lembrando dos vídeos que eu já gravei tem um vídeo disso aqui deixa eu achar já vou mandar o link aqui aqui ó ie seu angler nesse vídeo eu mostrei inclusive como dockerizar com ninex outro nível tá ligado eu uso ninex lá no meu trabalho lá no Mel a gente usa ninex como proxy reverso que inclusive um conteúdo a parte né um
nnex é algo que eu demorei muito para aprender também e tenho muita deficiência ainda de conhecimento de index confesso eu sei algumas coisas básicas mas nada demais assim tem que dar uma estudad extra para fazer um vídeo Mas mandei aí no chat o link do do vídeo de doiz angler E também o link do no que a galera tinha pedido e eu vi que o João mandou um super chat aqui ele tive ele falou assim ó eu tive perguntas básicas de docker na entrevista né na entrevista do M eu acredito que o João é do
M também e você tinha feito vídeo de docker no dia boa Espero que tu tenha visto o vídeo antes da entrevista então que aí deve ter ajudado boa bem demais e é isso cara quando cai docker numa entrevista técnica normalmente perguntinhas básicas assim porque é realmente algo que as pessoas não sabem no geral então sabendo o básico já Vai facilitar muito a tua vida né não precisa ser nenhum Expert no docker é só é só saber o básico para se virar E aí quando tu tiver algum problema alguma dificuldade daí tu vai atrás vai te
aprofundando mais no Doc mas começa só sabendo o básico para saber pela pelo menos que problema ele resolve boa a galera que tá chegando seja bem-vindo Davi eu mandei o link do no aqui no chat acabei de mandar e bora continuar tá então o que que a gente vai fazer aqui eu vou criar um novo docker file dentro dessa minha aplicação angula esse docker file é o arquivo que eu falei para vocês que vai conter todos os steps necessários para criar uma imagem nova dessa nossa aplicação que que a gente vai fazer aqui ó eu
vou copiar aqui do meu notion que eu já deixei tudo engatilhado aqui pra gente vou copiar esse exemplo aqui de docker Fire mas a gente vai ter que fazer umas modificações primeiro o que que a gente precisa a gente precisa definir dentro do nosso docker file uma imagem base que a gente vai usar essa imagem base normalmente é a imagem que vai trazer ou o sistema operacional no qual a gente quer que tenha dentro desse container para que depois a gente Execute todas as instalações necessárias para rodar a nossa aplicação ou muitas vezes a gente
já pode usar uma imagem pronta da própria linguagem na qual a nossa aplicação roda Então o que muitas pessoas fazem quando estão aprendendo o docker né A primeira coisa que a pessoa vem é colocar como imagem base a imagem do ubunt por exemplo venho aqui e boto a imagem do Ubunto eu nem me lembro como é que é a imagem do Ubunto no nome dela ã Depois eu explico para vocês Da onde eu encontro essas imagens né imagens aqui oficiais pra gente usar mas por exemplo venho aqui e uso a imagem do ubunt né aí
dentro do ubunt eu vou lá ã rodo um aptg update aí depois rodo um APT get instal node aí depois com o node instalado eu instalo o npm depois com o npm instalado eu vou lá instalo o Git aí eu vou lá faço o clone da minha aplicação Tipo isso aqui gente não precisa não precisa fazer isso não precisa instalar o node instalar o npm instalar o Git isso aqui Reinventar a roda tu vai e pega a imagem do node e imagem do node já vem tudo que tu precisa para rodar uma aplicação node já
vem com npm já vem ali com a a ind do node já vem tudo então o que a gente vai usar de imagem base é a imagem do node e eu vou usar na versão 22 que é a versão do node local que eu tenho aqui então se eu rodar aqui um node menos menos version eu vou ver que eu tô na versão 22 então aqui eu tô pegando a imagem do node passando a tag 22 que isso aqui vai fazer com que ele use a versão 22 do angler muitas imagens né muitas imagens oficiais
usam a tag como forma de versionamento eh div versionamento correspondente a versão da própria ferramenta sabe a tag é uma forma de versionamento aqui no docker eu já vou explicar mais a fundo o que que são essas tags também mas ã tu não necessariamente precisa ter uma concordância entre a tag e a versão do node né para pegar a versão 22 ao invés de eu só botar 22 o time do node poderia ter escolhido que a tag paraa versão 22 ia ser versão 22 tag e eu teria que escrever dessa forma né teria que pegar
dessa maneira aqui selecionando a tag correta mas muitas imagens oficiais usam né o o a reciprocidade que eu vou dizer entre a versão e o nome da tag tá então botando 22 já vai trazer a versão 22 do angular depois a gente troca o nosso work Gear pra Barra app basicamente o que eu tô fazendo aqui é trocando meu meu diretório de trabalho para o diretório barra app que que é isso eu tô fazendo um CD tá ligado o CD que tu faz aqui no terminal CD source Aí eu entro na pasta source aqui eu
tô fazendo um CD app por quê Porque é legal dentro do nosso contêiner a gente colocar tudo que diz respeito à nossa aplicação dentro de uma pastinha app é é puro e basicamente padrão de comunidade certo eu poderia deixar tudo na pasta root né do contêiner sem criar uma pasta app mas a galera usa bastante a passa app e virou meio que padrão assim na comunidade então trocamos o nosso work dear para passa app poderia ser pasta Fernanda pasta Fulano poderia ser a pasta que tu quisesse ou poderia ser passa nenhuma é só padrão da
comunidade trocar para passa app para deixar a tua aplicação ali dentro do container né dentro da pastinha app então o que que a gente vai fazer em seguida a gente vai copiar para dentro do nosso contêiner certo todos os arquivos de package Jason que a gente tem aqui local e quando eu digo todos os arquivos de package Jason que a gente tem local não é todos os aplic não é todos que estão na tua máquina agora é todos que estão aqui e dentro da pasta na Qual tu tá trabalhando Então eu tô dentro aqui da
pasta do meu projeto angler hello world dentro desse meu projeto Eu tenho dois arquivos né pack Jason eu tenho o meu pack Jason comum e o meu pack Jason Lock que contém aqui a versão de todas as dependências que eu tenho local a descrição né certinho basicamente o que eu tô pegando é copiando esses arquivos para dentro do meu contêiner lembrando o contêiner é como se fosse uma máquina virtual não é mas é como se fosse então dentro essa máquina virtual tenho que colocar tudo que eu preciso pra minha aplicação rodar para minha aplicação rodar
eu preciso do node preciso de um ambiente minimamente viável que é o node certo não me importa qual é o sistema operacional aqui para mim nesse meu projeto não faz diferença se fizesse eu usava uma imagem específica do bumt do Debian que fosse certo para nós aqui não faz diferença só um projeto angular comum eu posso só usar a imagem do node mesmo e já era eu sei que tem projetos que às vezes precisam usar o sistema operacional específico não é é o nosso caso então só pegamos a imagem do node feito isso troquei pra
pasta app troquei por trocar por padrão de comunidade próximo passo copiei os meus arquivos pack Jason para dentro do meu coner né tenho que jogar para lá por qu porque com esse arquivos package Jon Já Posso rodar o comando npm Install e o comando npm já tá disponível para mim porque eu já tenho node se eu não tivesse se eu não tivesse usando a imagem do node eu não ia conseguir rodar npm install porque não ia ter node nessa nesse container né então rodei NP Missal depois disso O que que eu fiz copiei todos os
arquivos que estão dentro dessa pasta hello world para dentro do container esse copy pontinho pontinho basicamente pega tudo que tá aqui e joga lá para dentro do contêiner né é basicamente isso que esse comando faz depois aqui um expose esse expose a gente vai mudar em vez de expor a porta 3000 eu quero Expor a porta 4200 que é a porta padrão né que as aplicações angler utilizam Esse expose é basicamente para deixar mapeado né o qual qual porta esse contêiner quer expor isso aqui não vai fazer o mapeamento direto pra porta da nossa máquina
eu já vou mostrar para vocês também isso é só para deixar mapeado que esse contêiner né quando ele tiver re executando ele expõe essa porta fica a cargo de quem tá executando essa imagem se quer ou não fazer o mapeamento Dessa porta paraa sua máquina local né Vocês já vão ver o que que isso significa para quem não tá entendendo nada ã beleza e aí por fim eu tô rodando um comando comando npm start esse CMD aqui esse comando do docker CMD seguido por uma Array Strings basicamente é o comando que a gente quer que
Rode assim que a nossa imagem inicializa né Assim que o Run da nossa imagem é feito isso aqui pode ser substituo por exemplo se eu tiver no Java pelo comando para eu iniciar uma aplicação Java ou se tu tiver rodando qualquer outra aplicação tu vai colocar aqui o comando específico para inicializar aquela tua aplicação certo e agora o que que a gente vai fazer eu vou mostrar para vocês como é que a gente faz o build Desse nosso docker file quando a gente fizer o Build a gente vai estar criando uma imagem Então olha só
quando eu faço docker build ponto na verdade quero passar um nove quando eu faço docker build Men T menos t para eu fazer um um mapeamento de um nome para essa imagem Então vou dar um nome de angular hello world ponto basicamente o que ele vai fazer ó ó docker builda esse docker file aqui e dá o nome para para esse build que tu vai fazer né dessa nova imagem que tu vai est gerando dá o nome dela de angler hello world Esse vai ser o nome dessa imagem a partir desse momento depois que estiver
build eu consigo utilizar essa imagem que a gente vai buildar agora através desse nome aqui que a gente passou para ela e esse ponto basicamente é para dizer para ele que é para pegar do diretório local aonde estou né Se vocês olharem aqui no meu terminal eu tô no diretório angler hello world né eu tô dentro da pasta Rot aqui do meu projeto do meu projeto angler hello world tô na raiz do meu projeto então quando eu faço ponto eu falo para ele olhar procurar pelo docker file aqui na raiz se o meu docker file
tivesse dentro de alguma pasta eu teria que colocar aqui o pf da onde tá esse meu docker file no caso ele tá na raiz vou rodar Esse comando aqui ele vai começar a buildar minha imagem né vai começar a buildar uma imagem a partir desse docker file se vocês verem aqui ó ele já tá logando pra gente que ele instalou o node né já pegou o node Já copiou o pack Jason tava rodando o npm install agora ele tá rodando o copy né copiando todos os arquivos para dentro da imagem depois exportando a imagem e
beleza build finalizado Agora se a gente fizer o seguinte ó docker images aqui na minha máquina ele vai me mostrar todas as imagens do docker que eu tenho aqui localmente né imagens que eu possuo na minha máquina aqui na máquina da F né Eu tenho algumas imagens aqui que não importam certo que eu usei em algum momento da minha vida o que importa para nós é essa imagem aqui que a gente acabou de criar que é nossa imagem angler hello world ela tá com a tag latest e aqui ela foi criada 12 segundos atrás essa
tag latest basicamente indica que a gente tá tem aqui localmente a versão mais atualizada dessa imagem angular hello world Por que é mais atualizada porque só tem uma e a gente acabou de criar ela né E aí como a gente não deu como a gente não definiu uma tag específica para essa imagem que a gente criou o angler por default já deu para ela uma tag latest né atribuiu para ela tag latest latest que seria a mais recente que existe no caso é a única que existe também agora pra gente executar essa imagem a gente
faz o seguinte ó docker Run né docker Run angular hello world E aí ele já Dev mostrar aqui PR nós o resultado da execução dessa imagem O que que significa a execução dessa imagem significa pegar todo esse ambiente que a gente empacotou e então rodar ele e esse rodar ele significa executar o comando que a gente definiu nesse docker file aqui esse comand lembra que eu falei para vocês define o comando que vai ser e executado em cima dessa imagem assim que ela for inicializada no caso a gente definiu que ele que é para ele
rodar NP M start então quando eu fiz o Run dessa imagem a imagem é um SnapShot da minha aplicação combinado com detalhes do ambiente né Para que ela Rode ele rodou aqui o npm start ele disse aqui ó que a minha aplicação tá rodando em local host 4200 Só que tem um ponto se a gente tentar acessar esse local host 4200 Deixa eu só parar a execução aqui local na minha máquina né que tava rodando ó deixa eu parar aqui localmente eu quero deixar a execução só da minha imagem ali o local aqui eu quero
quebrar né Eu quero que caia quero que mantenha só a execução do docker se a gente tentar acessar aqui novamente o nosso local host 4200 ele tá funcionando por não era para tá funcionando né vamos ver vamos ver vamos ver vamos ver vamos dar aqui um docker PS só para ver esse comando aqui docker PS basicamente mostra tudo que tá executando com o docker atualmente na tua máquina né mostra toos os coners que estão rodando se eu der um docker aqui PS Eu vou ver que eu tenho aqui ah eu tenho outra imagem do docker
aqui rodando deixa eu stopar Essa aqui era um teste que eu tava fazendo antes da Live né beleza agora sim ó se a gente der o docker PS a gente vê que tá rodando aqui localmente pra gente somente um contêiner baseado na imagem angler Hell World que foi a imagem que a gente acabou de criar e ele ã ele expõe Teoricamente a porta 4200 né do protocolo TCP só que se a gente entrar aqui em local host 4200 a gente não consegue acessar mais a aplicação né Agora sim eu derrubei tudo que tava rodando Então
tá rodando só meu docker não tô conseguindo acessar cara mas como é que eu não tô conseguindo acessar se eu coloquei aqui que a minha aplicação expõe a porta 4200 e ele tá dizendo aqui que essa aplicação tem algo né que esse contêiner tem algo rodando na porta dele 4200 o ponto aqui é que a porta 4200 do contêiner é diferente da porta 4200 da tua máquina o docker ele ele o o teu contêiner é como se ele tivesse uma interface de rede própria Então o que está rodando no local host 4200 da minha máquina
do meu Mac que não é correspondente ao local host 4200 do meu contêiner tu tu pode sempre imaginar o teu contêiner como uma máquina distinta Então se tu pegasse dois computadores aqui ó vou até dar um exemplo peguei outro computador certo meu computador do trabalho Pego aqui ele inicializo um projeto angular nele e coloco para rodar em local host 4200 eu não ia conseguir nesse meu computador aqui acessar localhost 4200 e acessar o que tava estava rodando esse PC né Vocês sabem que não dá para fazer isso por que que eu conseguiria fazer isso com
o meu contêiner não consigo certo então para que eu consiga acessar as aplicações que estão rodando ali no meu contêiner eu preciso explicitamente fazer esse mapeamento eu preciso fazer um tunelamento da porta do contêiner para uma porta da minha máquina local certo para que eu consiga acessar aquela aplicação então quando a gente for rodar o nosso a nossa imagem angler aqui a gente precisa mapear aqui eu quero pegar a porta 4200 do conteiner e tunelar né fazer um túnel um mapeamento pra minha porta 4200 local para que eu consiga acessar a aplicação que tá rodando
lá dentro daquele contêiner então o seguinte ó já vou ensinar mais um comando para vocês como eu paro a execução de um coner docker a gente usa o comando docker stop docker stop passando o ID do container esse ID do container vocês podem obter através do comando docker PS que eu acabei de mostrar para vocês que lista todos os contêiners que estão rodando quando eu dou um docker Stop passo o ID ele era para parar a aplicação do Meu Container então se eu der um docker PS agora ó não tem mais nada rodando Beleza então
nós vamos rodar de novo a nossa imagem só que agora a gente vai fazer esse tunelamento que eu falei para vocês deixa eu tentar aqui preguiçosamente achar o meu comando Ah tá aqui nesse não ó docker Run angular hello world só que ao invés de só fazer o Run angular hello world eu quero docker Run e eu vou passar uma uma Flag aqui ó a Flag de menos P eu vou passar o docker Run menos P para fazer o mapeamento da porta e eu quero mapear a porta 4200 pra porta 4200 né Eu sempre me
confundo qual vem primeiro Mas eu deixei aqui no notion para vocês então a porta que vem primeiro é a porta do host então eu quero mapear a porta do meu PC né a porta 4200 do meu PC para corresponder a porta 4200 do contêiner então primeiro é do host depois é do contêiner Como Eu Quero manter a mesma é só botar 4200 dois pontos 4200 quando eu executar agora Teoricamente era pra gente conseguir acessar a nossa aplicação né e não de novo não vai funcionar Mas isso não está funcionando não por causa do docker agora
mas por causa do ângul certo o angler quando ele inicializa um novo programa rodando local ele mapeia para local host então ele usa a interface de somente local host ele não usa a interface de 00 que aí mapearia pro IP daquela máquina na qual ele tá rodando certo então o que a gente vai fazer é só fazer uma alteração no nosso no nosso na nossa aplicação angular para que funcione isso então aqui eu vou fazer um docker Stop na verdade primeiro ten que saber o id né docker PS para pegar o id e agora se
a gente observar aqui ó Vocês já vão ver que na parte de ports ele já me mostra diferente antes ele mostrava só 4200 bar TCP Agora ele já mostra o seguinte ó que ele tá fazendo mapeamento de toda a de toda a de toda a interface de rede local aqui da minha máquina né na porta 4200 pra porta 4200 do contêiner ol El já mostra de uma maneira diferente porque a gente fez aqui aquele comandinho menos P mas eu vou stopar o contêiner porque isso aqui não serve para nós porque de de qualquer forma o
angular não tá ouvindo aqui na interface 0.0.0 o que a gente vai precisar fazer é vir aqui no nosso package Jason e no Serve eu vou ter que fazer um menos menos host vamos ver seic o pilet completo aqui para mim é menos menos host 0.0.0 se eu não me engano vou até confirmar no no Google porque eu não me lembro certinho mas é algo específico do angular isso se fosse uma outra aplicação que não tem esse problema já funcionaria por exemplo aplicação react não precisa fazer isso hã é menos menos host tá menos menos
host beleza só que agora como a gente alterou a nossa aplicação a gente fez uma modificação em um dos arquivos da nossa aplicação a gente vai precisar gerar uma nova imagem aquela imagem que a gente gerou antes contém um s um Snapshot desatualizado da nossa aplicação porque agora a gente alterou ela né então a gente vai ter que gerar novamente a nossa imagem e PR mostrar para vocês mas ainda isso eu vou até fazer uma alteração aqui no index HTML só para mostrar que a gente tá gerando uma nova versão com essa atualização do da
nossa aplicação Deixa eu tirar esse Zoom gigantesco aqui que eu coloquei vou só botar aqui ó congratulations your apps Running on version 2.0 né 2.0 Beleza agora o que a gente vai fazer vamos começar do começo vamos fazer docker build menos T angular hello world foi se nome que a gente deu pra imagem nem me lembro mais docker images eh angler hello world perfeito só que agora eu quero criar uma nova tag como se fosse uma nova versão né Eu quero criar o o angler hello world na versão sei lá 2.0 né então para isso
a gente vai criar uma nova tag mas eu já mostro para vocês como é que a gente faz então vou fazer um docker build Men T angular hello world ponto aqui se eu não me engano eu já posso passar a tag direto no momento de fazer o build então eu vou criar a versão 2.0 se eu não me engano mas também tem o comando tag né que a gente pode usar para fazer isso eu vou só só confirmar vou tentar rodar assim não tenho certeza se já assim ele já vai fazer o a tag para
nós sen não a gente cria a tag na mão com a com o comando tag certo que a gente vai ter aquela versão antiga que a gente criou essa versão nova e a gente vai tá distinguindo elas através da tag então docker build menos C passando o mesmo nome de imagem só que agora passando uma tag através dos dois pontos e usando aqui o ponto para identificar que é para pegar na raiz desse projeto Don enter ele tá buildando né vamos ver se depois vai ter funcionado lá a questão da tag eu tenho quase certeza
que sim mas eu não me lembro direito vamos esperar ele buildar aqui né buildar nossa imagem Beleza agora eu vou fazer aqui um docker images E se a gente ver aqui ó olha só olha só funcionou se a gente ver aqui agora localmente eu tenho duas versões da imagem angler hello world eu tenho uma versão que é a latest que não é verdade né ela não é a latest já que no momento quando a gente criou a gente não definiu nenhuma tag e o docker pro default dá a tag latest PR PR imagens que a
gente não define tag explicitamente então eu tenho localmente duas versões da imagem angular hello world a versão latest que foi que a gente tinha criado antes e agora a versão 2.0 né a gente identifica isso através da tag agora quando eu for rodar eu vou ter que especificar qual dessas versões eu quero usar usando a tag para isso então vou rodar aqui ó docker Run docker Run menos P né fazendo map das portas 4200 para 4200 só que eu quero rodar angular deixa Minimizar ISO aqui ang Hell World teec 2.0 certo eu quero rodar a
versão 2.0 e vamos executar Teoricamente agora era para funcionar se não funcionar eu tô lascada porque aí era isso que eu tinha mapeado localmente que deveria ser que eu tinha mapeado mentalmente né que eu precisava fazer mas se eu esqueci de alguma coisa também a gente corrige Não mas deu certo Deu certo dessa vez os deuses da Computação não não quiseram me fazer passar vergonha Para quem para quem tá acompanhando a primeira Live aqui no canal primeiro Live cing é muito comum os deuses da Computação fazerem a gente passar vergonha né da mesma forma que
eles fazem no nosso dia a dia no trabalho que a gente passa horas se humilhando para um bug na Live acontece igual Então já passei aqui muitas horas me humilhando ao vivo né caçando o bug e a no final o bug era uma linha que eu tinha esquecido mas é isso né é assim esse mundo lindo da a programação é assim mas boa funcionou Então é isso galera já matamos né já aprendemos aqui o básico que vocês precisavam aprender sobre docker para finalizar essa parte de docker e ir pra parte de docker compose que é
uma parte um pouquinho mais avançada que eu não tinha nunca falado aqui no canal eu quero só concluir essa parte aqui do docker explicando para vocês o que que é o docker Hub então vocês perceberam que eu mostrei para vocês aqui que eu tenho alguma imagens locais né do do docker tenho algumas imagens aqui só que para quem já já começou a dar uma questionada mental né sobre o docker vocês devem estar pensando cara beleza ela tem a imagem ali local da aplicação dela só que como é que ela faz para compartilhar essa imagem com
o time dela ou como é que como é que eu faç para compartilhar essa imagem lá pra minha WS ou lá pra minha VPS né que eu tiver utilizando não sei se eu t utizando alguma VPS de um outro provedor né ou PR máquina lá da minha empresa onde a gente roda o nosso a nossa aplicação lá minha VPS da hostgator enfim como é que eu faço para mandar essa minha imagem aqui né para lá o docker ele mais ou menos funciona como um código então da mesma forma que a gente tem o github né
salar os nossos projetos né a gente US o o giub como um repositório remoto o docker também tem um repositório remoto que é o docker Hub lá no docker Hub a gente consegue compartilhar imagens docker é um repositório de imagens do docker e lá nesse docker Hub a gente consegue encontrar tanto imagens oficiais então é aqui que eu tinha falado para vocês que vocês vão buscar imagens das Ferramentas que vocês querem usar das linguagens que vocês querem usar para usar como base aqui no docker File de vocês quanto compartilhar imagens que vocês mesmos criaram né
podendo deixar elas privadas ou públicas se ele resolver aqui carregar eu consigo mostrar para vocês mas vocês vão ver que tem aqui no dockerhub tem imagem do da jdk pra gente utilizar tem imagem do Python do engex do Alpine né o bunto que eu tinha falado para vocês ó a imagem oficial do bunto para vocês usarem como base Caso precisem Construir ali umum dockerfile que precisa especificamente utilizar o bunto imagem do postgress para quem precisa subir né o seu banco de dados usando docker cara tem imagem de tudo quanto é linguagem e ferramenta aqui né
das populares E aí a gente tem as imagens que são oficiais do docker né que foram construídas pelo time do docker São tem a curadoria da equipe do docker né são imagens open source como também temos as imagens que são de verified publisher né que são de publicadores verificados que seriam das empresas então por exemplo tem imagem do dat Dog imagem do grafana né aqui o new relic que as empresas utilizam né essas imagens para quando vão subir os servidores do dat Dog do grafana do New relic do do CAD advisor aqui do Google para
fazer monitoramento do de consumo de um contêiner dynamic Trace esse tipo de coisa tudo a galera usa contêiner do docker né E para isso utilizam aqui as imagens oficiais então tem tudo aqui disponível para vocês usarem Caso precisem subir algum contêiner com algum desses projetos ferramentas aqui mas a gente pode também salvar os nossos próprios né as nossas próprias imagens a gente pode ter nossos próprios repositórios Então o que eu vou mostrar para vocês é como é que a gente pode essa nossa imagem aqui do angular hello world que a gente acabou de criar lá
pro meu docker Hub primeiro vocês vão ter que rodar o comando de docker login aqui na máquina de vocês para fazer o o login lá com o docker Hub eu já tô logada se eu não me engano ó eu tô logada Então não preciso se vocês não tivessem não tiverem logados ele vai pedir aqui para vocês as credenciais para vocês logar e depois disso é basicamente a gente fazer um push né lá para noss no fazer um p da nossa imagem que tá aqui local lá pro nosso repositório no docker Então como é que a
gente faz isso é usar o comando docker push cara é bem parecido com o Git né bem parecido com o comando Git push então docker push E aí eu vou passar Qual é a imagem que eu quero enviar para lá é o angler hello world na tag 2.0 é a que eu quero mandar para lá só que isso aqui não basta eu preciso mapear também o nome do repositório o nome do da conta né normalmente o nome da conta é o nome do nosso usuário então aqui ó o meu é equ perd então tudo que
for repositório meu vai ser prefixado com esse que perd na frente então esse caso aqui do angler não é diferente vou ter que colocar que perd barra que perd barra angular hello world na tag 2.0 E aí eu faço push E aí vai aparecer lá vinculado com a minha conta porque eu já tô logada né se eu não tivesse logada conta que perd isso aqui obviamente não ia funcionar ã a imagem não existe local Ah é não existe local por qu porque eu não eu tenho que agora né não posso só fazer esse push porque
o docker não sabe que imagem é essa que eu tô falando beleza o angular hello world 2.0 existe na minha máquina mas não existe nenhuma imagem prefixada com esse kerd aqui né então eu tenho que prefixar a minha imagem com isso então para isso eu faço docker tag e aqui eu tenho que passar primeiro o nome da imagem que eu quero e depois a tag então vou fazer o seguinte ó docker tag angular hello world 2.0 para hi perd hello world 2.0 criei a tag Agora sim eu posso fazer o push aí ele já vai
saber né basicamente eu fiz o mapeamento eu tô dizendo que o angler hello world 2.0 equivale a kerd hell Word 2.0 dessa maneira ele consegue criar lá ó o repositório para mim dentro da conta kdev né é só esperar ele enviar tá fazendo um push aqui como mesma coisa do Git esperar esperar um pouquinho beleza criou agora se eu venho aqui na minha conta do dockerhub Ó vai tá aqui o meu hello world meu angler hello world e só tem uma tag disponível a tag 2.0 aí Digamos que eu faço uma alteração nessa aplicação né
eu Gere uma nova versão dela vou vir aqui no app component HTML e vou alterar de novo eu já olho o chat galera faz tempo que eu não tô olhando Então já vou olhar Então vou criar a versão 3.0 o que que eu vou fazer eu vou primeiro buildar essa imagem localmente né vou vir aqui docker Build a 3.0 esperar ele buildar tô buildando a imagem né aí obviamente depois de buildar testa local para ver se tá funcionando mas eu não vou testar porque a gente só alterou o código beleza criei uma nova versão da
minha aplicação né um novo SnapShot ou seja uma nova imagem que eu vou fazer vou tagar de novo né para tagar aqui certinho pro nome do meu repositório beleza criei a 3.0 agora vou fazer um push da 3.0 um push lá para dentro de kerd angler hello world ele vai fazer o push lá pra minha conta né enviando essa tag nova essa versão nova da minha imagem e aí já deve aparecer lá no repositório para mim E aí o meu time pode usar a versão que quiser dessa minha imagem né pode usar a versão tanto
a 2.0 quanto a 3.0 o meu time ou o meu cliente se eu tiver vendendo isso como um serviço enfim né A minha equipe então aqui ó já tem a versão 3.0 e a 2.0 tudo isso eu controlo através da tag beleza E é isto certo é isto de básico que a gente precisa saber de angular de docker eu deixei aqui para vocês no no notion alguns outros comandinho certo que são úteis mas eu passei aqui pelos principais que vocês mais vão usar durante o dia de vocês essa parte aqui dos Comandos que vocês usam
dentro do docker file é pesquisando também Então dependendo do que vocês precisarem tipo ah preciso ã instalar o sei lá o brill não sei por não sei lá por algum motivo tu tá tendo que usar o Mac OS tentro do teu coner para você instalar o brill cara vai ter que mudar aqui qual imagem tu vai usar imagem base né vai ter que usar uma imagem do Mac que acho que nem sei se tem imagem oficial tem umas pirat vai ter que rodar o comando para instalar o brio usando né o aptg depois vai ter
que rodar algum comando do bro PR instalar alguma coisa ou Ah vou ter que precisar fazer algum mapeamento de proxy na minha máquina né usar algum comando do sistema operacional vai rodando aqui vai colocando no teu Dock F tudo isso vocês vão encontrar na internet galera tem documentação do docker stack overflow disso não falta também o chat APT tá aí para ajudar o ponto é vocês saberem para que que serve e o funcionamento básico o resto a gente vai desenrolando né Não dá para não dá para saber tudo mas a gente vai a gente vai
se virando eu vou dar uma pausinha para responder algumas perguntas do chat faz tempo que eu não ol o chat Então vamos lá vamos começar o Tauan falou que não achou o link do notion vou mandar aqui para vocês o link do notion de novo aí boa já mandei aí o tan mandou Boa noite antes n ele ele deu parabéns pelo conteúdo então valeu e ele pediu né esse Road map da Live do no não tem como deixar disponível aí já mandei aqui no chat para vocês ã o o coelhas demorei para conseguir ler o
nome coelhas ele perguntou Então nesse caso específico para facilitar o pool daria para fazer a tag tanto como 3.0 quanto para leater certo sim sim tu pode com certeza criar como latest que aí eu não preciso ficar criando tipo assim olha posso fazer o seguinte né criar uma nova latest eu vir aqui tipo assim ó tu não pode criar todas elas como latest por qu porque se tu colocar todas como latest quando tu entrar aqui tu vai entrar vai abrir só vai ter latest né aqui na tua máquina bem e tu acaba sobrescrevendo as latest
então o que que tu tem que fazer localmente quando tu for gerar elas tu vem e gera aqui ó quando eu faço o docker build eu Gero com a versão que eu quero para eu conseguir ter um mapeamento aqui quando eu for fazer o push lá pro pro meu repositório daí eu digo que essa é a latest né eu venho aqui e faço o mapeamento da tag vou dizer que a Cadê a 3.0 aqui o comando que eu tinha pegado que a 3.0 vai ser a minha latest E aí eu vou fazer um push da
latest para lá e aí eu deixo lá disponível como a mais recente certo é é que vai aparecer vão aparecer como duas diferentes né mesmo que aqui elas sejam iguais Teoricamente o docker não faz essa distinção como eu dei tags diferentes para ela ele ele coloca ali como se elas fossem diferentes certo boa deixa eu ver se tem AL umaa isso a ideia eu não tinha visto aqui a pergunta né mas como Davi falou A ideia é que a tag seja um fator deer né que a gente use a tag como uma forma de diferenciar
uma versão ou outra da nossa imagem e exatamente como o Marcelo falou também a gente pode manter quantas tags a gente quiser né cara se tu entrar em algumas imagens aqui populares tipo a própria imagem do node vocês vão ver aqui ó Cadê aqui sei lá do Index vocês vão ver que tem muita tag nessa imagem Aqui tem muita muita muita muita muita muita muita aqui tem várias distinções certo por qu Porque além da versão aqui o que que acontece também acabei não explicando para vocês como o contêiner lembra um contêiner do docker ele Compartilha
o Kel do sistema operacional ou seja tu não consegue rar na tua máquina um contêiner que tenha sido construído né uma imagem que tenha sido buildada para uma arquitetura de de processador diferente da tua certo uma arquitetura de sistema operacional por exemplo o meu caso né aqui eu tô usando um Mac o Mac é o o meu Mac M1 é am64 arquitetura dele se eu não me engano eu só iia aqui no Google para ver se eu não tô falando bobagem mas temho comas a certeza que é a RM 664 porém quem tem um Mac
que tem processador Intel tem uma arquitetura de processador diferente Se eu tentar rodar na minha máquina uma imagem que foi buildada para uma arquitetura Intel não vai rodar no meu Mac M1 certo eu vou ter essa incompatibilidade mas fe Tu não disse que isso vinha pro para resolver o problema de na minha máquina funciona do outro não funciona sim vem pra gente resolver esse problema mesmo que eu não tenha um Mac Intel aqui localmente para eu buildar o meu a minha imagem pra arquitetura do Mc Intel eu consigo fazer isso o docker me ajuda é
só passar uma Flag no momento de buildar minha imagem então se eu não passei Flag nenhuma ele construiu aqui as minhas imagens usando uma arquitetura padrão né que é aqui ó deixa eu mostrar para vocês que é aqui a arquitetura arm64 pro sistema operacional Linux certo usou o padrão se eu quisesse definir explicitamente para ele usar a arquitetura de amd64 ao invés de arm64 eu posso vir aqui e passar Arc amd64 eu não deixa eu só me lembrar certinho se a Flag é assim deixa eu ver se eu botei aqui no notion acaba que é
uma Flag que eu não uso muito eu não me lembro direito o a sintaxe dela mas é algo nesse sentido deixa eu ver aqui no Google Flag architecture architecture docker multiplatform build né Aí se chama aqui plataform só passar plataform Beleza então passa aqui ó plataform certo plataform Linux hã deixa eu copiar ali direto para não fazer bobagem Linux amd64 eu quero usar que é diferente da minha arquitetura local certo Linux amd64 então eu vou buildar aqui nem tô fazendo build né Tava fazendo o push aqui bem louca docker build menos t angler hello world
latest só que agora a tag que eu vou passar para ele vai ser latest na versão amd64 para conseguir diferenciar E aí eu tô usando aqui a Flag plataform Linux amd64 e aqui né eu passei a ordem errada dos Comandos Mas não tem problema docker build não sei se eu posso fazer assim eu não me lembro a ordem das flags tá vou pedir pro chat me ajudar mas é isso tá eu vou mostrar funcionando mas deixa eu só pegar a ordem certa aqui já tava antes ele já tava me ajudando deixa eu pegar ele aqui
vai lá chat PT me ajude a montar o comando corretamente beleza é docker build plataform tá docker build menos menos plataforma Linux amd64 Men t para passar tag E aí o né que eu tinha esquecido aparentemente era esse o problema beleza ele tá buildando tá buildando para uma arquitetura diferente da arquitetura que eu tenho aqui local né para uma arquitetura amd64 e aí eu vou gerar essa nova versão para essa arquitetura e posso fazer o p lá pro meu repositório também eu vou ter disponibilizado né Essas duas versões E aí independente da arquitetura que a
pessoa tiver ela vai poder rodar essa minha imagem certo Então essa que é a mágica do docker a mágica é mesmo que eu compartilhe o Kernel do host local eu posso né através dessa dessa Flag buildar para uma arquitetura de os diferente o Rafael virou membro aí do canal então valeu Rafa seja bem-vindo e o Caio tinha mandado um super chat aqui também ele falou Fê Parabéns pelos seus vídeos Deus abençoe Valeu Caio tamos junto demais muito obrigada boa agora eu vou fazer um docker tag né para tar aqui docker tag angler hello world três
Como é que é o nome que eu dei agora agora já não me lembro mais vamos ver aqui docker image só para eu lembrar latest md4 passei então vamos lá docker tag latest MD 64 PR kerd angular Hell World lat d64 também E aí por fim nós fazemos um push docker push E aí vai aparecer lá e já vai est disponível PR nós nós vamos pro docker comp agora galera nós vamos pro docker comp agora vamos lá Vou só esperar aqui fazer o p e vamos docker comp que já deu horinha de Live né você
já tá cansados Inclusive eu já tô cansada mas como é intensivão né não existi intensivão de 10 minutos então tá tudo certo aí ó já apareceu aqui para nós pelo jeito eu buei errado ah não tá certo amd64 e aqui PR arquitetura RM 64 ó Então tá certinho né a gente disponibilizou aqui pras duas arquit Ah e se a gente vier aqui nas tags aí ele aparece aqui certinho o osar para nós ó Então a gente tem aqui algumas né na versão arm e uma que a gente acabou de criar na versão AMD Beleza então
vamos continuar Vamos pro docker compose docker compose galera que é o docker compose o docker compose é um carinha que vai nos ajudar a orquestrar aplicações que são multic containers então tudo que a gente viu até agora tudo que a gente tava falando ao longo dessa Live Era se preocupando com somente uma aplicação certo a gente tava doiz a nossa aplicação Zinha angular só ela ali quietinha sozinha né só que tem certos sistemas certas aplicações que vão exigir mais de um contêiner para que ele funcione por exemplo se eu tô subindo um backend certo que
tem comunicação com banco de dados automaticamente eu já vou precisar de uma imagem para minha aplicação por exemplo uma aplicação Java uma p Java e um coner do meu banco de dados certo vou precisar orquestrar esses dois agora se eu tô trabalhando com grafana com kibana com Deus cara vou ter que subir um contêiner para cada uma dessas aplicações também E aí se torna cada vez mais difícil eu fazer essa orquestração manualmente e o docker compose surgiu para nos ajudar com isso o docker compose vai permitir que a gente reúna em um único arquivo certo
a a definição né ali para que a gente consiga executar vários contêiners ao mesmo tempo né múltiplos contêiners que vão ser ali os contêiners que vão todos em conjunto né colaborar para formar a minha aplicação certo e aí no no no arquivo do docker compose a gente consegue configurar né Eh volumes que que vão ser passados para esses contêiners então os contêiners podem compartilhar volumes Quando eu digo volumes é como se eles compartilhassem disco mesmo né lembrando os cont é como se fossem máquinas apartadas Então se explicitamente eu não dizer que eles compartilham disco né
que eles compartilham pastas né em comum recursos em comum eles não vão compartilhar mas eu consigo fazer isso através de volumes outra coisa eles TM interface de redes Independentes então se eu não fizer o mapeamento explícito que eles estão na mesma Network na mesma rede eles não vão conseguir se comunicar um com os outros né um container um com outro então tudo isso eu consigo orquestrar aqui dentro do meu docker compose certo e gerenciar essas aplicações mais complexas e eu vou mostrar para vocês como é que funciona Olha só seguinte vamos aqui nessa nossa aplicação
angular também criar um novo arquivo docker compose certo aqui dentro o que que a gente vai fazer a gente vai fazer um compose de uma aplicação Spring e uma aplicação angular e colocar elas para rodarem juntas certo subirem juntas como é que a gente vai fazer isso eu deixei um exemplo ali no notion também eu vou explicando para vocês primeira coisa que a gente faz é definir os nossos Services então ah colei aqui no no terminal então aqui a gente tem os nossos servic certo eu tinha colocado ali no notion para nós eu vou ter
o front end e o backend primeira coisa que eu posso definir para esses meus Services e esse service vai ser literalmente o nome que vai ser mapeado para cada container então quando eu ver lá todos os contêiners que estão rodando eu posso acessar eles através desse nomezinho aqui o nome que a gente deu para eles tá então aqui eu posso de definir para que para esses Services Qual a imagem que eles vão usar né então cada service aqui Vai representar um contêiner que tá sendo executado e eu posso definir qual imagem de base ele vai
usar eu posso definir tanto uma imagem quanto o caminho pro docker file daquele serviço né então se eu quisesse usar aqui o docker file local aqui da minha raiz né do do projeto que é o docker f que diz respeito a minha aplicação angular É só botar aqui o build dois pontos ponto barra né para indicar que é para usar o docker Fire que tá aqui na raiz né da onde esse docker compos está da onde arquivo docker compose está a minha imagem de backend eu não tenho aqui local então eu já vou definir para
ela uma imagem pronta eu não quero passar aqui o caminho do docker file E aí qual que é a diferença entre eu passar o caminho da onde está o docker file ou passar o nome da imagem já pronta cara se tu tiver usando aqui se tu quiser subir um grafana tu não vai ter o docker file aqui do grafana tá ligado tu vai usar já a imagem pronta do grafana que tá disponível lá pra gente no no docker Hub aqui o docker Hub tava olhando no lugar errado então vou lá e vou pegar a imagem
do grafana que já tá pronta né não vou passar explicitamente o caminho da onde está o docker file que monta a imagem do grafana não só vou usar a imagem já pronto Se é uma aplicação minha mesmo uma um serviço meu um local né eu posso querer explicitamente definir o o pef pro docker file daquilo dessa maneira toda vez que a gente subiu o docker compose que vai subir todos os coners ao mesmo tempo eu já posso refazer o build daquela imagem mas eu tenho essas duas opções né de usar a imagem pronta ou usar
o docker file E aí ele usa ali o o docker file como fonte para fazer o build da imagem depois se eu quisesse passar a imagem eu uso uma outra configuração que se eu não me engano é só usar im mas eu não tenho certeza é só passar im mesmo aqui ó docker o meu serviço backend eu vou pegar ele direto aqui de uma imagem pública que existe que é a imagem que perd hello world Spring né que é uma imagem parecida com essa do angler que a gente construiu só que do Spring que é
um hello world em Spring boot deixa eu até pegar o nome certinho aqui dela equip Dev Spring boot Hello Word então eu quero usar essa imagem aqui certo que perd Spring buot H World não vou colocar caminho de build porque eu não quero usar um nenhum docker file eu já vou mapear aqui já vou fazer né o o mapeamento das portas lembra que quando a gente estava rodando a imagem lá na mão a gente tinha que mapear com a Flag menos P aqui a gente não faz mais isso no docker compose a gente já mapeia
tudo aqui meu arquivo docker compose essa minha aplicação sping boot ela roda numa porta 8080 Então vou mapear aqui a porta 8080 E aí eu posso também fazer com que esse meu contêiner ele pertença a uma Network certo e aqui essa Network basicamente vai servir de ponte entre o meu front end e o meu backend para que eles pertençam à mesma Network eu consiga fazer requisições de dentro do meu contêiner do frontend para o container do backend né fazer requisições http mesmo certo e aí a gente define uma nova Network aqui no nosso socker compose
através aqui dessa configuração de Networks certo e aí tem diferentes tipos de Networks que a gente pode criar aqui no caso eu criei uma Network do tipo Bridge e até coloquei aqui uma uma explicação dos diferentes tipos de Networks deixa eu até ver aqui ó o o tipo Bridge basicamente ele vai criar uma ponte entre esses dois contêiners é um tunelamento que nem a gente estava fazendo antes o tunelamento entre a minha máquina aqui local e o contêiner lá da nossa aplicação angular e e e vai ser uma rede virtual isolada paraa comunicação desses outros
contêiners então quem está de fora dessa rede não vai conseguir acessar eles certo essa o tipo Bridge mas existe exem outros tipos de de redes também tem tudo lá a documentação do docker mas eu tô só mostrando PR vocês que existe essa possibilidade tá então vou deixar aqui a gente criou essa essa Network app Network né usando driver de Bridge para criar uma ponte certo eu vou tirar esses comentários que eu tinha colocado eu coloquei lá no notion só para vocês entenderem tudo que a gente estava configurando e fui eu que coloquei mesmo tá não
foi Oat PR se vocês verem Tá bem tá bem abrasileirado a forma de explicação eu tinha colocado porque eu imaginei que talvez pudesse dar dúvidas ã exato o Hernani fez um comentário como se fosse o corse do Spring com angler né eu tô habilitando o corse para que eu consiga ter uma comunicação de um com o outro é tipo isso mas é eu tô colocando eles na mesma rede para que eles consigam né comunicar um com o outro porque eh se eles não tiverem eles não vão conseguir se comunicar porque os dois estão rodando em
local host né que seria localmente ali em cada coner certo o William falou o seguinte ó O docker é usado geralmente em Empresas Grandes Itaú Mel no B etc pois precisam subir diversas aplicações de forma padronizada rodar em produção de forma padronizada Sim esse é um motivo né subir as aplicações em produção de forma padron realmente nessas empresas grandes as próprias empresas TM imagens próprias né de de projetos templates de spring template angular tipo já tem tudo padronizado tu já começa ali o teu pontapé de começo na num projeto já vem com tudo aquilo configurado
né com docker já configurado e tal então realmente é muito utilizado para padronizar inf code é usado para isso também né terraform e tal para padronizar a infra também mas não é usado só por Empresas Grandes certo o docker é usado cara o docker é usado por todo mundo assim docker é uma ferramenta muito poderosa justamente porque ajuda nessa questão do empacotamento da tua aplicação para tu conseguir fazer ela rodar em qualquer lugar sem depender da da plataforma do ambiente certo Belê então colocamos aqui dois Services que a gente quer subir né que seriam dois
contêiners eu quero subir um contêiner do meu backend e um no container do meu front o front a gente já tava subindo antes a mão mapeei para eles certinho as portas né na qual a porta na qual eles expõem e na qual eu quero tunelar aqui pra minha pra minha máquina local e coloquei eles para pertencerem à mesma Network para que eu consiga fazer a requisição de um pro outro né da mesma maneira que a gente precisou fazer aquela aquele momento né o a Flag menus pre para eu conseguir acessar o local host 4200 do
contêiner da nossa aplicação angular a mesma coisa a gente precisa fazer aqui no no docker compos quando a gente quer que um contêiner acesse o outro eles precisam estar na mesma rede certo e aí para testar que isso deles estarem na mesma rede está funcionando olha só o que eu vou fazer aqui dentro do nosso app component eu vou colocar uma uma coisinha né eu vou colocar um que assim que o esse componente seja inicializado ele faa uma requisição lá nosso back só PR gente ver se funcionando então aqui basicamente que eu vou fazer é
eu vou aqui através do Construtor pegar um certo e aqui eu vou fazer HP Ai meu Deus HP client dis ppli né e aqui eu tenho que colocar como privado eu tô mal acostumada não me lembro mais das coisas do angler pon get aí aqui eu vou colocar http né não é https porque não tá Deploy é http e aqui ao invés de colocar local host porta 8080 Olha o que eu vou fazer eu vou colocar aqui backend porta 8080 bar hellow né que é o end Point que esse backend ali expõe Como assim backend
porta 8080 cara quando a gente colocou aqui no docker compos que esses dois containers vão pertencer à mesma rede quando uma requisição for disparada desse contêiner aqui para uma url com prefixo aqui backend o próprio docker vai tratar de fazer o mapeamento desse backend aqui pro IP desse contêiner Aonde tá rodando meu backend e ele vai fazer o mapeamento tudo certinho pra gente certo então a gente consegue acessar um contêiner ou outro usando esse Alias né aqui é um uma abstração do IP real dessa desse contêiner aqui porque no momento agora eu não sei qual
vai ser o IP desse contêiner certo a gente ainda nem rodou toda vez que eu rodar ele ele pode acabar caindo num num IP diferente aqui da rede local da minha casa né então eu não vou usar a chamada direta aqui através de IP eu vou usar um Alias E aí o docker depois vai ser responsável por fazer a tradução desse Alias aqui para mim pro IP Aonde esse coner realmente tá rodando certo e aqui eu vou fazer um subscribe basicamente vou printar esse data né fazer um console log do do valor que foi recebido
e deixa eu ver se eu não esqueci mais nada aqui hã acredito que não o meu a imagem aqui do meu frontend né já tem o comend para startar ela essa imagem aqui do meu Spring boot hello world também a gente pode até testar aqui localmente para ver que tá funcionando ó docker Run Men p 80 80 80 80 rodar o KD Spring boot col World na tag latest né Deixa eu ver qua as versões tem lá ah na verdade não precisa ser oerd posso usar que eu tenho local mesmo não quero pegar lá do
docker HUB deixa eu ver aqui a versão que eu ten local docker images Eu tenho ela aqui na versão 1.0 amd64 e que que mais Spring boot H World não tem mais nenhuma versão dela tá deixa eu tentar rodar assim 1.0 1.0 MD 64 só para ver se vai funcionar beleza aparentemente rodou deixa eu disparar uma requisição host porta 88 barra Hello ó retornando Hello Word né então beleza Tá funcionando essa imagem aqui só pra gente ter certeza que não tá pegando uma imagem quebrada Então deixa eu botar aqui né que eu quero usar essa
tag específica dela beleza Tá então Teoricamente era para funcionar esse meu docker compos aqui o que a gente vai fazer fazer o seguinte ó a gente vai ter que rodar o comando docker compose E aí deixa eu pegar minha colinha aqui porque eu não me lembro certinho os comandos docker compos que é muito comando para lembrar mas docker compose up né PR up seria para ele startar todos os containers que estão definidos aqui no meu docker compose em então docker compose up e eu vou fazer o menos menos build Por que que é essa Flag
menos menos build essa Flag menos menos build fala para que pede para que o docker basicamente build as imagens antes de iniciar elas né build as imagens dos contêiners para os contêiners que tiverem aqui o pef de build definido esse do meu backend não tem né Eu só defini a imagem que deve ser usada eu não defini um pef da onde tá o docker file disso então não vai buildar nada ele vai usar essa imagem aqui esse SnapShot fechado e é isso já o meu front Change não eu defini um pef da onde tá guardado
o docker file desse front Change então toda vez que eu rodar um do compose up menos menos build ele já vai gerar uma versão nova né da imagem do meu Change uma versão mais recente gerar um SnapShot novo e aí Teoricamente acho que é só rodar isso e ponto né se eu não me engano tem que rodar o ponto também deixa eu ver eu botei uns exemplos Cadê é docker compose up menos menos Build ponto eu não tenho um do comp local mentira não tenho vou ter que instalar eu só tenho no PC do trabalho
vamos lá sty macos ah só dá um bral beleza vamos lá brw install docker compos para quem não sabe eu uso o brw como meu meu instalador de coisas aqui no Mac o brw é bem Popular Vamos dar um esperar ele instalar beleza docker compose menus menus version Teoricamente funcionou voltando aqui pro terminal deixa eu fechar o meu terminal né para ele pegar o meu PF mais recente Agora sim docker compose up menos menos build ponto não precisa do ponto é só docker compose menos menos build mesmo Achei que ia precisar aí ele disse ó
Manifest Keeper Dev bar Spring boot H World 1.0 MD 64 not found ã deixa eu tentar o seguinte P access denied no reposter hum lá no meu reposter não tá com 1.0 amd64 Ah eu colei errado agora sim então de novo kerd bar springboot H Word 1.0 amd64 tem que tá exatamente a tag exatamente igual como tá lá no reposto né senão quando ele for fazer o pull da imagem ele não vai encontrar se eu não passar exatamente igual né então docker compose de novo Agora sim agora foi ele tá buildando ele vai buildar o
a imagem do meu front end e vai subir né os [Música] dois os dois contêiners ele falhou Ele disse que a porta já estava sendo usada Então vou dar aqui um docker PS e realmente acho que eu tinha esquecido de stopar a execução então vou fazer um docker Stop do nosso contêiner que a gente tinha executado antes e dá um docker Stop também do nosso contêiner do backend que a gente tinha inicializado antes para testar né então dei um docker Stop dos dois né as portas em uso Eu não conseguiria fazer o mapeamento mesmo docker
PS Beleza não tem nada rodando agora vou tentar de novo docker compose up build esperar beleza ol ele subiu aqui o o angler e subiu a aplicação Spring boot Teoricamente Os dois estão rodando certo que que eu vou fazer agora eu vou testar se eu consigo acessar o meu local host porta 4200 ele tá dando um erro vamos ver o que que tá acontecendo no Pointer except no Pointer Coitada né traumatizada com Java o trauma do cha foi muito bom tá dando um erro no Pointer Exception e para quem não entendeu no Java qualquer erro
é no Poter Exception tudo que tu faz tu vai ter um no Exception só que não é tá é um erro aqui do injector error porque eu esqueci de colocar o provider na aplicação angler Mas vamos beleza vamos lá de novo vamos ajustar aqui o app angler foi problema no angler mesmo tá não foi no docker foi porque eu esqueci ó que eu tô usando o HP client e eu tenho que passar o provider desse HP client que fica aqui no meu config então eu tenho colar prov HP certo os traumas sim Java trativa pessoas
emotional Damage Qual o qual a coisa que você mais tem pesadelo É tipo isso né ah com que que você tem mais pesadelo sim a resposta é sim somente sim não é algo é somente sim ã tá de novo deixa eu dar um docker compose Down para derrubar os dois né mais um comando aí ensinando para vocês com docker compos Down eu já reb já rebud ol tá começando a ficar muito tempo de Live eu já começo a me perder eu já derrubo todos os contêiners que estavam rodando a eh tudo junto né eu não
preciso fazer o docker stop de cada um deles então docker compose Down eu derrubo todos eles certo agora vamos fazer de novo um docker compose up menos menos build né para buildar novamente a imagem aqui do nosso front Change porque a gente fez alterações no código de novo e agora era para funcionar Então vamos lá rodando aqui boa inicializou não Reload Pronto né ele retornou aqui hello world angler certo só que deu erro na requisição na requisição http el conseguiu aqui chamar http dois pontos bar bar backend n eh eu vou fazer um teste ao
invés de backend eu vou colocar local host mas aí eu já vou mostrar para vocês que backend funcionaria também daqui a pouco a gente entra no best do Meu Container onde tá rodando minha aplicação angler e faz um Curl para vocês verem mas eu vou só testar com local host porque como eu criei uma rede Bridge eu acho que com local host normal já funcionaria acho que eu acabei me enganando quando expliquei PR vocês mas vamos testar tem problema ele não fez o mapeamento do do backend Ali do Alias Clear Vamos fazer um docker compose
up menos menos Build de novo ah pode ser um corse também boa bem pensado deixa eu até olhar o erro bem pensado eu acho que eu não fiz configuração de cors lá pode ser corse também vamos ver vamos ver testar com local host é não funcionou mas só pra gente ter certeza o que a gente vai fazer vou falar fazer isso que eu falei para vocês eu vou entrar no b então literalmente eu vou acessar o terminal do contêiner Aonde tá rodando meu angler minha aplicação angler e vou tentar dar um Curl PR o meu
backend para ver se vai dar certo que como o pessoal falou aí no chat pode ser só o cores mesmo que eu teria que configurar lá na imagem do do Spring né habilitar o cor e seria um saco então deixa eu só perguntar pro chat que eu esqueci o comando mas é como eu posso acessar o terminal de um service específico que rodei com o meu docker compose docker ex it aí o nome do container e Bim Bash ou Bin S dependendo né da imagem se a imagem tá usando se a imagem inclui um b
ou não né a imagem do node eu não sei se inclui B como a imagem do node é a imagem base da da imagem do nosso frontend tem que ser assim vamos ver fazer o seguinte docker PS não tem nenhum coner rodando porque eu acabei Stop eles o que eu vou fazer é um docker build compose up um docker compose up menos menos build menos D essa Flag menos D é a Flag detached que chama é para fazer um para tu startar os contêiners mas o teu terminal não ficar preso na execução deles né não
ficar vendo aqui o log de execução deles que eu terminal acaba ficando preso que se eu t de digitar qualquer outra coisa no terminal vou ter que stopar os dois containers então a gente passa essa Flag menos D para fazer um um detached que a gente chama né então ele vai só subir aqui e aí ele não prende o meu terminal ali na execução dos dois contêiners mas se eu der um docker PS vou ver que eles estão rodando Então beleza agora que eu vou fazer o docker eec né para executar um comando menus it
dentro do meu do meu angler hello world frontend H World front né é o nome ali do Service que tá rodando nosso frontend barra Bin bar best para tentar acessar o b não sei se tem B nessa imagem Dode tem então tá estamos aqui dentro Então olha só se eu der um LS aqui dentro que é o eu tô dentro do Meu Container agora né tô como se fosse dentro do terminal do Meu Container se eu rodo o comando LS que é o comando padrão de terminal para listar tudo que tem dentro de uma pasta
ele mostra tudo que tem dentro dessa minha pasta aqui o dockerfile o angler os arquivos da minha aplicação Então agora eu quero rodar um Curl né ã e dá o comando para rodar um Curl dentro do meu contêiner tô pedindo pro chat APT esses comandinho só para ele não a gente não perder tempo quebrando cabeça com isso é só fazer Curl https do Pont bar bar gooogle.com primeiro vou tentar beleza ó Eu dei um Curl em google.com ele me retornou né retornou que coisa do google google.com.br beleza Tá retornando então o Curl tá funcionando eu
vou tentar chamar agora dois pontos barra barra backend porta 8080 bar Hello e ele retornou Hello Word tá vendo Então o meu contêiner do angler tá conseguindo acessar o contêiner do meu back né do meu Spring Se eu tentar chamar Via Local host vamos ver se dá certo é aquilo que eu fiquei na dúvida que eu falei para vocês não deu certo ó não não funcionou então aquilo que eu tinha falado tava certo eu tenho que fazer a chamada através do Alias né usando aqui backend para que então o docker faça o mapeamento desse backend
pro IP real daquele container onde tá rodando meu backend quando eu tento usar local host porta 880 não funciona porque o o local host que eu tô me referindo aqui diz respeito ao local host do container do meu frontend que é um IP diferente do container do backend então que eu tava falando tava certo achei que eu tava louca mas tava certo realmente acho que não funcionou a requisição só por causa do cores mesmo mas é isso o Queen perguntou para que que serve o Curl o Curl é um comando de terminal para tu fazer
um uma chamada http num aplicação Então posso fazer um Curl aqui em do BR por exemplo fazer um Curl aqui e ele vai me retornar entendeu uma chamada backend é uma chamada http que vai É como se eu fizesse um get entendeu é um get naquela URL e ele retorna O que tem lá e é isso galera exato o Curl não não passa por cores né é uma chamada direta não tem cor cores é coisa do browser cores é regra de navegador então quando eu faço chamado direta por terminal usando Curl não tem cores quando
eu faço chamada de backend para backend fazendo né chamada ali de um servidor pro outro não tem cores cores é regra de browser de navegador então por isso que funcionou boa galera ã é isso falando muito aqui mostrei Para você acho que várias coisas interessantes ã um outro comando legal também então por exemplo agora a gente usou o det né então a gente já não tá mais vendo os logs do nosso os logs dos nossos dois containers ali que a gente inicializou se a gente quisesse mostrei para vocês como se conectar no B do do
teu contêiner para rodar comandos lá dentro né mas se eu quisesse ver os logs de execução como é que eu posso fazer eu faço docker compose logs e aí passo o nome do serviço que eu quero observar no caso aqui eu quero observar o meu angler hello world backend né angler hello world backend um Como é que é o nome certinho angler hello world back um escrever errado docker compose logs no service Não é esse nome que a gente deu deixa dá um docker compose Down e docker compose up de novo para pegar o nome
direto ali do angler hello world backend um beleza docker compose up angler hello world backend um pelo menor de Deus não tô louca e aí um docker compose logs e o nome serviço certo tô louca deixa eu ver se pro front funciona ah é a ID do container não dá para acessar pelo pelo nome do Service também nós estamos usando docker compose aqui não o docker normal Teoricamente daria pelo nome do Service alguma coisa eu tô esquecendo Deixa eu fazer um docker logs aqui PR ver todos os logs Ah é só backend um Se pá
é só backend um aqui ó ah se imag nada deixa eu tentar com o ID que nem a galera falou se funcionar com ID pode pode me internar porque eu jurava que eu já tinha usado o nome do Service não enfim alguma coisinha que eu tô esquecendo mas agora a gente tem que saber o que é né não vou conseguir dormir sem ISO por que que eu fui inventar né esse isso é aquela famosa reunião de de 5 minutos que que o bombou o o RS desses tempos muito massa o RS inclusive é que tipo
ah reunião de 5 minutos que vira uma hora que vira teses novas para Sprint que vira um refinamento uma PL e tal mesma coisa o o ah deixa eu ver aqui vou tentar resolver rapidinho nunca é rapidinho a sem passa um tempão aqui no na documentação tá dizendo para não usar wifin então só docker comp logs E aí o nome do Service Então vamos tentar assim primeiro com backend um para ver agora com angler angler hello world backend um ah desisto não não desisto nada eu quero ver ah deixa eu ver no chat né sim
eu tenho o back e o front mas o nome que ele subiu foi como o back Ah tá já sei que eu me confundi vamos ver boa eh me confundi Total boa Galera vocês salvaram seguinte eu tava tentando acessar com backend um mas não é backend um backend um aqui o nome que o docker compos deu é só para diferenciar caso eu subisse mais de um service com o mesmo nome backend aí ele subiria com backend 1 backend 2 backend 3 back entendeu é uma nomenclatura do do docker só que quando eu vou usar o
comando Locker compos logs eu tenho que passar o nome do Service até botei aqui ó nome do serviço Qual o nome do serviço o nome do serviço é só backend né como a galera falou no chat Então eu tenho o serviço front end e o serviço backend se eu quiser ver o log deles é usando o nome direto do serviço e não o nome da tag do serviço certo então é isso boa Valeu galera É isso aí eu tava me confundindo Porque como antes quando eu tentei quando a gente acessou diretamente o best do contêiner
eu tive que especificar daí diretamente né qual que era o contêiner que eu queria entrar aí eu tive que passar aqui certinho certo para pegar o específico caso eu tivesse mais de um serviço desse rodando local no caso aqui E esse comando do docker É só passar o nome do serviço é sintaxe do comando é assim então passa diretamente o nome que tá aqui essa é a diferença só mas boa é isso agora finalizamos não vou inventar mais coisa que senão eu vou dar mais trabalho para nós mas é isso galerinha ficamos por aqui espero
que vocês tenham curtido a Live de hoje vai ficar aberta certo pra comunidade para quem não conseguiu assistir desde o começo para quem quiser reassistir para quem tiver algum amigo também que precise aprender docker e enviar para ele assistir depois enfim só queria pedir para vocês deixarem o like aqui né na Live se vocês gostaram se esse conteúdo ajudou vocês de alguma forma se inscreve aqui no canal também para quem não é inscrito isso ajuda demais e considere virar um membro aqui do canal porque além de ter acesso a conteúdos exclusivos a gente tem mais
de 60 horas de conteúdos aqui pros membros conteúdos práticos que nem dessa Live Aqui tem uma playlist aqui vocês podem entrar no meu perfil tem uma playlist de vídeos que vocês vão ver ali dos conteúdos exclusivos que são tudo conteúdos que estão disponíveis pros membros Mas além disso dos conteúdos exclusivos e dos benefícios né de de de ser membro aqui do canal de acesso antecipado alguns vídeos a gente tem ozinho dos membros pros membros sors né e vários benefícios aí isso ajuda demais aqui o canal também porque cara construir construir falar sobre conteúdo técnico é
sempre mais compado né a gente sabe que o que bomba mais é é coisa de lazer é meme etc não tô reclamando eu também assisto isso eu entro às vezes eu entro no YouTube eu só quero me divertir um pouco mas enfim isso ajuda demais eu conseguir continuar produzindo esses conteúdos né conteúdos técnicos de forma gratuita para ajudar aqui a nossa comunidade né e e democratizar o conhecimento que é uma tecla que eu bato bastante aqui no canal então considere virar um membro aqui do canal é por menos de de valor de um caixo de
banana né o valor ali da sinatura de membros é R 4,99 só que isso ajuda demais galera ajuda mesmo então todo mundo que é membro Valeu sempre tem vários membros aqui do canal assistindo a Live né os membros são muito especiais aqui no canal eles sabem disso e para quem quiser se tornar um membro fica aí o convite certo muito obrigada valeu de novo bom descanso para vocês eu vou dormir que eu já tô Tod to caduca já tô falando as palavr tudo errado já tô me errando toda mas é isso galera Valeu demais e
só respondendo a dúvida do Vini ele perguntou Fê quanto tempo em média você estudou para tirar a certificação da WS eu estudei uns seis meses mais ou menos eu já usava a WS no trabalho mas eu não conhecia os conceitos teóricos por trás não conhecia bem a fundo uns serviços então eu tirei ali uns seis meses para estudar a fundo mesmo aí foi mais ou menos isso mas eu estudava Tipo toda semana assim fazer simulado tem que fazer muito simulado porque tem bastante pegadinha nas provas da WS Mas é isso Valeu galera tamo junto ã
essa semana vai ter Live de novo Eh do Bora tomar um café né que é a nossa Live mais descontraída aqui do canal falando de Notícias fica aí o convite para vocês às 8:27 galera 8:27 Provavelmente na quinta-feira ou na sexta-feira 8:27 galera quem assistiu a Live sexta sabe por dessa dessa é isso boa Falou galera tchau não vou aprender mais vocês aqui boa noite