salve des beleza Luiz Carlos na área a full cycle é uma das empresas que incentiva muito o uso de docker para desenvolvimento não só para produção cada dia mais As empresas necessitam que os seus ambientes trabalhem com contêiners porque isso vai ter uma série de benefícios e você desenvolvedor é muito importante que você saiba os fundamentos básicos de docker porque cada dia mais as empresas pedem docker como requisito básico de vagas e também se você não souber docker você não vai aproveitar o melhor dos mundos de trabalhar com contêiners quando a gente desenvolve com contêiners
nós vamos desacoplar o ambiente de Dev da máquina parar com aquela aquele velho mantra de na minha máquina funciona você vai unificar o seu ambiente com seus colegas de trabalho com outros devis outras pessoas não vão ter dificuldades para poder rodar a sua aplicação Porque todo o ambiente já está com condensado com o docker fora que você consegue criar um ambiente mais personalizado para cada projeto também inclusive o benefício de desenvolver até remotamente a gente fala bastante aí do Dev container tem outras opções como o codac Code spaces etc etc nesse vídeo eu vou mostrar
para vocês alguns Truques de Mestre alguns truques que a gente ministra há anos nos nossos cursos sobre como otimizar o início dos contêiners E também como manipulá-los para que você seja eficiente a trabalhar com eles e extraia o melhor para ter aí o seu ambiente muito bem configurado eficiente para você poder trabalhar no seu dia a dia e não esquece de já deixar o seu like porque a gente precisa demais disso pro Canal crescer a gente continuar levando conteúdo gratuito aí para vocês considere se inscrever também ativando o Sininho das notificações que isso ajuda o
canal fulls bombar e cada vez mais conteúdo de qualidade vai vir aqui durante a semana tá e eu quero lembrar vocês que nós temos o curso full cycle que é um dos cursos que mais bem mostra doc na verdade e a gente não tem somente docker lá docker é apenas um dos assuntos mas tudo que a gente vai falar durante o curso é docker então se tem um lugar que você vai aprender docker que você vai de fato ficar bom sabendo os fundamentos é o curso full cych dê uma olhadinha aí no link da descrição
para você poder saber mais e também já deixo como referência o nosso próprio canal Porque nós já temos aqui lives e vários vídeos maratone só aqui você já vai ter uma noção aí de como trabalhar com esses contêiners como agregá-los pra sua vida tanto de desenvolvimento quanto de produção então roda a vinheta [Música] pessoal [Música] eu peguei aqui como referência inclusive uma aplicação que a gente desenvolve dentro do curso full cycle que é um microsserviço a gente tem lá uma área de projeto prático é esse projeto aqui é um projeto node construído com nestjs que
é um Framework node aí não importa aqui pro vídeo Mas a questão é que essa aplicação é um microsserviço em que ela vai ter várias necessidades e inclusive é uma API rest Então vou precisar subir um servidor preparar banco de dados então a gente acaba tendo aqui um docker file para desenvolvimento um docker file PR produção e pelo menos um docker compos mas tem mais de mais de um aqui porque nós temos várias necessidades Mas enfim a ideia é que a gente tem aqui Um docker configurado que a gente faça um docker Run ou um
docker compose up e todo o ambiente já esteja preparado a gente tá falando aqui de ento então sobe esse ambiente e aí permite que o desenvolvedor Rode testes desenvolva aplicação teste Ela ali para desenvolvimento faça o que ele quiser a questão é que esse ambiente ele tem que estar totalmente pronto A ideia é que toda vez que você suba não tenha que fazer mais nada então ele já instale e bibliotecas outras ferramentas configure variáveis de ambiente Enfim tudo que for necessário n Mas a questão é que muitas vezes essas configurações todas que a gente precisa
as necessidades da aplicação elas não são lineares e o grande ponto é justamente você entender como que o docker funciona para poder atender as necessidades da aplicação e também à necessidades de desenvolvimento mas aí que entra um problema porque quando a gente não sabe os fundamentos básicos do docker a gente acaba fazendo uma configuração de docker mais uma configuração mal feita que acaba atravancando o nosso ambiente de desenvolvimento tornando mais difícil isso acaba incentivando inclusive Que várias pessoas não queiram usar o docker para desenvolvimento eu quero mostrar para você um problema clássico que a gente
tem em montagens de ambiente com docker para desenvolvimento que é instalação em bibliotecas isso aí tira o sono de muita gente porque você coloca ali dentro da Imagem e aí fica dentro do contêiner mas não fica na sua máquina a ideia não consegue ench aí não tem aut compete não adianta também enfim aí você acaba se estressando abandonando docker docker não serve para desenvolvimento docker é só para produção eu tenho aqui a aplicação node mas não interessa necessariamente ser o node isso não acontece somente com node acontece também com outras linguagens de programação daqui a
pouco eu vou falar onde isso acontece também fora o node Mas se a gente tem que ter algum tipo de aplicação aqui mas eu não quero que você foque no node né o node é apenas apenas uma possibilidade que esse problema acontece mas então vamos pensar que eu tenho uma aplicação em para poder desenvolver vou baixara pra minha máquina ou ela está na minha máquina toda vez que eu levanto o meu contêiner para poder ser executado uma necessidade crucial é que se instal bibliotecas a gente já tem que deixar isso pronto pode ser que às
vezes tem algum projeto muito singular que você fica fazendo as coisas manuais Mas não é isso que a gente quer a questão justamente é deixar o ambiente redondo para que você só e Execute ali o que for necessário Rode seus testes levant seu servidor web tá então essa aplicação node aqui aplicação muito simples não interessa Qual é o tipo também de projeto usa aqui um Express JS para poder levantar um servidor na porta 3.000 e mostrar um Hello Word tá para que a gente configure essa aplicação com o docker nós temos que ter um do
file para poder organizar ali a imagem então tô usando uma imagem do node 18 182 aqui tanto faz também a versão usando apenas uma versão aí que é relativamente mais nova a gente tá inclusive na versão 2021 Mas é uma imagem Debi bem pequenininha legal para desenvolvimento determinando um usuário que não é o Rot né Isso aqui é uma dica muito importante também evite usar usuários Roots tanto em produção quanto principalmente em produção mas desenvolvimento também que aí você torna a sua imagem mais segura aí vou delimitar ali um diretório de trabalho como eu já
tenho usuário node eu vou ter o bar home bar node Estou criando a pasta app para jogar todo o projeto para lá então a gente vai trabalhar nesse lugar e aí qual que é o primeiro pensamento que eu tenho então para poder instalar as bibliotecas Ah vou copiar Então o meu package Jon e o lock que são as duas dois arquivos que delimitam as dependências para dentro aqui desse diretório por isso que tá ponto barra depois faço um install Então vai gerar lá aquela node modos com um monte de arquivos e aqui eu seguro o
contêiner não quero executar nada o desenvolvedor decide a todo momento o que que ele vai rodar então contêiner fica rodando você entra lá e roda o que você quiser Beleza então a minha imagem está configurado normalmente a gente tende utilizar ali um docker comst para poder levantar várias cois ao mesmo tempo a gente teria aí banco de dados e outras coisas também aqui não importa pro nosso exemplo Então vamos lá vou fazer um docker compose up para ele subir aqui o nosso projeto e ele deu um errinho na hora de copiar vamos fazer aqui com
x porque ele tá copiando aqui mas ele não tá copiando pertencendo ao usuário node a gente coloca essa instrução aqui para que a a propriedad dos dois arquivos pertence o usuário node ele tem a permissão de execução Então faz aqui um docker compose up Beleza então o meu contêiner vai ficar aqui preso né porque o t é um comando que L arquivos agora eu posso abrir outro terminal fazendo doc compose eec app Bash entrei na verdade eu estou na pasta errada Então estou dentro do contêiner se eu faço um Ls ponto então eu tenho no
momento package Lock o package Jon e a node mods mas isso aqui não vai ser suficiente pra gente poder rodar o nosso projeto sempre a gente vai fazendo tudo dentro do contêiner Então vou precisar copiar esse index GS também precisaria copiar ali todo o meu projeto para dentro do contêiner mas eu não posso ficar fazendo isso dentro da imagem porque a imagem é imutável então se eu chegar aqui mudar alguma coisa e programando gerando novos arquivos ele não vai copiar então tenho que ter esse sincronismo então a gente usa volumes então aqui no docker compose
a gente vai criar aqui um volume que eu quero pegar todo que eu tiver coloco assim ponto tudo que eu tiver vou mandar para bar home bar node bar que é o nosso diretório de trabalho que é onde a gente tá aqui ó Beleza então ao fazer isso aqui a gente vai parar container eu vou fazer o docker compose Up novamente beleza é muito rápido porque ele já tinha criado ali a imagem então a gente roda novamente aqui o Bash vou fazer um LS show de bola agora então eu tenho até coisas necessárias aqui não
preciso dockerfile docker compos dentro do contêiner eu tenho o index JS os meus dois arquivos porque ele acaba copiando e mods sumiu né isso aqui é um problema clássico porque se eu tentar aqui fazer um um node index JS ele vai acabar falando ali que o Express não existe porque não tem node mod o que que aconteceu no final das contas é porque essa node mods ela já existe dentro da imagem já foi provado no alguns segundos atrás quando a gente trabalhou ali mas quando tem o volume o contêiner é baseado na imagem então inicialmente
o contêiner fica com todos os arquivos ele tem a node mods mas o volume faz com que o Dock sincronize tudo que eu tenho aqui nessa pastinha para dentro do contêiner ele vai sobrescrever tudo que eu tenho lá então ele vai acabar matando a minha node modes ele pega tudo aqui e sobrescreve eu perdi E aí o problema né Ai o que que eu vou acabar fazendo aqui então npm instal posso fazendo P install aqui e aí eu faço node index JS tá aqui funcionando na porta 3000 né eu consigo até fazer aqui um Simple
browser só para demonstrar que isso aqui tá funcionando na porta 3000 ó tá aqui o Hello Word né mas não é isso aqui que a gente quer porque quanto mais decisões você deixa pro desenvolvedor executar para que esse ambiente esteja preparado acaba causando uma série de ruídos e a aí a gente acaba indo para aquele lugar do na minha máquina Funciona porque muitas vezes também não é só o npm install que tem que ser executado às vezes algumas coisas T que ser executadas antes aí o desenvolvedor chega aqui faz um npm instal Mas ele vai
ter que executar algumas coisas antes e ele vai ter que comunicar com alguém e isso vai desanimando vai causando stress para que a gente tenha esse bom ambiente Então esse aqui é um problema né como que a gente lida com essa imagem com o contêiner fazendo com que eu inicie a minha aplicação com essas libs disponíveis né e aqui eu vou falar aonde que isso normalmente acontece que não é somente no node Sempre quando você tem ali uma linguagem de programação que ela acaba gerando uma pasta das bibliotecas no próprio projeto você vai acabar tendo
essa situação Então a gente tem aí o próprio PHP Python né aqui no PHP lá a gente acaba lidando com o composer e a pastinha vendor aqui no Python a gente acaba criando aí um virtual env ou algo do tipo lá acaba criando aí um VV da vida enfim o Call Pilot até tá sugerindo aqui rub né mas a gente tem Enfim uma série de linguagens que as libs vão ficar dentro aqui do projeto e é necessário para que a ide veja né tanto aí que a questão ela tem que tanto estar na nossa máquina
quanto no contêiner tem que estar sincronizada para tudo est certinho pra ideia ver e te dar o aut complete necessário e lá dentro do coner que é onde a gente vai executar para que a aplicação Execute corretamente em linguagens como Java golang a gente tende a não ter essas libs dentro do próprio projeto então não teria esse problema poderia ter esse instal aqui mas aí geraria outro é aquela coisa descobre o pé e cobre o peito descobre o peito cobre o pé se as suas libes estão em outras pastas lá dentro do contêiner e a
ideia no momento ela acessa somente o diretório de arquivos ela só tem acesso à sua máquina então ela não conseguiria ver essas libs não conseguiria te dar aut complete outra outras coisas nem as extensões conseguir que precisam de acessar ali o Java e o golang do container não conseguiriam aí entro o Dev container Vou deixar um card sobre isso nós temos vários vídeos inclusive aqui no canal isso vai fazer com que no caso vs code consiga se plugar no ambiente do contêiner então aqui para essa situação quee não tem as libs ali ele conseguiria ver
a linguagem de programação as libs as extensões conseguiriam ver né E se você não tá utilizando o vs code sempre a sua ideia que vai ter suporte acker você ter que plugar lá IDR no ambiente do contêiner porque a sua ideia precisa conhecer a linguagem de programação e as Lips Mas essa não é a questão mas é só um ponto importante que eu vou deixar aqui no vídeo porque eu sei que vai gerar dúvidas vamos agora paraas soluções eu vou começar com uma fake solução porque é uma solução que você vai encontrar em muitos tutoriais
vai em fórums github etc ah usa o tal do volume anônimo e volume anônimo a até resolve em parte mas ele vai ter uma consequência pra sua ide Então vou usar essa aplicação aqui como exemplo do problema e vamos colocar aqui um Solution fake esse código fica disponível já tá disponível para vocês no link da descrição Então a gente vai ter aqui a solução com o Install e o volume anônimo deixar volume anônimo para ficar bem fácil dessa forma aqui tá então eu tenho esse mesmo projeto a gente vai iniciar do zero vou fazer instalação
ali na minha imagem imagem condensa tudo vai ficar tudo dentro dela e aqui nós vamos adicionar uma linha que vai ser o Barra home bar node bar app barn mods Beleza então vamos fazer o seguinte aqui ó eu vou parar esse contêiner que eu estava rodando posso dar um kill nele aqui facilmente então vamos aqui pra nossa fake Solution docker compose up beleza ó node mod está aqui coisa que não aconteceu antes né mas quando eu abro não tem nada o que que tá acontecendo vamos dar uma olhadinha dentro do não tem né docker compos
appb na verdade não nessa pasta tem que ser dentro dessa aqui vou entrar lá no coner se eu fizer um LS tá lá minha node mods se eu fizer um LS na node mods eu tenho os meus arquivos lá inclusive consigo fazer o início aqui do meu Express então ele executou lá o código JavaScript e deu certo então isso aqui funcionou dá pra gente poder rodar a aplicação mas não dá para poder desenvolver porque Justamente a ide precisa das libs disponíveis aqui na minha máquina né e o volume anônimo ele vai acabar fazendo esse comportamento
que ele vai aqui em cima eu tenho um volume que sincroniza host que é a minha máquina com o contêiner no volume anônimo porque ele não tem nenhum nome ele não tem nenhum compromisso em sincronizar também bem com a máquina eu estou falando pro docker que quando levantar esse contêiner a essa pasta aqui ela vai ficar congelada e como ela já existe lá na imagem quando o contêiner é criado a partir dessa imagem esta pasta vai permanecer e não vai ter nenhuma modificação mas nesse caso como eu estou gerando uma pasta lá dentro do meu
contêiner e é um volume ele acaba criando como se fosse aqui um link uma referência tá que eu não posso nem excluir isso aqui senão a gente vai ter problemas então isso aqui resolveria se eu não precis se a min ide não precisasse acessar as minhas libs né aquela situação a gente tá falando de situações que você tem as libs dentro do seu próprio projeto aqui se eu utilizasse eh até mesmo se eu utilizasse todo mundo da minha equipe utilizasse Dev container que é uma ótima solução daria para poder trabalhar porque você conecta lá dentro
do contêiner aí você veria essa node mods que tá aqui porque ele tá acessando os arquivos lá de dentro né porque a princípio eu não precisa o que eu quero é desenvolver a minha aplicação e tanto faz se as libs estão aqui ou não a gente consegue gerar a qualquer momento né então Eh o volume anônimo ele é uma fake Solution porque ele pode te ajudar em várias situações aí mas ele não de fato garante que você tem aqui é s node mods e se você não tiver Dev container também não adianta nada às vezes
tá usando vest code no modo normal tá usando uma outra ideia qualquer a gente tem que ter uma solução melhor mas fica aqui esse ponto também que é Um fundamento importante aí do docker agora nós vamos ver as duas soluções que eu utilizo na minha máquina que eu recomendo que vocês utilizem que já é um estudo de anos para criar uma maneira para eu já testei várias formas de como que a gente otimiza essa questão ali de instalação das bibliotecas que fique bom o nosso ambiente também então nós vamos utilizar o Framework nest para poder
fazer esse teste vão ser duas soluções que eu vou apresentar vai ser essa e mais outra e nós vamos comparar o tempo de início do contêiner entre um e outro porque isso é importante também não adianta nada a gente ter uma configuração de ambiente com doc que toda vez que eu rodo ali um Dock compose up Ele pode demorar minutos e isso pode acontecer o nest é um Framework que a gente fala muito aqui no canal tem muito conteúdo aí inclusive vai ser um bom caso porque o package json dele é muito grande então ele
vai ter ali uma série de libs A node mods é monstruosa Então vai ser um bom bmk para que a gente possa fazer a comparação Então essa primeira solução nós vamos instalar as libs no contêiner e não na imagem então aqui no dockerfile Veja ele é muito m mais simples ele não vai ter npm instal aqui essa linha aqui de cima é justamente para poder instalar esse BC porque nós vamos fazer ali uma pegar data hora que tá iniciando a npm install depois o fim e fazer ali uma diminuição e mostrar em segundos quanto que
gastou né então só para poder ficar bem claro Então veja que eu só tenho aqui o am work dear o usuário node E aí tem o Shell script isso aqui é muito comum em ambiente de desenvolvimento independente da maneira que você esteja organizando porque você vai ter uma alguns comandos que você vai executar aí quando o contêiner iniciar vai que você tá rodando comandos de migração Monte tem um monte de necessidades Então você coloca nesse Shell script então eu tô copiando ele inicialmente ali pra imagem pra gente poder executar ele e já ficar tudo preparado
tem o docker compose que ele tá até mais simples que das Outras aplicações eu não vou rodar nenhum servidor nem nada eu só quero garantir que ao iniciar a pasta nest que é onde tá o Framework que eu já baixei ele vá lá pra minha pasta convencional de trabalho então quando eu coloco esse Command aqui isso aqui vai ser executado no start do container Então dentro desse start vai ter lá o npm inst o Legacy pdps é porque o para você poder desenvolver em cima do Framework né não é gerando uma aplicação nest se você
quer contribuir com Framework gerando novas features corrigindo bugs você tem que fazer um install dessa forma aqui mas a o ponto que nós vamos pegar a data Antes de iniciar e a data depois que terminou e fazer ali o runtime mostrando em segundos is aqui é apenas uma lógica aí com X script e depois ele mostra ali só uma mensagem pra gente poder saber que terminou e o container já está disponível para eu poder fazer o que eu quiser né então isso aqui vai gerar a node Mods em tempo de execução ali no início do
contêiner vamos executar essa solução eu vou parar aqui esse volume anônimo que tava antes então vamos para a primeira solução que vai ser com o npm install no contêiner então agora n ou melhor npm install não docker compose up e vamos aguardar um pouquinho posso tentar fazer aqui um refresh porque ele não vai mostrar nada a princípio poderia até colocar que ele iniciou ali a instalação mas ele não mostra nada tem como fazer outras configurações aí para el poder mostrar alguns lzin aí do npm mas aqui a princípio ele até mostra depois que ele tem
alguns War ou algumas coisas mais mas ele tá gerando a node mods ó a node mods acabou de ser criado aqui ó mas o ponto é que vai chegar o momento que ele vai mostrar ali o número de segundos que ele gastou para poder fazer essa execução mostrando aqui alguns warns que são normais Eu acredito que ele não vai demorar aqui também depende da internet de outras coisas correlacionadas disco também acho que ele vai demorar um pouquinho vou esperar ele terminar no final nós temos 81 segundos né 1 minuto e 21 segundos no total que
ele gastou para poder gerar o ambiente dessa aplicação do zero né tô imagina que eu tô fazendo o clone dela pela primeira vez ok Vamos pelo menos entrar lá no contêiner vou fazer aqui um CD E eec então vou ter lá minha pasta com tudo do nest né tá a gente tá na verdade a sincronização aqui do docker compose vai pra pasta nest só né então que está aqui dentro docker file docker compose e o stat S não está presente isso aqui já estaria ótimo Ok então essa aqui é uma solução porque a gente consegue
gerar sempre a node mods no contêiner E como vai ter o volume sincronizando pra nossa máquina ele vai gerando lá dentro do contêiner e vai sincronizando pra máquina né mas nós vamos ter o outro cenário ainda com esse com essa situação aqui que é uma vez que a node modus já existe você executa novamente o docker compose Up ó agora ele demorou 3 segundos então ele vai sempre executar o start sh sempre né nesse ponto aqui ele demorou 3 segundos Então essa solução aqui é muito bacana porque é uma solução simples a gente joga a
responsabilidade pro contêiner e tá resolvido mas eu quero deixar bem claro aqui as desvantagens porque é necessariamente eh importante que você conheça os fundamentos essa solução aqui ela pode não caber se você às vezes tem uma máquina com hardware mais limitado ou até mesmo Rode um docker num Mac que tem um hardware mais limitado também na verdade isso aqui é é algo que acontecia muito diminuiu bastante que eu vou explicar o que que tá aconte o que que vai acontecer pro primeiro cenário quando você tá executando o npm install que não tem a node mods
aqui a imagem é criada o contêiner é criado a partir da imagem e aí começa o npm install então ele vai criando lá as pastinhas vai criando um monte de coisa é um monte de pasta é se eu colocar aqui um um comando ou qualquer coisa a gente vai ver que são milhares de arquivos perigoso ter uns 100.000 arquivos ou mais aqui e aí o seu computador vai ficar louco com escrita e leitura em disco nesse momento então se você tem e eu tô falando justamente do em alguns Mac porque Mac na verdade o docker
ele não roda nativo ele tem uma camada de virtualização Então essa camada de virtualização acaba tendo um impacto Então esse início ali que fica escrevendo no disco faz com que fique muito lento a você acha que é o npm instal que é lento na verdade é o a conjuntura toda da coisa então muitas vezes dependendo das pessoas que estão envolvidas essa solução aqui ela pode demorar bastante para poder iniciar a primeira vez a partir da segunda a tendência é que isso não demore mas às vezes se você tiver uma máquina também muito limitada Pode ser
que se inicie com com mais lentidão por isso que é importante você avaliar Qual que é a situação ali do seu projeto para poder entender qual solução vai caber nesse caso mas essa aqui é a solução que eu uso pra maioria dos projetos aí quando você verificar que essa solução de fazer o lpam instal diretamente no contêiner a primeira vez tá demorando muito que não cabe você entendeu que isso não tá legal e nas sucessivas vezes que a sua pasta ali das libes já existe e tá demorando um pouquinho não tá legal aí você pode
usar essa outra solução aqui que vai ser o npm Install e utilizando o comando rsnc que é comum aí de ambiente Linux vamos dar uma olhada aqui que agora a imagem tem algumas coisas a mais Então vamos falar assim que essa solução ela vai ser meio um misto de você fazer um instal dentro da imagem e fazer uma sincronização quando o contêiner tá iniciando Então ela acaba sendo o melhor dos mundos mas também ela vai ter desvantagens Inicialmente nós vamos ter aqui a imagem node com aquele BC mas a ferramenta rsn que vai ser usada
lá quando o contêiner iniciar Mas a questão dessa solução aqui vai ser a gente ter uma pasta de cche dessas bibliotecas então tô criando aqui uma outra pasta que é o bar home bar node bar cche inicialmente Esse vai ser o diretório de trabalho só para poder brincar mas o diretório mesmo que a gente vai desenvolver é o app aí nós vamos aqui com essas duas linhas copiar o package Jon para dentro dessa pasta para fazer fazer o npm Install e tem que ser o npm install nesse caso com Legacy PS Beleza então isso aqui
vai fazer com que eu tenha a npm node mods aqui ela tá fora do meu diretório de trabalho habitual aí eu delimitei o meu diretório de trabalho feliz da vida e fiz o start sh e lá paraa minha pasta app e ele vai ser iniciado quando o container for iniciado também então na hora que o meu contêiner iniciar nós vamos executar essa linha aqui do rsync o rsn é um comando para que eu possa copiar arquivos mas ele é muito mais poderoso que um copy porque quando copy você coloca um copy de um lugar pro
outro Ele simplesmente vai copiar todos os arquivos da origem para o destino mas o R5 não o R5 é capaz de verificar no destino arquivos que já são iguais então ele deixa de fazer essa cópia como que ele consegue ele pega ali as propriedades do arquivo da pasta ele consegue saber se há alguma modificação a gente consegue criar um algoritmo para poder ver se houve modificação ou não então nós vamos pegar tudo da node mods que tá no cach e copiar paraa Nossa mod mods fazendo com que ela fique disponível aqui na nossa máquina porque
ela tem que ficar né Inclusive eu já tenho até ela aqui eu vou matar acho que é bom eu matar ela com o RM menos RF porque senão vai demorar aqui se eu colocar no vest code né ver se ela morreu morreu pronto porque senão vai desvirtuar o nosso teste Então vou voltar aqui paraa minha pasta tá vamos executar isso aqui que eu volto para poder explicar mais detalhadamente a gente vai fazer a comparação né inclusive aqui como eu já tinha no mods provavelmente eu rodei eu vou fazer um docker compose up menos menos Build
para poder forçar que ele faça todo o processo novamente Então vamos lá que que eu tô aqui no outro terminal outro terminal serve pra gente poder fazer o eec aqui ele está dentro da imagem Então veja que esse tempo também tem que ser considerado né Nós vamos ter um tempo de instalação dessas libs a ele vai mostrar os mesmos logs de antes eu vou aguardar um pouquinho que ele vai demorar mais ou menos o mesmo tanto pronto terminamos aqui o tempo dentro somente do start pon sh foi de 4 Segundos apenas mas a gente tem
que considerar aquele tempo da instalação eu acredito que o meu terminal aqui ele não vai conseguir mostrar tudo mas eu gravei aqui o tempo que foi 102 segundos ele gastou 102 segundos exatamente nessa linha aqui e aí claro que esse npm install ele Depende muito da internet né Isso aqui vai ser muito variável de acordo com a máquina de cada um então se eu somar 102 + 4 vou ter 106 e é maior que os 81 segundos mas a gente tem que considerar exatamente uma coisa tá que esse tempo de 81 aqui ele poderia ser
o 102 também que seria o tempo aí da internet tá mas eu tenho que considerar Principalmente uma coisa que se eu chegar aqui n minha pasta matar tudo aqui se eu chegar na minha pasta e eu rodar o docker compose Up como eu rodaria no exemplo anterior ele gastou um segundo por quê ele não teve que fazer nenhuma instalação nova que ele já pegou a node modus que estava na imagem a imagem tá armazenada na sua máquina então tem essa principal diferença porque aqui na outra solução Toda vez que você perdesse a sua node mods
precisou apagá-la você roda um docker compose up ele vai fazer a instalação e vai demorar aqui eu posso apagar 500 vezes o único ponto é se eu acabar perdendo a minha imagem o que você vai acabar mantendo ela ao longo do tempo também e aí você vai tendo o benefício desse rs porque vamos supor que um colega seu fez uma nova feature corrigiu um bug na aplicação e adicionou uma nova Lib aqui pegou adicionou uma nova Lib Independence ou Dev dependence E aí quando você vai fazer a sua execução se você fizer com docker compose
up ele não vai executar novamente isso aqui aí por isso que eu coloquei que essa instrução do npm LS com um grap no air então eu vou pegar aqui todas a esse npm LS ele vai acabar mostrando todas as libs instaladas E se ele achar alguma Lib que tá no docker compose mas não tá na node mods ele vai mostrar um monte de air então tô pegando esses para poder mostrar na tela e o desenvolvedor vai saber ali Ah pera aí tem alguma Lib então vou ter que fazer um npm install ou um docker compose
menos menos build né e aqui eu fiz a acabei destruindo meu docker compose e o que acontece se tem uma nova Lib aqui instalada Olha que essa estratégia é muito legal eu tenho uma nova Lib instalada Então esse copy ele vai copiar de novo o package Jon Lock ele vai fazer o npm instal mas ele já tá com Cash disso ele já tá com Cash de todas as minhas libs então ele vai só adicionar ali o que é necessário que isso vai ser bem rápido então o tempo quando você tem uma nova Lib mais o
que você tem aqui do R5 vai ser questão ali de alguns segundinhos então isso aqui resolve os problemas da nossa solução anterior que é você sempre ficar fazendo o install dentro do contêiner né Mas qual seria a desvantagem disso a desvantagem é que você vai ter uma imagem um pouco maior mas isso nem necessariamente é uma desvantagem porque você sempre vai ter a sua pasta node mods na pasta cche e vai ter a node mods na sua máquina também então a gente acaba tendo essa duplicidade para poder ter esse ganho de performance então entende como
que saber os fundamentos e fazer as escolhas corretas é fundamental para que você tenha um bom ambiente Então essa segunda solução aqui ela pode resolver principalmente aí máquinas pessoas que TM hardwares muitos e hardwares muito distintos Tá show de bola pessoal então espero que vocês tenham gostado do vídeo o código fonte tá disponível aí para vocês espero que tenha sido produtivo que você implemente aí no seu ambiente de trabalho Lembrando que esses fundamentos e muito mais está lá no curso full cycle o link também tá na descrição né A gente trabalha com docker do começo
ao F se você gostou dessa aula você vai ficar especialista em docker ao entrar pro nosso curso deixe um like aí no vídeo e a gente se vê no próximo vídeo [Música] tchau Y