Mais Uma Ferramenta para Containers - CRANE

Mais Uma Ferramenta para Containers - CRANE

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