Saudades, beleza? Continuamos a saga aqui no nosso módulo de Docker. Agora, nós vamos aprofundar um pouquinho mais no que está por trás dos containers e das imagens. Nessa aula, nós vamos aprender a fazer a expressão de uma imagem de um container, que a gente vai ter aquele... Lembra daquele resultado lá do runc, que tem aquela especificação do JSON e a gente acabou depois criando um container com ele pois é, a gente consegue ver aquela especificação que é compatível com o padrão ou CI e é exatamente por ter já esse padrão de mercado que o Docker está usando que se você pegar essa imagem e jogar para um outro container runtime, por exemplo, um Podman da vida, vai funcionar. Essa é a dúvida de muita gente. Então, bora brincar um pouquinho com isso aqui. Nós fizemos muito na aula passada lá o build com... Deixa eu parar esse container aqui. Nós fizemos muito na aula passada o build ali do mynode, né? Então, vamos rodar aqui o comando docker inspect mynode. Então, olha só. Lembra lá do JSON? Só que esse aqui é um JSON de respeito, um JSON mais... maior, no final das contas. Acho que eu consigo aumentar aqui um pouquinho mais. Então, nós temos aqui uma identificação, aqui qual é a versão da imagem. Isso aqui foi gerado com o Docker, que é um comentário, mas a gente pode ver aqui, por exemplo, como o path, como está definido. Tem variável de ambiente do Node, que é a versão do próprio Node, e a ARM também, que é outro gerenciador de pacotes. O CMD, que é o comando, que vai ser executado quando o container foi iniciado. O nosso diretório de trabalho, o volume não estou trabalhando ali. A imagem Node, ela acaba definindo também o entry point, depois a gente vai falar sobre esse entry point aqui, que ele concorre com o command, que é o comando que inicia o container. Ambos são comandos que vão iniciar o container, mas eles têm a sua devida diferença. E aqui nós temos o armazenamento dessa imagem. Essa imagem, ela está armazenada, depois a gente vai falar disso, no barra var lib docker overlay. Ela vai utilizar o overlay file system versão 2, no momento que eu estou gravando aqui essa aula. Aí a gente consegue ver as camadas isso tem versão 2, no momento que eu estou gravando aqui essa aula. Aí a gente consegue ver as camadas dessa imagem. Então, olha que bacana isso. Se você tiver a extensão também do Docker aqui no VS Code, isso também acontece com outras ideias. Você pode pegar aqui a imagem. Eu sou sincero, eu não costumo utilizar isso aqui muito, porque eu estou acostumado com os comandos. Na verdade, eu acho que eu sou bem noob aqui com ele. My node aqui. Eu consigo fazer um... Eu conseguia fazer um expect aqui. Pelo menos... Porque do container tem um comando expect aqui. Eu achei que tinha. Tem sim. O que é melhor para poder visualizar, a gente consegue ver aquele mesmo resultado aqui, copiar, fazer alguma coisa, então é o padrão que a gente tem. É o padrão que está de acordo com o CI, que trabalha com o runC ou com qualquer outro container runtime que está ali no baixo nível fazendo a execução desses containers. A gente já falou disso lá atrás. A gente consegue também inspecionar um container. A gente estava rodando os containers aqui com o "-remove", mas enquanto esse container estiver de pé, eu também consigo fazer a inspeção dele. Eu consigo fazer... vamos fazer primeiro pelo VS Code. Será que eu consigo ver ele aqui? Tem um container rodando com esse aqui, eu consigo fazer um inspect nele aqui. São dois JSONs diferentes, uma coisa é o JSON, a especificação da imagem, e outra a especificação do container. A gente consegue vir aqui no OCI GitHub, ou CI GitHub, a gente tem a especificação da imagem, vai justamente trabalhar com aquele formato ali, e tem a especificação dos containers. Então, aqui nós podemos ver o comando que iniciou esse container, tem lá o entry point que a gente não está... Na verdade, ele está... Ele está incidindo sobre o nosso resultado ali, mas não tem nenhuma influência. Aqui já é o armazenamento dos containers, tudo isso fica local na sua máquina. Então, onde que ele... O container também é dividido em camadas, ele vai fazendo o armazenamento das informações. Então, onde que ele... Porque o container também é dividido em camadas, ele vai fazendo o armazenamento das informações. Então, tem lá o resolve config que define o DNS, o hostname, o arquivo de hosts. Tem o nome dele. Qual é o driver de armazenamento que é o mesmo das camadas da imagem, que é o overlay que a gente vai falar depois. Aí tem outras configurações aqui do host, de como ele vai trabalhar. O runtime que está rodando por trás é o runc, que a gente rodou manualmente, mas claro que a gente não precisa se preocupar com ele. Aí aqui tem a questão dos pontos de montagem, aqui já o armazenamento das imagens, deixa eu ver se tem mais alguma coisa importante para a área de ambiente, informações de rede, depois a gente vai trabalhar com isso também, porque o container fica dentro de uma rede para o Docker saber lidar com ele e, por padrão, uma rede do modo Bridge. E o container também tem um IP atribuído para ele, que é justamente esse IP aqui. E ele tem o IP de saída, que é 172.7.0.1, que é o gate do Docker. Então, eu queria mostrar justamente essa inspeção aqui para vocês, Então, eu queria mostrar justamente essa inspeção aqui para vocês, vendo que tudo está dentro dos padrões, a gente entendendo como as coisas funcionam por trás, elas ajudam. Inclusive, muitas vezes a gente está rodando containers e eu tenho dúvida ali do que está por trás do container, então você faz um inspect e aí tem outras ferramentas também que você pode utilizar. Você faz ali um inspect com um grep, para poder pegar, por exemplo, o endereço, você lê daquele container, você vê qual é o IP do container. Então você coloca aqui mynode1, e aqui a gente pega o IP. Consegui pegar o IP, que é justamente esse aqui. Tem ferramenta também como jq que você consegue fazer pesquisa em JSON aqui no terminal também que é muito utilizada. Enfim, pessoal. Então vamos seguindo a nossa saga. É isso aí e até a próxima.