SlideShare uma empresa Scribd logo
1 de 24
Explorando as camadas
para construção de
containers Docker
Roberto Alves
Lead Software Engineer
Roberto Alves
Lead Software Engineer at Altran
$ short bio
● Desenvolvedor desde os 14 anos
● Palestrante
● Entusiasta Open Source
● Colunista no iMasters
● AWS Community Builder
O que são camadas (layers)?
Em essência, são arquivos geradas a partir
da execução de algum comando (Dockerfile).
Uma imagem Docker consiste em
várias camadas.
O que são camadas (layers)?
Apenas os comandos FROM, RUN,
COPY e ADD criam camada.
Os demais comandos criam
camadas intermediárias que não
influenciam o tamanho da imagem final.
Dockerfile
Dockerfile
O que acontece nesse processo?
Camada vs Container?
No fase do Build é executado um container
intermediário.
Quando a fase atual do Build é concluída, o
container intermediário é removido.
Camada vs Container?
Além disso, uma Camada é apenas de leitura.
Existe uma diferença entre a camada anterior
e a atual.
N topo das camadas, está a camada gravável,
chamada de camada de container (atual).
O que acontece nesse processo?
O que acontece nesse processo?
Recriando
a imagem
do Docker
Recriando a imagem Docker
Recriando a imagem Docker
E quanto ao tamanho?
E quanto ao tamanho?
E quanto ao tamanho?
Nossos imagens Docker são armazenadas em
/var/lib/docker/overlay2
E quanto ao tamanho?
Entretanto, a nossa imagem base usa apenas
987MB
Nosso arquivo JAR contém 17,4MB
Temos três imagens então 2 pendentes e uma
imagem definitiva
E quanto ao tamanho?
987MB + 3 * 17,4MB = 1.040MB
E quanto ao tamanho?
Removendo imagens desnecessárias
Removendo imagens desnecessárias
Removendo imagens desnecessárias
Thank You
Roberto Alves

Mais conteúdo relacionado

Mais procurados

Verdades que não querem te contar sobre Docker
Verdades que não querem te contar sobre DockerVerdades que não querem te contar sobre Docker
Verdades que não querem te contar sobre DockerLuís Bianchin
 
Troubleshooting docker
Troubleshooting dockerTroubleshooting docker
Troubleshooting dockerRafael Gomes
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao dockerBenicio Ávila
 
Treinamento Docker Básico
Treinamento Docker BásicoTreinamento Docker Básico
Treinamento Docker BásicoAndré Justi
 
Docker: Introdução à Conteinerização de aplicações - EXPOTEC
Docker: Introdução à Conteinerização de aplicações - EXPOTECDocker: Introdução à Conteinerização de aplicações - EXPOTEC
Docker: Introdução à Conteinerização de aplicações - EXPOTECMarcel Cattaneo
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...Renato Groff
 
7º Meetup Docker Docker BH Dockerizando No Ambiente Windows
7º Meetup Docker Docker BH Dockerizando No Ambiente Windows7º Meetup Docker Docker BH Dockerizando No Ambiente Windows
7º Meetup Docker Docker BH Dockerizando No Ambiente WindowsEdson Marques Teixeira
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação DockerAndré Justi
 
O poder do Docker (7 Masters)
O poder do Docker (7 Masters)O poder do Docker (7 Masters)
O poder do Docker (7 Masters)Wellington Silva
 
Docker: Introdução à Conteinerização de Apps e Nuvem.
Docker: Introdução à Conteinerização de Apps e Nuvem.Docker: Introdução à Conteinerização de Apps e Nuvem.
Docker: Introdução à Conteinerização de Apps e Nuvem.Marcel Cattaneo
 

Mais procurados (20)

Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 
Verdades que não querem te contar sobre Docker
Verdades que não querem te contar sobre DockerVerdades que não querem te contar sobre Docker
Verdades que não querem te contar sobre Docker
 
Troubleshooting docker
Troubleshooting dockerTroubleshooting docker
Troubleshooting docker
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 
Treinamento Docker Básico
Treinamento Docker BásicoTreinamento Docker Básico
Treinamento Docker Básico
 
.Net Core + Docker
.Net Core +  Docker.Net Core +  Docker
.Net Core + Docker
 
Docker: Introdução à Conteinerização de aplicações - EXPOTEC
Docker: Introdução à Conteinerização de aplicações - EXPOTECDocker: Introdução à Conteinerização de aplicações - EXPOTEC
Docker: Introdução à Conteinerização de aplicações - EXPOTEC
 
Docker: uma visão geral
Docker: uma visão geralDocker: uma visão geral
Docker: uma visão geral
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
 
Workshop Docker
Workshop DockerWorkshop Docker
Workshop Docker
 
7º Meetup Docker Docker BH Dockerizando No Ambiente Windows
7º Meetup Docker Docker BH Dockerizando No Ambiente Windows7º Meetup Docker Docker BH Dockerizando No Ambiente Windows
7º Meetup Docker Docker BH Dockerizando No Ambiente Windows
 
Bem vindo ao Docker
Bem vindo ao DockerBem vindo ao Docker
Bem vindo ao Docker
 
Apresentação docker
Apresentação dockerApresentação docker
Apresentação docker
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação Docker
 
Docker
DockerDocker
Docker
 
O poder do Docker (7 Masters)
O poder do Docker (7 Masters)O poder do Docker (7 Masters)
O poder do Docker (7 Masters)
 
Docker Itix
Docker ItixDocker Itix
Docker Itix
 
Apresentacao docker
Apresentacao dockerApresentacao docker
Apresentacao docker
 
Docker: Introdução à Conteinerização de Apps e Nuvem.
Docker: Introdução à Conteinerização de Apps e Nuvem.Docker: Introdução à Conteinerização de Apps e Nuvem.
Docker: Introdução à Conteinerização de Apps e Nuvem.
 
Docker para iniciantes
Docker para iniciantesDocker para iniciantes
Docker para iniciantes
 

Semelhante a Explorando as camadas para construção de containers Docker

Transportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com DockerTransportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com DockerAécio Pires
 
Introdução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfIntrodução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfdadalt1
 
Docker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogDocker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogCesar Augusto Nogueira
 
Docker - Essa baleia vai te conquistar
Docker - Essa baleia vai te conquistarDocker - Essa baleia vai te conquistar
Docker - Essa baleia vai te conquistarVinícius Feitosa
 
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDesenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDextra Sistemas / Etec Itu
 
Orchestrando na linha
Orchestrando na linhaOrchestrando na linha
Orchestrando na linhamatheuscmpm
 
JavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorldJavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorldThiago Soares
 
DevOps na prática - Savanna Denega
DevOps na prática - Savanna DenegaDevOps na prática - Savanna Denega
DevOps na prática - Savanna DenegaSavanna Denega
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes Rhuan Karlus Silva
 

Semelhante a Explorando as camadas para construção de containers Docker (20)

Docker
DockerDocker
Docker
 
Docker meetup
Docker meetupDocker meetup
Docker meetup
 
Oficina docker
Oficina dockerOficina docker
Oficina docker
 
Transportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com DockerTransportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com Docker
 
Introdução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfIntrodução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdf
 
Conheça o Docker
Conheça o DockerConheça o Docker
Conheça o Docker
 
Docker e suas tecnologias
Docker e suas tecnologiasDocker e suas tecnologias
Docker e suas tecnologias
 
Docker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogDocker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnog
 
Docker - Essa baleia vai te conquistar
Docker - Essa baleia vai te conquistarDocker - Essa baleia vai te conquistar
Docker - Essa baleia vai te conquistar
 
Freedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, dockerFreedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, docker
 
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDesenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
 
Orchestrando na linha
Orchestrando na linhaOrchestrando na linha
Orchestrando na linha
 
JavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorldJavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorld
 
O que é Docker?
O que é Docker?O que é Docker?
O que é Docker?
 
Usando Docker no desenvolvimento .NET
Usando Docker no desenvolvimento .NETUsando Docker no desenvolvimento .NET
Usando Docker no desenvolvimento .NET
 
Docker fundamentos
Docker fundamentosDocker fundamentos
Docker fundamentos
 
Iniciando com docker
Iniciando com dockerIniciando com docker
Iniciando com docker
 
Iniciando com docker
Iniciando com dockerIniciando com docker
Iniciando com docker
 
DevOps na prática - Savanna Denega
DevOps na prática - Savanna DenegaDevOps na prática - Savanna Denega
DevOps na prática - Savanna Denega
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes
 

Mais de Roberto Alves

Descomplicando Service Mesh
Descomplicando Service MeshDescomplicando Service Mesh
Descomplicando Service MeshRoberto Alves
 
LGPD aplicada na área da Saúde - TDC Transformation 2021
LGPD aplicada na área da Saúde - TDC Transformation 2021LGPD aplicada na área da Saúde - TDC Transformation 2021
LGPD aplicada na área da Saúde - TDC Transformation 2021Roberto Alves
 
Avançando em Queries no Elasticsearch - TDC Sala Elastic
Avançando em Queries no Elasticsearch - TDC Sala ElasticAvançando em Queries no Elasticsearch - TDC Sala Elastic
Avançando em Queries no Elasticsearch - TDC Sala ElasticRoberto Alves
 
Descomplicando Queries com Elasticsearch
Descomplicando Queries com ElasticsearchDescomplicando Queries com Elasticsearch
Descomplicando Queries com ElasticsearchRoberto Alves
 
Blue/Green Deployment Pattern - DevOpsDays 2020
Blue/Green Deployment Pattern - DevOpsDays 2020Blue/Green Deployment Pattern - DevOpsDays 2020
Blue/Green Deployment Pattern - DevOpsDays 2020Roberto Alves
 
Teste de carga com Node.js - Americana Tech Conf 2020
Teste de carga com Node.js - Americana Tech Conf 2020Teste de carga com Node.js - Americana Tech Conf 2020
Teste de carga com Node.js - Americana Tech Conf 2020Roberto Alves
 
Como o Einstein se preparou para sustentar o aumento exponencial de uso da Te...
Como o Einstein se preparou para sustentar o aumento exponencial de uso da Te...Como o Einstein se preparou para sustentar o aumento exponencial de uso da Te...
Como o Einstein se preparou para sustentar o aumento exponencial de uso da Te...Roberto Alves
 
LocalStack - TDC Porto Alegre 2020
LocalStack - TDC Porto Alegre 2020LocalStack - TDC Porto Alegre 2020
LocalStack - TDC Porto Alegre 2020Roberto Alves
 
Node.js Streams - TDC SP
Node.js Streams - TDC SPNode.js Streams - TDC SP
Node.js Streams - TDC SPRoberto Alves
 
Explorando o mundo serverless
Explorando o mundo serverlessExplorando o mundo serverless
Explorando o mundo serverlessRoberto Alves
 

Mais de Roberto Alves (11)

Descomplicando Service Mesh
Descomplicando Service MeshDescomplicando Service Mesh
Descomplicando Service Mesh
 
LGPD aplicada na área da Saúde - TDC Transformation 2021
LGPD aplicada na área da Saúde - TDC Transformation 2021LGPD aplicada na área da Saúde - TDC Transformation 2021
LGPD aplicada na área da Saúde - TDC Transformation 2021
 
Avançando em Queries no Elasticsearch - TDC Sala Elastic
Avançando em Queries no Elasticsearch - TDC Sala ElasticAvançando em Queries no Elasticsearch - TDC Sala Elastic
Avançando em Queries no Elasticsearch - TDC Sala Elastic
 
Descomplicando Queries com Elasticsearch
Descomplicando Queries com ElasticsearchDescomplicando Queries com Elasticsearch
Descomplicando Queries com Elasticsearch
 
Blue/Green Deployment Pattern - DevOpsDays 2020
Blue/Green Deployment Pattern - DevOpsDays 2020Blue/Green Deployment Pattern - DevOpsDays 2020
Blue/Green Deployment Pattern - DevOpsDays 2020
 
Teste de carga com Node.js - Americana Tech Conf 2020
Teste de carga com Node.js - Americana Tech Conf 2020Teste de carga com Node.js - Americana Tech Conf 2020
Teste de carga com Node.js - Americana Tech Conf 2020
 
Como o Einstein se preparou para sustentar o aumento exponencial de uso da Te...
Como o Einstein se preparou para sustentar o aumento exponencial de uso da Te...Como o Einstein se preparou para sustentar o aumento exponencial de uso da Te...
Como o Einstein se preparou para sustentar o aumento exponencial de uso da Te...
 
Serverless week
Serverless weekServerless week
Serverless week
 
LocalStack - TDC Porto Alegre 2020
LocalStack - TDC Porto Alegre 2020LocalStack - TDC Porto Alegre 2020
LocalStack - TDC Porto Alegre 2020
 
Node.js Streams - TDC SP
Node.js Streams - TDC SPNode.js Streams - TDC SP
Node.js Streams - TDC SP
 
Explorando o mundo serverless
Explorando o mundo serverlessExplorando o mundo serverless
Explorando o mundo serverless
 

Explorando as camadas para construção de containers Docker

Notas do Editor

  1. Vamos dar uma olhada em um exemplo. Usaremos um aplicativo Spring Boot MVC onde o build do Maven cria uma imagem Docker.  Esse exemplo está disponível no Github. Usamos a branch ”feature/dockerbenchsecurity”, que é uma versão mais segura da branch master/main.
  2. Para ficar mais breve foi removido as fases do Pull na imagem openjdk:10-jdk
  3. Podemos notar que camadas são criadas e a maioria é removida O curioso é que a mensagem diz que o container intermediário é removido ao invés de camada intermediária
  4. E como mencionado anteriormente, apenas os comandos específicos criaram uma nova camada
  5. Agora que já temos um container criado podemos dar uma olhada em nossas imagens Docker
  6. Com o ID da nossa imagem criada – mykubernetesplanet, podemos ver o histórico da imagem gerada. Podemos confirmar o que falamos há pouco, os container intermediários possuem 0B, exatamente como esperado. Apenas os comandos RUN e COPY do nosso Dockerfile influenciaram no tamanho da nossa imagem As camadas da nossa imagem base (openjdk) está listada como ausente – o que significa que foram construídos em um sistema diferente e não estão disponível localmente.
  7. Agora que sabemos que temos camadas localmente armazenadas da imagem gerada, podemos nos perguntar o que acontece por debaixo dos panos quando recriamos o Docker sem alterações? De início podemos notar que as camadas são idênticas à nossa build anterior. Até mesmo os IDs da camada são os mesmos (no log, notamos que as camadas são retiradas do cache) Na etapa 7, uma nova camada é criada com um novo ID Devido o arquivo JAR, o Docker interpreta isso como um novo arquivo e, portanto, uma nova camada é criada  Na etapa 8, uma nova camada também é criada, porque ela é construída sobre a nova camada.
  8. A nossa imagem recebeu um novo ID devido ao BUILD recente O repositório e a tag de nosso antigo ID de imagem são removidos e ficam <none> -> isso é chamado de imagem pendente
  9. A imagem recém-criada possui duas camadas superiores as quais são novas, refletindo exatamente o log do build do container Se realizarmos uma alteração no código fonte da aplicação, teria o mesmo efeito sobre a construção da imagem
  10. Temos uma imagem pendente Mas o que isso realmente significa para o armazenamento?  Primeiro, precisamos saber onde os dados de nossas imagens estão armazenados
  11. Assim podemos dar uma olhada na nossa imagem Docker
  12. A diferença se deve à existência de imagens intermediárias Eles podem ser revelados da seguinte forma
  13. Primeiro passo é listar as suas imagens para sabermos se temos realmente imagens desnecessárias
  14. docker rmi + o id do container ou docker image prune
  15. Agora que as imagens pendentes foram removidos, podemos consultar o armazenamento no diretório overlay2 novamente Nós nos livramos de 33 MB (somando as imagens pendentes e as imagens intermediárias) Parece que não é muito, mas quando trabalhamos com Docker diariamente, isso pode crescer significativamente com o tempo