Olá pessoal Fábio Aqui tá o penúltimo vídeo sobre o setup do PC foi pesado em configuração Mas conseguiu chegar até o fim deve ter entendido um pouco mais sobre como virtualização funciona em particular usando o emulador que emo acelerado com kvm aquilo é virtualização criar uma máquina virtual que roda outro sistema operacional outra Kernel por cima olha de pagar a promessa que eu vim fazendo diversos vídeos finalmente falar um pouco mais sobre os tais containers que até hoje muita gente confunde com virtualização as duas coisas parece que é Rodar um programa dentro de uma máquina
virtual mas container são completamente diferentes de máquinas virtuais vamos lá se fosse fazer um tld-r uma única frase que resume a diferença é até simples uma máquina virtual roda um novo Kernel Possivelmente numa outra arquitetura como x86 em cima de arm e já Um container reaproveita o mesmo Kernel necessariamente na mesma arquitetura de hardware É essa a diferença agora vamos ver na prática eu vou começar falando só de containers de Linux BSD Windows tem infraestrutura diferente para containers Windows tem como rodar containers para rodar apps de Windows isso é leve mas quando o Windows ou
Mac wesp vocês vão rodar apps de Linux na prática o que acontece é que eles de fato sobre uma máquina virtual de Linux primeiro como o wsl que eu já fiz dois vídeos a respeito portanto é envolve sim virtualização e é dentro dessa máquina que é um docker né que top queria containers de Linux só em Linux nativo que contêiner são realmente leves em precisamos entender dois componentes fundamentais se grupos e nem me spaces Seguros eu já mencionei no episódio anterior do setup quando eu mostrei como isolar threads da CPU só para máquina virtual e
só para o rosto ser grupos ou control groups é o mecanismo da Kernel para agrupar processos e limitar recursos como CPU ou memória Existem várias formas de listar seguro precisa mais simples acho que é só dar ls/6 FS esse grupo lembra o script chamado suspende que eu fiz para limitar a laua disciplios para o host Eu usei o se estender para limitar esse parâmetro para ser grupos e desculpe se tem Slice e use Slice vejam na listagem que todos são diretórios se eles estão um deles vem vários arquivos como cpu.eight ou membro de ponto Pressure
é como você parametriza os recursos para esse ser grupos é tudo organizado como uma árvore para avaliar Olha só árvores de novo onde um segroup herda configurações de outros grupos honestamente eu não sei os detalhes de como é configurado cada um que já vem de cada distro e eu imagino que cada um configura essa árvore de formas um pouco diferentes essa listagem no meu manjaro no Ubuntu é semelhante tem a maioria dos mesmos slides se listarmos o que tens existem pontos Slice tem novos sub-diretórios um para cada demo que o System de inicia e também
ser grupos para cada um dos aplicativos instalados via Snap que eu vou falar um pouco mais para frente para enxergarmos isso melhor podemos rodar o comando System CTL status agora temos aí hierarquia toda de ser grupos como eu falei antes olha aqui o System pontos Slice e o subgrupos de cada demo e mais para baixo temos o user ponto Slice onde os programas que estamos rodando como navegador terminar e tudo mais ficam em seus próprios subgrupos também todos os processos rodando estão organizados em Seguros você nem sabia disso mas toda vez que executa um programa
ele vai estar atrelado pelo menos um segroup lembra que quando usamos comandos como PS ou programas como top eles pesquisam os metadados no sistema de arquivos virtual/proc por exemplo vamos pegar o pid no meu navegador Edge tem vários processos todo navegador separa cada aba num processo diferente para isolar ter mais segurança e se uma abacaxá não derrubar todas as outras juntos podemos fazer cat/proc/pi/grupe e aqui vemos em qual subgrupo de ser group Esse pro cestar no escopo do EDGE dentro de apps Life dentro e user service Existem várias formas de controlar ser grupos uma delas
é usando o sistema de arquivos virtual disponível no diretório bacias/fs/grupos isso é um ponto de montagem se fizemos malte grap segroup Olha como aparece que o tipo de sistema de arquivos dois é como se fosse um dispositivo virtual montado lembra que eu já expliquei nos Episódios de Linus como nos disléxico game tu e no que eu explico como funciona o boot que existem diversos pontos de montagem especiais com barra só que o Barra deve para mostrar na prática para que diabo essa serve deixa eu criar um script de idiota em Rubi podia ser empate podia
ser em diabo Faça o que quiser é só um Loop Infinito printando ponto para sempre vamos rodar em outro terminal eu abro o htop veja aqui no topo que meioscript está usando 100% de uma CPU se eu tivesse feito suportar múltiplas trads cada 100% seria uma CPU um programa que usa quatro trades inteiras e aparecer aqui como 400%. no topo do programa A Lista todas as trads independentes e veja que tem uma de 100% que é o meu script se esperar um pouquinho vai ver que ele muda de lugar um programa não fica sempre fixo
na mesma trade para isso serve o esquerdo ler da Kernel eu expliquei sobre o Episódio de concorrência paralelismo e a Razão de porque no episódio de setup eu tive o trabalho de mostrar como eu mandei a máquina virtual usar as estreias de 16 a 31 e eu limitei o roxo a usar só de 8 a 15 lembra desse script aqui usando se este e configurando parâmetro a lauai de CPU em todos os diretórios raízes dislikes control c para parar o loop infinito e agora podemos criar subdretórios e arquivos usando comandos normais como mkdir Eco ou
podemos continuar usando se estender para facilitar que é o que eu vou fazer agora eu vou criar um Slice para mim chamado a quinta ponto Slice em barra TC basta estender baqueta ponto Slice só abrir com qualquer editor de texto usando subo E no caso eu quero limitar o uso de CPU em só 30% para processos nesse grupo e para isso eu coloco esse conteúdo eu posso configurar outros limites como memória mas para esse exemplo só isso já funciona agora eu vou abrir um Shell dentro desse grupo com esse comando Se estende o Van Slice
igual aqui tá bom de Slice e o i de Goku então raios e Shell e nessa linha de comando que abriu eu vou repetir o mesmo comando uplup.r.b Olha o h top tá vendo aquilo topo da lista antes o script consumia 100% de uma trade Mas como agora reinicia a partir do meu novo desculpe que eu só permitiu usar 30% da CPU a carne obriga a usar no máximo 30% da CPU e com isso conseguimos controlar granuladamente o que cada processo no sistema pode ou não consumir E por que eu iria querer limitar um programa
forçado assim no líquido site do Arte Linux tem um exemplo no fim ele menciona o matlab que é um programa de cálculo numérico e dependendo da complexidade do cálculo pode consumir toda a rã e toda a CPU do sistema ser um programa usar todos os recursos vai faltar CPU e RAM até para Kernel e o sistema inteiro ou vai ficar muito lento ou crackear é um tipo de ataque de dus ou de nylon of service é um programa saturar todos os recursos da máquina até tudo parar de funcionar mas se colocar o metileb não ser
group onde eu limite a CPU e RAM para digamos deixar sobrar uns 10% a kérnia vai ter a possibilidade de tentar se corrigir depois leia mais sobre ser grupos no Rick Duarte Mas o importante foi para explicar que existe esse em todo Linux Moderno agora vou pular o segundo grande recurso para limitar o que processos podem fazer que se chama name spaces quando eu Listo que tem barra própria eu consegui enxergar todos os pids de todos os processos rodando no sistema se rodar o comando malte eu consigo ver todos os pontos de montagem ativos no
sistema e existem comandos ou locais onde eu posso ele está a estaque de rede e PC que é comunicação entre processos aí diz de usuários e grupos Mas é possível eu esconder todos esses detalhes de um processo para isso existe o comando Usher literalmente descompartilhar num terminal normal ser executamos o comando PSA o x Isso vai nos devolver uma lista com todos os processos ativos nesse momento e costuma ser uma lista grande num desktop normal Vamos abrir um novo Shell mas fazendo sudoecer forte barra bem barra besh parece nada demais né mas se executarmos PS
é o x olha só cadê todos os meus processos sumiu o best agora é isso que se chama name Space é um espaço separado de nomes no caso de pids se eu abrir outro terminal e executar PS a o x tá tudo aqui bonitinho e lá no final Olha o comando unchar e a Instância de Best rodando com pi de Alto A diferença é que o best que acabou de abrir não enxerga mais o mesmo barra proc Global ele tem um barra proc local só para ele isolado e separado que começa do um de novo
de dentro daquele best vamos listar o que tem barra própria só usou os dois pids que ele estou no outro terminal normal que tem todos os pids entenderam nem me Space faz o processo puxar informação de outro lugar estamos mentindo mas ele continua executando no mesmo sistema igual qualquer outro programa tanto que tem um PIB de verdade do lado de fora para quem é de Java script mas analogia é a diferença de que é uma variável quão antigo var para cair nesse corpo Global da função ou Salete e manter a variável no escopo local do
bloco manja não é exatamente a mesma coisa mas é similar com o recurso de name Space podemos mentir para os processos para não enxergarem mais o resto do sistema do lado de fora e assim limitar o que podem fazer por padrão todos os recursos do sistema operacional são globais todo o processo tem acesso a Praticamente tudo que o outro processo tem salvo permissões de leitura e execução por usuário que você tá mais acostumado a pensar tipo Rute tem acesso a tudo mas com ancher inclusive o Note que ele engana meu processo fazendo achar que ele
é Rute se executarmos o comando ID Olha eu sou usuário zero como executamos anchar Consul Du esse root tem o mesmo nível de privilégio do Rute de verdade aqui não é muito seguro Vamos mudar Exit e Executar a mesma linha de comando mais com a opção Y user e pronto se executarmos aí dia agora eu sou no baile literalmente um Zé ninguém mais útil vai ser rodar como Rute só que não tem do acesso ao sistema de arquivos todo vamos consertar isso se você assistiu meus episódios de Linux viu minha explicação sobre chroot um container
de verdade não usa chroot mas para demonstração dos conceitos vai servir teve um palestrante que Ela demonstrou isso anos atrás e deixou alguns arquivos que vão precisar eu vou deixar o link na descrição abaixo vamos baixar o tarball Root fs.tar.gz Pronto baixei lá no Barra tmp mesmo porque é só uma demonstração agora é só descomplicar x vfz esperar o segundo e tá lá se ele estarmos o que tem parece com a raiz do seu HD não é uma mini distribuição do que chamamos de userland se listar o Rute FS barra boot não tem a cano
nem a elite ranking deveria e o que fazemos com isso é como na instalação do Gueto fazendo barra besh ele vai fazer Change Rute mudar a raiz para esse diretório Rute FS e executar o best dentro do sub-diretório Rute FS barra bem e não meu de verdade do lado de fora LS dá pau agora isso porque esse gel não carregou o perfil nenhum então não tem nenhuma variável um ambiente configurado vamos exportar o pf de novo com EcoSport PF igual/s e agora sim temos acesso às ferramentas nesse diretório é assim que isso é destruindox faz
só que isso já vem configurado automático para você mas na mão é assim que fazemos essa variável provavelmente está no seu arquivo/tc/profy ou ponto brc ou ponto zsh RC da vida e executando ls/ parece que não aconteceu nada mas faz ls/boot viu vazio estamos dentro do diretório Rute FS que está sendo mascarado pra gente como se fosse a nova Raiz Esse Shell não tem mais acesso ao meu sistema de arquivos de verdade agora tentamos executar PS dá pau isso porque não existe nenhum Malte de diretórios especiais como barra clock que é onde comandos como PS
e pesquisa um processo veja o erro ele manda justamente da malte nisso mas agora é que vamos juntar Esse comando de cega Rute com um hamsérie então damos exeget e executamos o comando não podemos esquecer de exportar o pf de novo pronto se fizermos ls/boot tá vazio se fizemos ls/home tá vazio ou seja esse não é o meu sistema ele tá enxergando a raiz a partir do diretório/tp/hoot FS mas agora se rodar os PS é o x sucesso só enxergamos os processos dentro do novo na mspace não só escondemos os pilhas de todos sistema como
esconder no sistema de arquivos e você pensa que tá no sistema completamente diferente e esse é o ponto que confunde todo mundo o comportamento dentro desse Shell faz parecer que eu tô dentro de uma máquina virtual Mas isso não é uma máquina virtual não tem um hypervisor como kvm como emulador como que simulando uma máquina nova do aí fazendo boot de um novo Kernel por isso eu tô reforçando que o diretório falso/boot tá vazio não tem outra Kernel isso não é uma máquina virtual e se voltarmos para outro terminal executarmos PS é o x esse
best que abrimos dentro do cegarrot está aqui aparecendo normalmente como se fosse qualquer outro processo se não ficou Claro outtab para o Shell dentro do chroot executamos ls/sr/baby Vamos abrir um programa que tem aqui olha só veio um Python naquele tarball vamos executar Esse é o Apple de pytho que você já devem ter visto terminal normal PS ao x de novo Olha só aparecendo aqui Python se fosse uma máquina virtual teria o único processo por exemplo de quemo e só eu não estaria vendo os processos dentro da máquina virtual misturado com os do meu sistema
e isso porque esse processo estão rodando no meu sistema normalmente sem emulação sem nada disso é nativo se não fosse assim chamaríamos tudo de máquina virtual mas por isso inventamos esse termo novo chamado container justamente para ser distinto o processo está sendo só enganado achando que tá no outro sistema porque cortamos os olhos dele as mãos dele o nariz dele e só apontamos tudo para outros name spaces é isso que encher e cega Rute fizeram com o sheldo Dash isolar um jarro num container tudo que executa com ancher tá na Matrix nessa demonstração simples só
escondemos os pids o diretório/proca e o sistema de arquivos mas dá para mudar a rede Dá para mudar todos os outros maltos como barra deve roubar Assis dá para fazer ele enxergar outros ser grupos outro coloque no sistema outros usuários e grupos outro rosto ou seja o processo realmente vai achar que tá em outra máquina sem realmente estar ele para de ter acesso ao resto do sistema efetivamente roda isolado que é todo o objetivo nem me Space são super flexíveis por exemplo se isolar o container uma rede virtual é assim que o processo não container
consegue dar banho de digamos na porta 80 e o outro processo em outro container também consegue subir na mesma porta 80 cada um numa rede isolada que daí eu configuro para expor para fora como porta 4001 e outro com 4002 Mas também eu posso adicionar esses dois containers ambos no mesmo name Space de rede e assim o clima rede virtual só entre os dois tá caro para isso serve o comando NS enter que é literalmente entrar no Name Space depois Pesquise pesquisem no Google por containers prettle container do zero e vou esbarrar em artigos como
do site da Red Hatch diversos outros artigos explicando sobre ancher mas para hoje esses exemplos que eu dei já serve para continuar a explicação as coisas começam a ficar confusas porque existem várias ferramentas que funcionam em cima dessa infraestrutura de ser grupos e nem Space que eu expliquei no começo no mundo Linux surgiu lyrus containers ou lxc e depois do em 2015 a empresa do docker criou a Open container e NFC ou ou seai um grupo com várias outras empresas para padronizar e tornar mais potável todos os componentes que fazem containers funcionar em particular o
formato de imagens que é o formato ou se Image é o que você baixa do site docker.com os padrões estão todos na Open container.org no mundo Linux é implementação desse padrão é a tecnologia Run se vamos ver como funciona o Run se precisa de um arquivo config Jason que define as características do container e vamos aproveitar aquele diretório rústico FS ainda o próprio comando Run se gera esse arquivo executando não se espeque dentro do diretório Rute FS mesmo agora que vocês viram a demonstração com esse arquivo não deveria parece ser muito Alienígena inclusive foi por
isso que eu fiz vídeos explicando Linux antes porque precisa entender um sistema operacional para entender como container são configurados esse arquivo tivesse declarando a versão do padrão Ou seai daí Qual o processo vamos rodar que é o Dash e com qual usuário e grupo no caso zero quer dizer root Olha como já configurou o pf para mim cwd é crunchworking do reactory que é o diretório onde programa vai abrir capeletts pula que eu vou explicar Depois daí Rute quer dizer a raiz do sistema de arquivos que vai ser dentro daquele barra tmp barra root FS
onde fizemos cega root antes host name é o nome da máquina que é definido pelo TS assim o container pode ter um nome de máquina interna diferente do nome da máquina de verdade externa não atributo de malts aparece a mesma coisa que fizemos com a opção mal de traço pro que do comando unchar onde mandamos dá malte do sistema de arquivos especial de processos assim dentro do container não vai mais dar para enxergar os pids do lado de fora mas aqui tá mais completo porque vai dar malte para Barra dele para pseudo terminais em Barra
da Barra PTS para memória compartilhada que é barra deve Barra shm as filas de mensagem para comunicação interprossos em barraderm/m-kill o barracisk espelha funcionalidades informações da Kernel e finalmente o malte desse grupo que eu mostrei no começo do vídeo tudo isolado dos de verdade do lado de fora do contêiner estamos deixando esse jarro o mais realista possível para o processo rodando dentro e por fim quais names Faces eu vou isolar também que são os mesmos do Uncharted sabemos que esconde os processos mas temos Network para Red virtual e PC que é fila comunicação entre processo
o TS que permite mudar o rosto interno e malte que permite criar Montes diferentes do seu sistema com tudo configurado podemos Executar a partir de Rute FS estudou Run si start hello hello você pode substituir por um nome qualquer para esse container contanto que seja um nome único Daí podemos criar quantos containers quisermos como aconteceu antes quando rodamos Anger consegue a Rute caímos no best dentro do jarro com todos os seus sentidos sequestrados Run se tá mentindo para o Dash vamos ver se digitarmos ID estamos como root se executarmos ls/boot tá vazio estamos dentro do
diretório Ruth FS como nova raiz de arquivos melhor ainda se digitarmos malte temos só os pontos de montagem que definimos no config Jason Ele não enxerga nenhum dos pontos de montagem de verdade no meu sistema e se digitarmos PS é o x como antes só enxergamos o best que tá rodando é como se fosse uma máquina de verdade vazia estamos dentro da Matrix mais repetindo isso não é uma máquina virtual container na prática é outro nome dado a um processo em execução com menos acessos que um processo normal mas no fundo é só isso a
execução de um simples processo o que eu falei no começo do episódio vou repetir se fosse fazer uma tldr uma única frase que resume a diferença é até simples uma máquina virtual roda um novo querme em qualquer arquitetura o trailer reaproveita o mesmo Kernel na mesma arquitetura é essa a diferença mas agora vamos ver na prática eu tô repetindo o tempo todo que barra boot tá vazio não temos outra Kernel estamos compartilhando a mesma Kern compartilham hardware de verdade como CPU GPU dispositivos para máquinas virtuais que rodam qualquer outro sistema operacional qualquer nova Kern isolados
um dos outros eu posso rodar o Windows do lado de BSD mas um container Compartilha o mesmo Kernel que existe já carregado ele não pode rodar sistemas operacionais diferentes só outra distro Linux e vamos voltar pro que eu disse no começo Como que o Windows e Mac ou és fazem para ter container de docker de Linux ele sim precisam primeiro usar o Hyper vai as ordens o hyperve ou Hyper Vargem do ponto Framework para botar um Linux de verdade e em cima desse Linux rodar o Ram se para conseguir ter containers de Linux por isso
docker sempre mais pesado em cima de Windows do que direto no Linux numa distro Linux não tenha necessidade de rodar um hypervis Orante entender essa diferença é muito importante porque sua performance uso de recursos como Ram sempre vai ser pior no docker para Windows ou para Mac sempre não tem exceção mas eu falei docker e fiquei mostrando Run se Qual é porque depois que a ociai foi formada o docker pode uma coobernet todos que usam contêineres Provavelmente usam-se por baixo que é infraestrutura que usa ser grupos e outras coisas que vem em todo Linux mas
você tem então para que precisamos de docker a parte importante do docker não é mais a capacidade de executar containers hoje em dia isso vem nativo na queda do Linux através do Ryan si que eu já mostrei o grande lance de docker é uma coisa sistema de imagens do docker HUB Como é o tutorial de hello world de docker logo depois que instala docker Run hello world vamos executar no ele imprime esse texto e termina o que que aconteceu a ferramenta começa checando no Heads estilo local se tem uma imagem com o nome hello world
como não tinha deu pum como se fosse o comando Git Clone ou Mais especificamente de tipo eu já explico porque mas na prática baixou o binário do site hub.docker.com podemos ir no site deles e ver o registro dessa imagem lá estão vendo na dúvida ele baixa da tag latest é o equivalente a Branch Man ou a antiga Master essa imagem é que nem aquele nosso diretório/tmp/hoot FS que eu tinha baixado otarbol onde devo chroot com essa imagem One si sobe um container para ver o container quer dizer que eu tô basta rodar o comando docker
container LS ou sem essa opção a lista seria vazia porque o container executa e termina com essa opção ou ele mostra todos os mesmos terminados Lembra no comando Run que eu dei o nome de Hello pro container no comando de docker Run poderia passar a opção um traço traço name mas como eu não fiz isso ele é um aleatório para o container agora uma coisa que a maioria que já usou docker nunca deve ter feito vamos executar o comando docker Export o nome desse container maior root fs.tarsa caro podemos criar um diretório novo mkd traço
p/tnp/hoot fs2 e fazer targesf rutff.tardirect MP barrote fs2 agora temos CD para dentro e não tem quase nada lá só alguns diretores para fazer mal de proxy e outras coisas e esse executava Hello que podemos executar diretamente com um ponto barra Hello e olha só a mesma saída que vimos antes é isso que o docker Run executou E é assim que podemos pegar o conteúdo de uma imagem de docker uma imagem de docker não é muito diferente de um mero tar bom vamos entender melhor essa tal imagem pra começar de volta no site do docker
HUB vamos escolher a imagem do banco de dados post agora vamos abrir do lado outro navegador com o arquivo docker Fire no github doido de repositório docker Library se clicarmos na tag Leite podemos ver o que ele chama de layers pequenininha a linha só de bater o olho consegue ver onde um lado bate com o outro por exemplo no docker Fire tem esse comando em vigor Silvério o comando em vídeo docker file serve para configurar uma variável de ambiente equivalente ao comando Export num Dash todos esses barra sh são esses comandos Run e assim por
diante O que é um docker file é como se fosse um script de comandos que diz passo a passo como montar a tal imagem de postres voltando para primeira linha começa com o comando from não precisamos começar uma imagem do zero a grosso modo cada comando do docker fire esses em letra maiúscula no começo da linha vão gerar um dos layers que vemos aqui no site do docker HUB com exceção de ideias de configurar variáveis de ambiente que é irrisório a maioria dos Comandos modifica ou baixar arquivos e por isso ocupa espaço é que nem
comente de guite por isso é comum no docker falha até comandos rank executam vários comandos de Shell como encadernados que nem logo no começo que fazemos arte E por quê se o rm-rf se tivesse separado em outro comando Run em baixo o comando do APT get Store abaixar e instalar pacotes como num debia ou Ubuntu que você usa Digamos que instalou 50 MB tô chutando Mas vem um lixo opcional que eu não preciso daí no comando seguinte rodo RM e apaga 10 mega mas a parte a imagem vai ter um layer com 50 Mega porque
o RM ficou no layer separado em vez disso eu baixo 50 megas na sequência já pago e aí fecha a camada só com 40 MB por isso fica tudo dentro do mesmo comando Run como se fosse no mesmo comite entendeu quanto menos comandos no docker Fire é o melhor Olha esse outro comando embaixo um monte de linhas um atrás do outro e o resultado final de Executar tudo é que vai no layer da imagem Essa é a importância do ou se- Ai que a docker fundou ela define esse formato dentro dessa imagem que é um
bináriozão parecido com um zipão tem alguns arquivos de diretórios obrigatórios como index. Jason que tem o nome aí de tamanho lista de Lewis e histórico tem ou se confio ponto Jason que é o equivalente ao config.tram-se que mostrei antes e o mais importante o diretório Bob's que é parecido com o diretório./oubits de um repositório Git Ah vocês não assistiram meu vídeo de Git né lá eu expliquei que o importante é só o que tem no diretório.t todo o resto Pode jogar fora porque dá para recrear tudo com o que tem lá se ele estarmos ls./objetos
vence monte de sub-diretórios como ele está um deles e encontramos um arquivo com nome que é um xiaom esse é o Shaun do comente de guite os Bob's da imagem de docker é similar só que otimizados para layers binários numa árvore enquanto o Gui que é otimizado para árvore de cometidos de texto lembra do formato que é Call 2 que eu mostrei no episódio o que mucoprite versão 2 que é a imagem de HD virtual que o que emo usa e onde instalamos o Windows virtualizado é similar o formato de imagem ou se também suporta
copia onbright que é o mesmo recurso que tem disponível em Sistemas de arquivos modernos como butterffas um Snapchat de butterffast é similar com Snapchat de kekel 2 que é parecido com layers de imagem Call permite criar layer Só realmente com a diferença dos blocos que mudaram no arquivo sabe GIF que fazemos indique e ele grava no Comet só as linhas que foram adicionadas que foram removidas e não arquivo todo Cal é como se fosse gif de arquivo binário E lembra que eu venho repetindo em todos os vídeos a minissérie de armazenamento como arquivos são nada
mais do que um conjunto de blocos binários organizados numa árvore se um arquivo tem 100 megabytes divididos em 100 blocos de um megabytes Digamos que só 10 blocos desse arquivo foram alterados na próxima camada não precisa repetir os 100 megabytes inteiros do arquivo só os 10 blocos modificados ocupando 10 megabytes é por isso que imagens de docker não são pesados para construir uma imagem nova Só precisamos ter o arquivo docker file como esse do posts e rodar o comando docker build se resolvemos mudar o dockerfile a partir da metade repetimos os comando docker build todas
as camadas geradas pela primeira metade de comandos do arquivo permanecem as mesmas jogamos Fora as últimas camadas e eles executam os comandos a partir da metade por isso que quanto mais para o começo de um docker faz você mexer mais o docker build vai ter que trabalhar Se mexer só na última linha é só ela que vai ter que executar então uma imagem de ousear ou docker é um conjunto de camadas binárias como comites de um Git para montar dentro do container o docker usa um sistema de arquivos Chamado overlay 2 que é o Union
Fire System e Union significa que unifica as diversas camadas num sistema de arquivos único o cont que se não sabe que tem essas camadas todas por baixo isso só importa para construção da imagem não para rodar eu menti um pouco agora pouco para vocês Run se é infraestrutura de containers do Linux e sistemas como cubernets e pode me usam mas o docker propriamente dito na verdade usa outra coisa que é o contêiner de pensa assim Run se tem menos funcionalidades é mais simples mais leve pode rolar em userland ou rootless sem permissões de Rute ou
Demons já contém energia tem mais funcionalidades e foi feito para funcionar com o demo que sobe como Rute por isso que quando se instala docker todo o tutorial vai te falar para executar System CTL start docker e habilitar o serviço para subir no boot consistência TL e nem bodoquer e isso pode se tornar um problema de segurança se sair pesquisando sobre buracos no docker vai achar várias formas de Xbox dependendo de como container Foi configurado para subir o caso mais besta é subir um container com o comando como esse docker Run tide-b/2 pontos barra mnt
All Pine tão enxergando erro o problema é essa opção traço V que é para mapear volumes lembra que quando estamos dentro da imagem o processo dentro não enxerga nada do sistema de arquivos fora pois bem no mundo real o container é mais útil se ele tem algum acesso ao mundo externo é melhor ser o new saber que o mundo real existe e ter super poderes dentro da Matrix e um deles é conseguir enxergar arquivos do sistema de verdade essa opção traço V monta um diretório do lado de fora para um diretório do lado de dentro
no caso do exemplo vai montar a raiz de verdade do meu HD para um diretório Barra mnt no container Mas isso é uma burrice Nunca faça um ponto de montagem então amplo como o demo que roda o container contêiner líquido usa sobe com Rute ele tem permissão para editar qualquer arquivo do sistema de verdade a partir desse ponto de montagem daí é game over eu posso fazer o que eu quiser inclusive editar o arquivo a perto da Bud para injetar um novo usuário com permissão de root na máquina de verdade invade ela eu acho que
ninguém são consciência jamais subiria um container de docker num servidor de produção apontando para raiz do HD inteiro do Servidor só um sem noção faria isso seria isso certificado de estupidez é uma das razões de porque muitos de Nós preferimos usar pó de mim em vez de docker pode-me foi feito para ter todos os mesmos comandos mesmas opções e mesmo assim táxi de docker então comandos como docker build ou docker Run traço blá blá Eu Posso rodar Como pode uma build ou pode blá blá se eu quiser fazer um Elias no Shell chamado docker que
aponta pode mano tudo vai funcionar praticamente igual pode mim usa o mesmo arquivo docker Fire com a mesma sintaxe A única diferença é aquele comando from no começo do arquivo por exemplo no caso do post eles começa com from Debby pode me suportar precisa reescrever como from docker.io/de só especificar o site da imagem porque ele suporta outras supositórios em vez de sol docker Hub outra diferença que docker é construído em cima do container de Mas pode me usa o Run se como mostrei antes diferente do container de não precisa ter um demo rodando como root
na verdade Run se e por consequência o podemann tem modo rootless ou seja nem precisa iniciar com tudo Portanto o container consegue rodar sempre privilégio nenhum e por padrão é mais seguro Veja a documentação deles de como funciona esse modo porque eu não vou detalhar tudo hoje e falando em segurança e permissões para concluir foto falar daquele bloco no arquivo do config.j o que eu falei para pular lembra capacidades ou Linux que publites toda vez que se fala em permissões e Linux automaticamente pensamos em coisas como os comandos ch One para mudar a propriedade de
algum arquivo ou ch mode para mudar um arquivo para ser só de leitura por exemplo ou usar ou não usar subduo para executar alguma coisa e é isso Acabou só que não de cara você já aprenderam sobre ser grupos e como eles limitam os recursos do processo ou nem me spaces e como o sistema Mente Para os processos Independente se tem permissão de Rute ou não e tem muito mais em cima Linux é a habilidade da Carol de dar ou remover capacidades com o comando 7 Cap eu vou tentar não descer em detalhes desnecessário demais
mas não terminal o primeiro comando para entender que para Blitz é o Cap sh Execute no terminal e vemos dois Campos no começo e balde inset curryt vazio significa que um usuário normal começa sem nenhuma capacidade por default Mas tem várias capacidades que podem ser habilitadas que essa lista é enorme chamada de balde inset existem dois tipos de capacidades em Linus capacidades efetivas e capacidades permitidas capacidades efetivas determinam quais operações no processo pode performar a capacidade permitidas são quais podem ser habilitadas ou desabilitadas Balde em subconjunto de capacidades permitidas e quem controla esses sete é
o comando PR CTL depois pesquise porque eu não quero entrar em detalhes sobre granularidade de segurança de Linux hoje o próximo comando vai ser grape barra proc/cefron bestpide/status essa variável bestpide é o feed do best aí aparece essa lista bizarra mas é fácil o primeiro são em rariteds ou capacidades herdadas no caso zero segundo são capacidades permitidas que eu já falei zero terceiro capacidades efetivas que eu também expliquei zero e finalmente capacidades bons de inset com o comando que é psh decou de igual esse x decimal e a lista é obviamente a mesma que vimos
no comando que é psh print antes e isso fica guardado no objeto próprio do processo e esse hexadecimal é um beatset um conjunto de bits se você não conhece a técnica de guardar propriedades no ambiente dentro de um inteiro e pegar os valores com a máscara binária um bit mesc pesquisa é para economizar bits em coisas como Protocolos de rede de qualquer forma veja de novo aquele bloco de keple bilits em config Jason agora você sabe o que é efetivo ou permitido esses Cap underline alguma coisa tem que ler no manual de equipa bilitz só
digitar menko bilhete no terminal pronto Cap áudio é capacidade de escrever no logo de segurança que é picil é capacidade de enviar sinais tipo seguir terno ou seguir kill capinet bying sérios privilegiadas abaixo de 1024 com uma porta 80 sem precisar fazer subir com isso vocês tem pelo menos noção agora do que são containers do ponto de vista da cano do Linux eles não são máquinas virtuais é simplesmente um jarro que a carne eu queria ao redor de um processo que roda nativamente para restringir o que ele pode ver ou acessar fazendo esse processo acreditar
que tá sozinho em outra máquina quermel usa-se grupos e que a biles para limitar os recursos e capacidades que esse processo tem sucesso e os animespaces para limitar o sentidos desse processo fazendo enxergar coisas como pizza rede e tudo mais que são falsos dentro da Matrix docker é implementado em cima de container de que é um serviço que precisa rodar como Rute pode e coobernex são implementados em cima de Run se que é mais leve e sem necessidade de um demo auxiliar Falando nisso pode ser que cubenetes ou Terra forma confundam para quem nunca mexeu
qual a diferença disso para docker ou tal docker com pose vamos lá docker Fire você já entenderam serve para construir imagens docker com pouse é hiper útil tem pode me composto que é exatamente a mesma coisa para Quem escolheu usar pode-me ambos começam com o arquivo docker com pouso e ponto Y eman deixa eu dar um exemplo besta aqui Digamos que tá trabalhando um projeto em node começa criando um docker Fire que constrói a imagem do seu projeto novo de conseguir de conteúdo começamos a partir da imagem do node versão LTS em vez do mais
novo que lembram projetos em produção precisam de estabilidade e não da versão mais nova que pode ser a mais bugada sempre use a mesma versão de tudo na sua máquina de desenvolvimento e nos servidores de produção e isso começa pela imagem de docker dentro do container o código fonte do seu projeto vai ficar nesse working dear em barra app daí copiamos o arquivo pack de ponto Jason para dentro do container E rodamos npm stopa criar o node modos e baixar todas as dependências terminamos de copiar todo o código fonte do projeto com esse comando cop
além disso esse container vai expor para fora a porta 3.000 que é onde o servidor de note vai dar bind quando rodar o comando que tá em CMD no caso npm start Não esquecer de também criar um arquivo ponto docker ignora para aquele comando copy não copiar o node mods que tá no seu ambiente de desenvolvimento dentro do container já rodamos npm install Então não precisa copiar tudo de novo é importante entender Onde ficam os arquivos em cada ambiente só com isso já dá para fazer docker build ponto traço T seu usuário barra seu projeto
e já dá para rodar com doc Ram traço P 3000 2.3000 seu usuário basta seu projeto Digamos que seu projeto precisa ter redize post desinstalado isso costuma ser um problema porque se você for um programador meio ocupado experiente na sua máquina deve ter diversos projetos e alguns mais antigos podem depender de postres mais antigo outros de Posses mais novo mas se está na sua máquina viu o gerenciador de pacotes da sua distro sempre vai estar com a versão mais nova só para ter várias versões de node muita gente usa o nvm ou o meu favorito
que é o asdf mas e para ter várias versões de posts de redite mais que é de Kafka e todos esses outros componentes e é para isso que entra o docker compuse Esse é um exemplo de arquivo docker composto ponto e é o que também ficaria na raiz do seu projeto docker compuse orquestra e sobe vários containers docker que ele chama de Services o primeiro a sua aplicação ele começa com o atributo build sendo ponto que é o diretório atual vai subir a imagem que seria construída com o docker file que tá no seu projeto
neste diretório daí configuramos o projeto com variáveis de ambiente por exemplo dizemos que Database host chama DB normalmente você colocaria local host Mas cada serviço é como se tivesse rodando numa máquina separada graças ao name Space o TS que permite que cada um tenha seu host name separado por isso o serviço de post nesse vai ser chamado DB logo embaixo começa o bloco DB onde dizendo que é para baixar a imagem dockers dois pontos natest e configuramos o usuário e senha que é o mesmo que o serviço de novo da sua aplicação vai usar a
mesma coisa no terceiro service que chamamos de revista e baixa a imagem docker aponta eu barra Heads leites é a versão mais nova mas num projeto de verdade é bom fixar uma versão em específico para não confundir como eu já expliquei veja também que o serviço é que é a sua aplicação tem um bloco dizendo de pênis on ou seja o docker composto só vai subir sua aplicação depois que o serviço de posts e redis carregarem e pronto mesmo que você seja um programador que acabou de entrar no projeto depois de fazer Git Conde opositório
é só rodar docker com pose up e pronto vai subir todos os serviços e ao final pode ir no navegador apontar para local roxo r$ 3.000 e que vai estar tudo de pé funcionando o ideal é manter essa configuração atualizada porque mais acontece é ficar ajustando só na sua máquina e não subir atualização pro repositório daí outras pessoas novas entra na equipe baixa uma configuração desatualizada e dá vários problemas mantenha tudo atualizado de bônus lembra do vídeo de otimização web onde eu explico sobre coisas como end next podemos simular o que eu falei naquele vídeo
com docker com pose não é uma coisa que faremos um projeto de verdade mas só para ilustrar como aquele diagrama conceitual viraria código de docker com pose O serviço é redisse iguaizinhos por exemplo anterior mas agora adicionei um load Balancear que puxa a imagem do Wind next lembra que eu expliquei naquele vídeo que ele é quem realmente responde na porta 80 e para o indinext funcionar precisa ter um arquivo em dinex.comp no seu projeto que instruímos o docker composto e copiar para dentro do container de end next esse arquivo diz o seguinte o bloco server
tem a configuração do servidor que vai escutar na porta 80 e fazer o tal do proxy reverso para http:ap e o app está configurado acima são os rostos de names é Pium e ep2 na porta 3.000 de cada container lembra o que contém rede virtual separado na espécie de porta separada então cada um quando carregar você pendura na porta 3.000 e o Andy next vai fazer o round de Robin Entre esses dois servidores é Pium e a F2 ergam do serviço é que é sua aplicação em node aqui Estamos subindo duas instâncias para ter balanceamento
de carga entre os dois Note que o serviço de balance depende desse é Pium e é P2 estarem de pé esses dois por herdarem de ep Depende de redize postres estarem de pé e é assim que o docker composto sabe quem tem que subir primeiro para tudo tá funcionando e pronto Isso é uma pequena demonstração de uma aplicação node com dois processos sendo balanceados por um end next docker compuse foi feito para infraestrutura bem simples em particular para rodar na sua máquina de desenvolvimento e facilitar a vida de programadores ele até serve para fazer depois
em servidores pequenos tipo numa digital roxa da vida antigamente tinha um projeto chamado docker machine que servia para conversar com provedores de servidores mas acho que ninguém usa mais veja como nesse arquivo para subir duas instâncias da aplicação precisou manualmente digitar é Pium é P2 colocar eles no depende só do de balance imagina se precisasse subir 10 instâncias ou você precisasse configurar réplica de post ou se precisasse configurar uma fila e vários servidores separados de obras assim com nós como eu falei no vídeo do chat GPT esse arquivo não ia ficar complicado ainda mais porque
também não sabe só aumentar ou diminuir só os contêineres de web ele não tem noção do que tá rodando nos servidores já agora e só dá manutenção para isso que entra a coobernets e Terra forma que o bernese é um conjunto de tecnologias de infraestrutura elástica a parte que se aproxima de docker é o que ele chama de podes que são containers que rolam com Run se mas o cu Bernardes faz bem mais configura ver PC que são redes privadas virtuais eu posso criar uma rede isolada só para os containers web outra rede isolada separada
só para servidores de job por exemplo sabe lidar com balanceadores de carga Wings adicionar e remover podes dinamicamente e sabe que tá na WS ou no Google Cloud ou na azul e com isso eu consigo adicionar serviços exclusivos como RDS da WS com o banco de dados ou Cláudia SQL do Google Cloud é bem mais flexível e por isso mais complicado entenda e a s ou infraestrutura como serviço como a w Me fornece os componentes básicos de infraestrutura o cu Bernardes é melhor para lidar mais com os podes os containers depois que já tem infraestrutura
de máquinas e rede pronta para subir essa Inicial podemos ou fazer na mão via interface web o que não se recomenda ou orquestrar com terra forme por exemplo máquinas virtuais com a WS chama de S2 esse servidor tem tamanhos diferentes como T2 nano que só tem um vcpu T2 xlrd 4 bcpus a um método ccpus M4 16 x 64 bcpus cada um com preço diferente por hora tem planos diferentes parece três RDS SQS assim vai e isso só na WS para organizar tudo usamos terraforme deixa eu mostrar só alguns trechos de um exemplo de arquivo
de configuração que pode ficar super Comprido veja o Terra forme sabe que o provedor é a WS Em qual região geográfica no caso leste dos Estados Unidos tipo Nova York Veja a configuração de rede privada de rotas daí o contrato um servidor é C2 tamanho T2 Michael e configuro para rede que tinha declarado antes embaixo configuramos grupo de segurança Depois tem configuração de banco de dados depois de rediz que é o serviço com a WS chama de elast Cash Depois tem o load balancer e esse arquivo de exemplo é bem simplório e incompleto entre coobernets
e Terra forme tem bastante detalhe para realmente depular uma aplicação em produção que esteja configurado de forma eficiente e com segurança numa configuração de verdade se tudo tiver direitinho declarado seria só digitar terraforme limite para fazer download e instalar os plugs necessários daí Terra forme Play para criar o plano do depoimento para esse provedor e a gente gasta tudo realmente certo coisa que já está instalada ele não vai instalar de novo é só reconfigurar e instalar o que falta e no final fazer até a forma apoie para realmente contratar o serviço configurar e colocar nos
lugares certos na infra o vídeo de hoje não é sobre de mas já que eu tô falando de container de serviço eu achei legal só mostrar um exemplo para quem nunca viu mas o ponto é compare uma configuração longa de terra forme com simples docker com pouse Nem chega perto porque o objetivo das duas ferramentas é diferente um é para orquestrar uma infra de verdade a outra é para rodar só na sua máquina para facilitar o desenvolvimento para configurar um aws use com bernese e Terra Firme para configurar serviço na sua máquina usa e docker
com pose todo bom projeto deveria ter isso para finalizar eu não vou mostrar mas eu queria só explicar outras tecnologias de container que existem eu expliquei sobre imagens ou seai de docker mas tem outro projeto que eu recomendo que pesquisa é chamado ou stree Lembra que eu falei que uma imagem meio que parece montado com comidas binárias de um Hitch existe de fato um projeto que é um Git de sistema de arquivos ou os tri A ideia é mais ou menos assim imagina que você tem 100 servidores uma WS da vida coisa grande imagina se
essa atualização do Ubuntu Server que que você vai fazer mandar rezar para não dar pau em nenhum na verdade não você vai montar imagens com o S3 o sistema de arquivos de todos servidor vai ser como um Git gigante daí está a atualização você atualiza só em uma imagem US tri no servidores vai baixar a nova imagem trocar a imagem antiga pela Nova é tipo dar um GIF e trocar para o Branch mais novo com Git checkout manja é uma explicação meio grosseira mas é bom saber que isso existe outra coisa sobre capacidades além de
Linux que eu expliquei antes existem outras formas de limitar acesso recursos da máquina especialmente no contexto de segurança sabe em aplicativo Android ou iOs Hoje em Dia Que pergunta se você quer dar acesso da câmera para um app o acesso a sua localização e coisas assim no mundo Linux isso é responsabilidade de componentes como sexo compre de sequer Compre que é outra funcionalidade da carne do Linux para restringir chamadas de sistema ele normalmente é usado em combinação com mecanismo de segurança mas o seccombem-se oferece a infra na kerne para aplicar filtros Nos programas se alguém
tentar fazer alguma coisa que não deveria a kerne ao recusa em cima disso temos projetos como apiarmo e si Linux olhando só por cima ele se complementam ambos servem para forçar políticas de segurança Nos programas o app armor permite especificar Que recursos como arquivos dispositivos e Sócrates de rede um programa tem permissão para usar é Celino que significa Security Linux que também força políticas por exemplo para acesso a hardware externo é ele que proíbe um aplicativo de usar só webcam Além disso do jeito que eu falei parece que todo contêiner vai usar de Linus como
Comandante mas existem outras formas de fazer container Como projeto que é um container mais simples e usa outro recurso da kerna do Linux que são privilege e seque bpf porque se você juntar todos eles no único projeto começa a surgir com coisas como flat pack Sabe aquele instalador de aplicativos Tecnicamente é como se fosse um docker ou pode me mas feito para funcionar melhor com aplicativos especialmente aplicativos gráficos com janela que precisam acessar seus arquivos USB e se comunicar com outros programas precisando ter acesso a serviços como the bus tem gente que fica pensando em
usar docker para instalar um Gimp ou libreoffice não né Para Isso serve flatpack flat pack roda aplicativos como Spotify discords um dentro de container semi isolado são menos isolados que um container de docker Mas um pouco mais seguros do que se fossem instalado direto via act ou pac-man e o Snap de Ubuntu é similar um gerenciador de container em vez dos pacotes serem tipo zips como eu expliquei no vídeo disléctor flashback e Snapchat e imagens com de docker só que em vez de imagem ou seai é o s tri entenda que flatpack e Snap são
primos de docker de coobernets as tecnologias por baixo também dependem da Kernel do Linux e sempre caímos em sergipes e algum formato de HD virtual dentro de um linguição de bytes binário que chamamos de imagens e eu espero que tenha dado uma luz no entendimento de containers e eu espero que ninguém mais tenha pachorra de confundir containers com máquinas virtuais Se ficaram com dúvidas mandem nos comentários abaixo se curtir o vídeo deixa o joinha Assinei o canal E compartilhe o vídeo com seus amigos a gente se vê até mais agrupar que eu tinha lá dentro
não tem que pariu alô testando [Aplausos]