Salve, Dés, beleza? Continua a nossa saga aqui no nosso módulo de Docker. Nessa aula, eu quero deixar muito claro, você vai sair dessa aula, sabendo a diferença entre container e imagem. Claro que você não é um leigo mais, você sabe que o container é um processo e que a imagem é um template para ele. Mas vamos entender a relação, vamos ver na prática essa diferença, porque é essencial para que você evolua as suas skills com relação a esse mundo de containers e as suas skills com relação ao Docker. Então, deixa eu puxar aqui um browser. Nessa aula, nós vamos brincar com uma imagem Node.js. Então, a gente já falou disso aqui, porque o Docker Hub vai prover várias imagens, você vai encontrar já uma linguagem de programação numa versão específica, já com uma imagem bonitinha. Então, a gente vai baixar essa imagem, que vai ter aquela userland, vai ter lá aquelas pastas de um Linux, como se a gente tivesse um Linux lá dentro, mas tu estava dando dentro de um processo. Então, a gente tem aqui um monte de versões do Node.js. Eu vou pegar uma versão Slim. Aqui, no caso do Node, eles criam uma versão Slim, que é uma derivada de um Debian, que é uma imagem pequena. Porque se eu comparar com uma versão convencional aqui, vai ser uns 300 MB, acho que é isso, ou 200, 400 MB na verdade. Então vamos fazer o seguinte aqui. Nós vamos rodar o comando docker run node 2.20 Slim. Como a gente já aprendeu ali, ele vai tentar puxar a imagem local. Ele já está local aqui na minha máquina, ele não puxou, ele executou ali e... Não aconteceu nada, porque eu não coloquei, não tem nada que vai manter o processo de pé. Essa imagem, como é uma imagem de linguagem de programação, ela já tem um comando que está embutido nela, que é o próprio Node.js. Se eu passar aqui no final um version, ele vai mandar lá para dentro do container que ele vai estar executando o node e a gente vai ver ali a versão do node. Então aqui eu posso passar um comando no final. Eu quero rodar o bash para poder entrar dentro do processo e fazer comandos ali para a gente poder brincar. Então, se eu passo aqui um comando, só vamos fazer aqui um ls. Tem o userland lá, então tem o Debian com todas as pastas aqui, mas obviamente com uma distribuição bem menor. Se eu passar aqui o bash diretamente, não vai dar certo certo porque aqui eu preciso informar que o nosso container vai se comportar com o bash e ele tem que conectar com o meu bash atual. Então, para poder ativar o bash, eu preciso passar aqui antes um "-it", que é o modo iterativo. Olha só, a gente tem aquela mesma execução de um container. Se eu fizer um ls. Agora, eu estou dentro aqui. Posso fazer o que eu quero. Então, vamos criar aqui um arquivo. Dentro da pasta temp, pode ser. Vou fazer um echo. Olá, mundo. pode ser, vou fazer um echo olamundo para barra temp teste.txt certo? Então se eu fizer um catch, então eu tenho os comandos aqui, eu tenho dentro dos binários uma basezinha do Linux ali para poder brincar eu consigo fazer um catch no teste. Então, está aqui. Está no modo interativo, o container continua rodando, se eu fizer aqui um docker container ls, ele está rodando, a gente manteve ele de pé, processo aqui do do terminal até que eu decida fazer a saída. Vamos fazer aqui esse mesmo comando. Novamente. Eu já vou fazer um catch lá naquele arquivo. Ou melhor, não preciso nem fazer um catch. Posso fazer um ls na pasta temporária. Tem uma outra coisa aqui, mas eu não tenho aquele arquivo lá. Então isso aqui mostra exatamente o princípio de um container e da imagem. Cada container é um processo independente. Se eu fizer aqui um echo criando outro arquivo aqui eu vou ter esse arquivo Na verdade eu criei no lugar errado. Vou criar em temp. Eu tenho esse arquivo lá. Posso ver o conteúdo dele. E aqui eu continuo sem aquele outro arquivo. São dois containers separados. Eles estão, lembra do ponto de montagem? A gente criou um ponto de montagem com diretórios Linux para os dois processos. Eles estão em namespaces distintos. Então, se eu criar um novo container baseado nessa imagem, eu não tenho nenhuma modificação. Então, o que a gente tem que sempre lembrar é que a imagem é só para leitura. Ou seja, ela é imutável. Uma vez que esse Node 20 Slim está aqui na minha máquina, eu tenho ali a minha UserLand com os binários e algumas outras coisas aqui. E é o que tem ali. Então, todo container que vai ser criado, vai ser criado baseado nesse molde. Se eu tenho outro container que fez outra modificação, a modificação vai ficar somente nesse container. Eu não tenho nenhum compartilhamento entre eles, nada. Então, nós podemos fazer uma analogia à própria orientação a objetos. Acho que todo mundo que está vendo essa aula conhece um pouquinho de orientação a objetos. A gente pode comparar uma imagem com uma classe e o container a um objeto que é uma instância daquela classe. Então, quando eu crio um novo container, criei o objeto, se eu fizer alguma modificação aqui, se eu tiver um container node 1, agora a gente está criando um novo arquivo, se eu adicionar um novo arquivo, isso não modifica a minha classe, não tem incidência nenhuma. Ela continua lá daquela mesma forma. Inclusive até vou colocar aqui corretamente. Então, eu posso criar vários objetos dessa classe e os objetos se modificam como eles quiserem, sem incidir na minha classe. Então, a imagem é somente leitura, totalmente mutável. Se eu tiver uma modificação nessa imagem, eu tenho que gerar uma nova versão dela. A gente vai aprender isso ainda aqui no curso. Agora, o container é sempre mutável. Ele pode chegar ali e mudar todas as pastas, criar arquivos e fazer o que for, e não tem nenhuma incidência em outro container que está rodando porque são processos distintos como se fossem máquinas distintas, mas na verdade são somente os processos show de bola pessoal, então vamos evoluir nossa saga, é isso aí e até a próxima