‫Tudo bem, nesta palestra, vamos falar sobre camadas de imagens.
‫Então, este é um conceito fundamental de como o Docker funciona. Ele usa algo chamado sistema de arquivos de união
‫para apresentar uma série de mudanças no sistema de arquivos como um sistema de arquivos real.
‫Nós vamos mergulhar na história e inspecionar comandos e ver como podemos usá-los para
‫entender o que realmente é feita uma imagem. Nós vamos aprender um pouco sobre a cópia no conceito de
‫escrita de como um contêiner é executado como uma camada adicional em cima de uma imagem.
‫O que quero dizer com camadas de imagens?
‫de que uma imagem não é uma grande quantidade de dados que vem e vai em um pedaço enorme.
‫Na verdade, é completamente transparente para você quando estiver usando o Docker, mas quando você começa a
‫cavar certos comandos, como o comando do histórico, inspecionar e confirmar, você começa a ter a sensação
‫Certo?
‫Se você perceber quando realmente fizemos o Docker puxa, certas vezes você pode ver palavras que
‫indicam que há algo que você já possui, como se você já tenha armazenado alguma parte Há algum tempo, estávamos brincando Certo? Lembramos que o ID da imagem Nginx é o
‫dele e que tudo se resume ao fato de as imagens serem projetadas usando o conceito de sistema de arquivos de nas imagens do Docker com as tags com o Nginx. mesmo e nós tínhamos tags diferentes para o mesmo nome de imagem.
‫união de fazer camadas sobre as mudanças. Então, vamos fazer um histórico rápido do docker no nginx mais recente.
‫Se pudéssemos rapidamente, basta ver o que temos no Docker. na verdade. O que eu estou olhando aqui?
‫Esta não é uma lista de coisas que realmente aconteceram no recipiente porque isso é sobre uma imagem.
‫Este é realmente um histórico das camadas da imagem.
‫Toda imagem começa desde o início com uma camada em branco conhecida como scratch.
‫Então, cada conjunto de mudanças que acontece depois disso no sistema de arquivos, na imagem, é outra camada.
‫Você pode ter uma camada, você pode ter dúzias de camadas e algumas camadas talvez
‫nenhuma mudança em termos do tamanho do arquivo.
‫Você notará aqui que realmente temos uma mudança aqui, que foi
‫simplesmente uma mudança de metadados sobre o comando que realmente vamos executar. pouco quando examinarmos o Dockerfile.
‫Vamos cobrir isso um
‫Mas, por enquanto, você pode realmente ver que este adicionou uma enorme quantidade de arquivos que era 123MB.
‫Então nós fizemos uma mudança aqui e uma mudança aqui e eu conheço por causa do Dockerfiles que estas são
‫apenas informações de metadados do Dockerfile.
‫Ao subir, temos mais algumas mudanças de dados.
‫Você verá que isso é bastante diferente em outra imagem.
‫Então, se formos a mysql do docker, tem um conjunto completamente diferente de camadas de imagem.
‫Deixe-me desenhar isso um pouco para você e talvez isso ajude.
‫Quando começamos uma imagem, quando criamos uma nova imagem,
‫começamos com uma camada. Cada camada obtém seu próprio
‫SHA exclusivo que ajuda o sistema a identificar se essa camada é realmente a mesma que outra camada.
‫Digamos que, no início de um deles, você pode ter o Ubuntu no fundo.
‫Essa é a primeira camada na sua imagem.
‫Então você cria um Dockerfile, que adiciona mais alguns arquivos e essa
‫é outra camada em cima dessa imagem. Talvez usemos o Apt para isso.
‫Então, no seu Dockerfile, você faz uma mudança de variável de ambiente. Isso é a sua imagem.
‫ok?
‫Você pode ter uma imagem diferente que começa do debian: jessie e, em
‫seguida, na mesma
‫imagem, você também pode usar o Apt para instalar algumas coisas, digamos MySQL. Você pode copiar alguns arquivos, você pode abrir uma porta.
‫Então, cada
‫uma dessas mudanças que você costuma fazer no Dockerfile, mas você também pode fazer com o comando de encaminhamento do commit que veremos em um minuto.
‫Esta é também outra imagem e todas juntas.
‫O que acontece se eu tiver outra imagem que também use a mesma versão do jessie?
‫Bem, essa imagem pode ter suas próprias mudanças em cima da
‫mesma camada que eu tenho no meu cache. É aqui que o conceito fundamental do cache
‫de camadas de imagens nos poupa todo o tempo e espaço. Porque não precisamos baixar camadas que já temos, e
‫lembre-se que usa um SHA exclusivo para cada camada, de modo
‫que garanta a camada exata que precisa. Sabe como combiná-los entre Docker Hub e nosso cache local. À medida que fazemos alterações em
‫nossas imagens, eles criam mais camadas.
‫Se decidimos que desejamos que a mesma imagem
‫seja a imagem base para mais camadas, é só armazenar uma cópia de cada camada.
‫Neste sistema, realmente, um dos maiores benefícios é
‫que nunca armazenamos os mesmos dados de imagem mais de uma vez em nosso sistema de arquivos.
‫Isso também significa que, quando estamos carregando e baixando, não precisamos
‫carregar e baixar as
‫mesmas camadas que já temos do outro lado. Se você tivesse sua própria imagem e fosse costume que você se fizesse, e depois adicionou,
‫digamos, um servidor Apache em cima
‫disso como outra camada em seu Dockerfile, e então você deveria abrir a porta 80. o site A na imagem e, em seguida, no site B, você acabaria
‫com duas imagens.
‫Então, no final, você realmente disse para copiar no código-fonte, mas você
‫realmente acabou tendo dois Dockerfiles diferentes para dois sites diferentes, e cada linha no Dockerfiles era a mesma, exceto para o último pouco em que você copiou Vamos mostrar isso em um minuto. Isso compõe uma imagem e isso compõe uma imagem, mas os únicos arquivos que são realmente
‫armazenados são esse, esse, essa camada e, em seguida,
‫essa pequena camada e, em seguida, essa pequena camada.
‫Então, nunca armazenamos toda a pilha de camadas de imagem mais de uma vez, se realmente são as mesmas camadas.
‫Como isso funciona com contêineres?
‫executar um contêiner fora dele, tudo Docker faz é que ele cria uma nova camada
‫de leitura / gravação para esse recipiente em cima da imagem do Apache.
‫Se você tiver a sua imagem, digamos que temos a nossa imagem do Apache, e decidimos Quando estamos examinando o sistema de arquivos e essas coisas, todos os contêineres e as
‫imagens parecem apenas
‫um sistema de arquivos regular, mas abaixo do driver de armazenamento usado pelo Docker está realmente
‫em camadas, como uma pilha de panquecas, todas essas mudanças em topo um do outro.
‫Então, se eu executasse dois recipientes ao mesmo tempo fora da mesma imagem
‫do Apache, o recipiente 1 e o recipiente 2 só estariam mostrando, em termos de espaço de arquivo, eles seriam apenas a diferença entre o que aconteceu
‫naquele contêiner ao vivo e o que está acontecendo na imagem de base, que é somente leitura. camada do contêiner.
‫no contêiner em execução. na imagem do Apache.
‫Quando você está executando o Containers e você está mudando os arquivos que estavam passando pela imagem, digamos que eu comecei isso é conhecido aqui em e armazene uma cópia desse arquivo na Então, agora, o contêiner é realmente apenas o processo em execução e os arquivos que são diferentes do que estavam
‫o container 3, e na verdade eu entrei e alterei um arquivo que estava nesta imagem como copy-on-write. O que isso faz é que o sistema de arquivos tire esse arquivo da imagem e copie-o para essa diferenciação. cima. Se voltarmos para a nossa lista de imagens e nós olhamos esses comandos
‫novamente, e nós olhamos para o fundo e vemos como as datas são diferentes? Podemos realmente ver como esta imagem mudou no Docker Hub e foi atualizada
‫ao longo do tempo, que essas mudanças não foram
‫alteradas na camada inferior em quatro semanas e as últimas mudanças estão acontecendo nas últimas
‫duas semanas.
‫Por sinal, não se preocupe com a parte que falta.
‫Na verdade, é apenas um nome incorreto dentro da interface Docker.
‫Isso não significa que algo está errado ou está mal configurado. O que significa é que
‫realmente, essa imagem do mysql aqui é essa identificação de imagem. Eles são apenas camadas dentro desta imagem, e assim eles
‫As outras camadas da imagem não são imagens próprias. não necessariamente obterão sua própria ID de imagem lá.
‫Pessoalmente, acho que é um pouco enganador na interface dizer isso, mas foi assim que eles escreveram.
‫Então, agora que temos a sensação do comando da história para nos
‫mostrar o que uma imagem pode ser feita, vamos usar o comando de inspeção.
‫O que isso faz é isso nos dá todos os detalhes sobre a imagem.
‫Isto é basicamente os metadados. sobre essa imagem?
‫Lembre-se quando falamos sobre isso, uma imagem é composta por duas
‫partes, os binários e suas dependências, e depois os metadados Bem, inspecionar você retorna os metadados.
‫Além de apenas as informações básicas, como a identificação da imagem e suas tags, você
‫obtém todo o tipo de detalhes sobre como essa imagem espera ser executada.
‫Na verdade, tem a opção de expor essas duas portas dentro da imagem para que você saiba quando deseja iniciá-la, quais portas você
‫precisa abrir no seu host do Docker se desejar que ele aceite conexões.
‫Você pode realmente ver que as variáveis ​​de ambiente foram passadas,
‫incluindo a versão do Nginx que está sendo executada e o caminho. quando você iniciar a imagem por padrão.
‫Você pode realmente ver o comando que ele executará
‫Mais uma vez, muitas dessas coisas podem ser alteradas como fizemos anteriormente
‫com o comando de encaminhamento do contêiner do docker.
‫Mas estes estão nos mostrando todos os padrões e algumas outras informações
‫interessantes, como o autor, e aqui embaixo, que é uma arquitetura da AMD64, que
‫é praticamente o que todas as PCs e Macs comuns funcionam hoje em dia.
‫Nós realmente não temos muitas máquinas de 32 bits ao redor, então isso é apenas uma arquitetura padrão de Intel de 64 bits e é projetado
‫para ser executado no sistema operacional Linux.
‫Ok, uma revisão rápida.
‫Então nós aprendemos muito sobre imagens e como elas são inventadas, e
‫descobrimos que na verdade não são tão complexas. Realmente, são apenas uma série de mudanças no sistema de arquivos e metadados sobre essas mudanças.
‫Você aprendeu que cada camada tem sua própria identidade única como SHA.
‫Eles são armazenados apenas uma
‫vez em cada sistema, de modo que em cada daemon Docker, cada camada é representada apenas uma vez no sistema de arquivos.
‫Isso nos dá muitas
‫economias no espaço, bem como o tempo de transferência no envio de imagens de ida e volta entre os registros, como o Docker Hub. camada de mudanças em cima de uma imagem existente.
‫E, realmente, quando você inicia um recipiente, é apenas uma única
‫Então, na verdade, é geralmente muito pequeno. Aprendemos sobre a história e inspecionamos os
‫comandos e como eles podem nos ensinar o que está acontecendo dentro de uma imagem e como foi feita.
‫