Salve, Deus, beleza? Continuando essa saga aqui do nosso módulo de Docker, agora nós vamos ver na prática ali como isolar um processo e vai ser um pouco do gostinho do que é um container. Eu já quero habilitar aqui na tela um meme para que a gente entenda o espírito da coisa. Imagina aqui esse clássico de meme, que tem ali o irmão jogando videogame, e tem o outro irmãozinho achando que ele está jogando, mas olha só o controle aqui. O controle dele está totalmente desconectado. Qual é a analogia que a gente vai fazer para o container? O container, ele acha que ele é um sistema operacional novo, que ele está com armazenamento ali para ele, que ele é um sistema operacional novo, que ele está com armazenamento ali para ele, que ele está com processamento 100%, ele acha que está tudo liberado. Mas, na verdade, ele está todo isolado, está sendo enganado do que está disponível para ele. Mas a questão é que, dentro do contexto, a visão dele é que está tudo certo. Então, a gente tem aqui a nossa próxima aula, que você pode dar uma olhadinha também num tutorial que eu coloquei aqui. Vai ser bem interessante o que a gente vai fazer nessa aula. A gente vai trabalhar com o chroot e com namespaces. A gente falou do chroot que foi criado lá em 1979. A gente consegue fazer com que um processo enxergue apenas uma raiz de diretório com subdiretórios. Então, significa change root. Vamos pegar aqui o Linux. Então, eu estou aqui com o Ubuntu. Você pode fazer esse teste aí, inclusive até no WSL, se você estiver no Windows, qualquer Linux vai funcionar. A gente vai simular um container. Vai ficar bem interessante esse nosso teste. A gente vai pegar uma userland de um Debian. Então, userland são aquele diretório, sistema de arquivos comum que a gente tem, o barra var, barra etc. Então, a gente tem acesso a todos esses diretórios através desse rootfs. Ele já é um compactado com todos esses diretórios. Tem alguns binários lá para poder executar um Python e os comandos básicos. Você vai usar o wget para poder baixar aí num diretório qualquer e depois fazer a descompactação. Então, vamos aqui para a pasta rootfs que ele vai acabar gerando. Então, tem aqui o meu userland. Ali a pasta binária. Um detalhe que a gente não vai fazer um boot de um novo Linux, não tem boot nenhum. Vai ser apenas um processo. Então, eu quero usar o change root para poder fazer com que essa seja a raiz que a gente vai trabalhar, como se eu estivesse ali numa partição do Linux. Então, a gente vai fazer assim, sudo phroot rootfs barra bin barra bash, para a gente poder entrar e executar isso aqui com o bash, tem que ser com o sudo. Então agora, quando eu faço um ls, eu estou dentro do rootfs, eu posso tentar retornar aqui, eu continuo nessa pasta. Então todo processo que eu executar, ele vai ficar restrito a esse diretório. Vamos executar aqui, por exemplo, um Python da vida. Na verdade, Python, a gente vai ter que fazer um barra usr, barra bin, barra python. Tem um python2 aqui, eu acho. Então, tem um python2.set. Se eu acessar... O outro terminal é rodar um psaux para ver os processos. Na verdade, acho que tem muita coisa aqui. Vamos fazer um graph Python. Olha que interessante, nós temos coisas do próprio Ubuntu com Python 3, mas eu tenho o root é um processo que está rodando ali naquele diretório, com pid 3506. Será que eu consigo acessar o comando pid aqui também? Comando PID não, na verdade o PSALCS, ele vai falar que eu não tenho o diretório PROC montado, porque tudo no Linux é arquivo. A gente consegue acessar as informações dos processos no diretório PROC. Tem todos os PIDs aqui, com as informações dentro de cada PID, tem o status, cgroups e coisas assim. É só a gente mostrar o arquivo ali que ele mostra a informação, não precisa ficar fazendo fiscal, então acaba sendo mais eficiente. Então, tem que montar, isso aqui é feito no Linux por padrão, mas nesse nosso chroot não tem. Então, aqui eu monto. Agora, se eu fizer um ps-aux, eu consigo ver todos os pids e os processos. Então, a gente não está totalmente isolado. A gente só isolou os diretórios. Então, aqui eu consigo ainda acessar alguns recursos globais, que não é legal. Então, o que a gente vai trabalhar aqui agora vai ser com os namespaces para a gente podar os processos aqui e eles acessarem somente esse pequeno mundinho deles. Inclusive, até antes da gente continuar, convém a gente fazer um eco na variável path, porque aqui no Ubuntu ele vai acabar colocando aqui um path apontando para as pastas convencionais, dependendo do Linux que você tiver, se for um Linux mais básico, pode ser que você nem tenha path. Então, dê uma olhada antes no path para poder executar lá o comando do PS, que aí ele pode ser que você nem tenha path. Então, dê uma olhada antes no path para poder executar lá o comando do ps, que aí ele pode falar que nem existe porque você não tem o path. Então, convém mensurar esse detalhe aí também. Então, vamos sair aqui do nosso chroot. Voltando lá para o nosso tutorial, nós temos aqui a parte dos namespaces. Então, nós conseguimos isolar esses processos, permitindo que eles enxerguem apenas um subconjunto dos recursos do sistema. Então, a gente consegue isolar os processos do mundo global do Linux, interface de redes, endereços, portas, pontos de montagem. A gente tem aqui o ponto... Tinha lá o ponto mount aqui. A gente consegue isolar, porque no mount eu tenho um monte de coisas do Linux montadas. Então, a gente consegue fazer esse isolamento que vai ter vários benefícios. Então eu estou criando esse submundinho e a gente faz isso com o onshare. A gente vai rodar exatamente esse comando aqui que eu vou copiar para poder ficar mais fácil. Eu vou explicar para vocês o que ele vai fazer. Então, a gente vai fazer um sudo unshare menos p, que eu posso definir aqui um id para o pid, para o id ali do processo que vai rodar. Eu vou fazer um fork. Então, o que vai rodar vai ser um subprocesso desse unshare que vai criar esse namespace. E eu vou montar o PROC com essa opção aqui no diretório PROC do rootfs do nosso userland e a gente vai ter acesso somente aos processos que estão rodando ali naquele namespace. Então, daqui para frente eu posso rodar qualquer comando. Eu quero rodar o chroot apontando para o root fs-bin-bash para a gente poder brincar lá dentro. Então, olha só agora. Se eu faço um ps-aux, eu não consigo ver mais os processos globais. E os processos globais estão aqui, normalmente, no meu contexto global. E aqui está o meu comando do unshare. Se eu rodo também o Python, vamos pegar aqui, então, o Python 2, eu consigo ver inclusive o ruim disso aqui é que eu não consigo olhar ali para dentro do processo. Se eu rodar aqui um PS, se eu consigo ver aqui o Python que eu rodei, está vendo o PID dele que é o 3644, a gente pode fazer aqui um servidor e rodar com o pass aux, para ver que eu consigo rodar ele aqui dentro também. Eu não posso rodar um outro unshare aqui. Eu rodei um comando aqui, só para a gente poder ter esse exemplo de coisas rodando dentro do nosso namespace. Eu rodei um comando tail que lê arquivos. Estou lendo o comando ls, jogando para o dispositivo nulo do Linux e com esse i aqui para poder não travar. Eu fiz algumas vezes, então olha que interessante. Eu tenho aqui os processos com os pids bem baixos porque eu estou dentro do mesmo dentro do namespace mas se eu rodar o ps-altos com grep fail a gente vai ver que todos aqui estão com speed auto, que na verdade eles estão rodando como um processo, que a gente está vendo aqui no contexto global, mas eu estou dentro do mesmo namespace. Então, com esse unshare, eu consigo até descompartilhar a rede. Então, se eu rodar um Nginx, um Node.js, que vai rodar na porta 3000, isso vai ser visto apenas dentro do meu namespace, eu não vou conseguir acessar essa 3000 fora, aí que vem aquele compartilhamento de porta. Eu quero mandar 3000 aqui desse namespace para 8000 no meu contexto global. Mas, de uma forma geral, a gente tem aqui como se fosse um novo Linux, que não representa o disco, mas os processos acham que está tudo ok, enfim, está tudo belezinha, e é assim que é um container funcionando. Ele está todo podado, ele é apenas um processo, ele é visto aqui na listagem de processos se fosse uma máquina virtual você vai ver aqui só um QEMU, no caso do Linux você não consegue ver o que está rodando lá dentro o sistema operacional, os processos, vai ter que entrar no sistema para poder fazer essa execução então pessoal, vamos evoluindo aqui na nossa saga do Docker é isso aí, e até a próxima