Table of contents
- Introdução
- Exemplos de aplicação
- Listar todas as tags de um repositório
- Logar em um registry
- Inspecionar o config de uma imagem
- Inspecionar o manifesto de uma imagem
- Exportar o sistema de arquivo do container como um tarball
- Baixar uma imagem e salvá-la localmente em um tarball
- Listar arquivos de uma imagem
- Extrair um arquivo de uma imagem
- Crie uma image a partir de um diretório
- Verificar a diferença de configs de duas imagens
- Verificar a diferença de manifestos de duas imagens
- Verificar a diferença do sistema de arquivo
- Identificar o tamanho da imagem
Introdução
Estava fazendo alguns estudos sobre as ferramentas do Sigstore e acabei me deparando com uma menção a uma ferramenta para manipulação de imagens e registries que eu não conhecia, de nome Crane. Identifiquei logo de cara que havia alguns recursos interessantes que poderiam auxiliar na inspeção e manipulação de imagens. Baixei a ferramenta e comecei os testes. Para o meu caso, que uso o Manjaro, bastou rodar um comando para completar a instalação.
pacman -S crane
Segue abaixo a lista de comandos que achei mais interessante para o meu uso. Para ver todos os subcomandos, basta rodar crane -h
.
Exemplos de aplicação
Referência para a lista de comandos:
Listar todas as tags de um repositório
crane ls docker.io/library/nginx
Logar em um registry
crane auth login reg.example.com -u AzureDiamond -p hunter2
Inspecionar o config de uma imagem
crane config ubuntu:22.04 | jq
Inspecionar o manifesto de uma imagem
crane manifest ubuntu:22.04 | jq
Exportar o sistema de arquivo do container como um tarball
crane export ubuntu ubuntu.tar
Baixar uma imagem e salvá-la localmente em um tarball
crane pull ubuntu:22.10 ubuntu2210.tar
Listar arquivos de uma imagem
crane export ubuntu - | tar -tvf - | less
Extrair um arquivo de uma imagem
crane export ubuntu - | tar -Oxf - etc/passwd
Observação: certifique de remover a "/" do início do caminho do arquivo.
Crie uma image a partir de um diretório
crane append -f <(tar -f - -c some-dir/) -t ${IMAGE}
Por padrão, isso produz uma imagem com uma camada contendo o conteúdo o diretório. Adicione -b ${BASE_IMAGE}
para anexar a camada a uma imagem base.
Esse exemplo carece de validação. Pelos testes que fiz localmente, ele tenta fazer a modificação remotamente no registry.
Verificar a diferença de configs de duas imagens
diff <(crane config busybox:1.32 | jq) <(crane config busybox:1.33 | jq)
Verificar a diferença de manifestos de duas imagens
diff <(crane manifest busybox:1.32 | jq) <(crane manifest busybox:1.33 | jq)
Verificar a diferença do sistema de arquivo
diff \
<(crane export gcr.io/kaniko-project/executor:v1.6.0-debug - | tar -tvf - | sort) \
<(crane export gcr.io/kaniko-project/executor:v1.7.0-debug - | tar -tvf - | sort)
Identificar o tamanho da imagem
crane manifest gcr.io/buildpacks/builder:v1 | jq '.config.size + ([.layers[].size] | add)' | numfmt --to=iec