Anatomia de uma Imagem Docker ๐ฌ
Uma imagem Docker é composta por várias camadas sobrepostas que formam um sistema de arquivos unificado. Vamos dissecar cada componente.
Visão Geral da Estrutura
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ IMAGE ANATOMY MATRIX โ
โ โ
โ โโโโโโโโโโโโโโโ โ
โ โ Config โ โ
โ โโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
โ โ Manifest โโโโโโถโ Metadata โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโโโโ โ
โ โ Layers โ โ
โ โโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
1. Arquivo de Configuração
O arquivo de configuração é um documento JSON que define o comportamento da imagem.
Componentes Principais
{
"config": {
"Hostname": "",
"Domainname": "",
"User": "",
"ExposedPorts": {
"80/tcp": {}
},
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"nginx",
"-g",
"daemon off;"
],
"WorkingDir": "/",
"Volumes": null
}
}
Elementos Essenciais
ExposedPorts
: Portas que o container expõe
Env
: Variáveis de ambiente padrão
Cmd
: Comando padrão executado no container
WorkingDir
: Diretório de trabalho inicial
User
: Usuário padrão do container
2. Manifesto da Imagem
O manifesto é um documento JSON que descreve a composição da imagem.
Estrutura do Manifesto
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 1234,
"digest": "sha256:a1b2c3..."
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 5678,
"digest": "sha256:d4e5f6..."
}
]
}
Elementos do Manifesto
schemaVersion
: Versão do formato do manifesto
config
: Referência ao arquivo de configuração
layers
: Lista de camadas que compõem a imagem
digest
: Hash SHA256 único da camada
3. Sistema de Camadas
As camadas são organizadas em uma estrutura de pilha, onde cada camada representa uma modificação no sistema de arquivos.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ LAYER STACK โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโ โ
โ โ App Layer โ <- Cรณdigo da aplicaรงรฃo โ
โ โโโโโโโโโโโโโโโโโโโโโโค โ
โ โ Dependencies โ <- Bibliotecas e deps โ
โ โโโโโโโโโโโโโโโโโโโโโโค โ
โ โ Runtime โ <- Ambiente de execuรงรฃo โ
โ โโโโโโโโโโโโโโโโโโโโโโค โ
โ โ Base OS โ <- Sistema operacional base โ
โ โโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Características das Camadas
Camada Read-Write
Criada ao iniciar um container
Específica para cada container
Contém todas as alterações em runtime
4. Sistema de Arquivos Union
O Docker utiliza um sistema de arquivos em camadas que combina todas as camadas em uma única visão.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ UNION FILESYSTEM โ
โ โ
โ /container โ
โ โโโ /bin โ โ
โ โโโ /etc โ โ
โ โโโ /lib โโ Uniรฃo de todas as camadas โ
โ โโโ /usr โ โ
โ โโโ /var โ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Funcionamento
Cada camada representa um conjunto de diferenças
As camadas são montadas sobrepostas
Arquivos mais recentes têm precedência
Deleções são marcadas com whiteouts
5. Comandos de Inspeção
Análise de Imagens
# Metadata da imagem
docker inspect nginx:latest
# Histรณrico de camadas
docker history nginx:latest
# Digest da imagem
docker images --digests nginx
# Exportar imagem
docker save nginx:latest > nginx.tar
Waifu Tips ๐ก
15 abril 2025