O que é um manifesto de imagem do Docker?

Os manifestos do Docker descrevem as camadas dentro de uma imagem. Um manifesto permite a comparação exata de duas imagens, mesmo se elas tiverem tags diferentes atribuídas.
Os manifestos são expressos em JSON e contêm informações sobre as camadas e arquiteturas da imagem. O cliente Docker usa manifestos para descobrir se uma imagem é compatível com o dispositivo atual. Em seguida, usa as informações para determinar como iniciar novos contêineres.
O formato do manifesto
O esquema de manifesto está atualmente na versão 2. Um arquivo completo declarará sua versão do esquema e, em seguida, uma lista de entradas de manifesto disponíveis para a imagem. Cada entrada representa uma variante diferente da imagem, como x86 e ARM64.
Você pode visualizar o manifesto de qualquer imagem usando o comando docker manifest inspect. Isso funciona com imagens locais e imagens armazenadas em um registro remoto, como Docker Hub.
manifesto do docker inspecionar minha imagem: mais recente
O manifesto é uma lista de camadas incluídas na imagem. Você pode ver o hash do conteúdo da camada e seu tamanho geral.

Publicidade
Se você adicionar o sinalizador --verbose, obterá ainda mais informações sobre a imagem. Isso inclui a tag da imagem (no campo Ref), sua arquitetura e seu sistema operacional.
O Docker não carrega detalhes do manifesto de registros não seguros por padrão. Se você precisar usar um registro protegido incorretamente, adicione a sinalização --insecure aos comandos do manifesto do docker.
Manifestos e construções com múltiplos arcos
Historicamente, o Docker não era compatível com múltiplas arquiteturas de imagem. As imagens só podiam ser usadas em máquinas com a mesma arquitetura daquela em que foram construídas. Isso rapidamente provou ser limitante, pois o Docker encontrou mais uso em ambientes de servidor e em máquinas baseadas em ARM mais recentes.
Além de permitir a identificação única de imagens, os manifestos facilitam a construção de múltiplas arquiteturas. Se você inspecionar uma imagem que oferece suporte a várias arquiteturas, verá uma saída de manifesto sutilmente diferente:
inspeção de manifesto do docker php: mais recente
Executar o comando acima exibirá o manifesto da imagem oficial do PHP Docker. Você pode ver na captura de tela que várias opções de plataforma estão disponíveis, incluindo AMD64 e ARM. Truncamos a lista completa, que na verdade inclui oito arquiteturas diferentes com suporte.

Os manifestos permitem que os autores de imagens anunciem o suporte para múltiplas arquiteturas em uma tag de imagem. O cliente Docker seleciona a versão de imagem apropriada para sua plataforma, com base nas opções da lista. Espera-se que os autores agrupem apenas imagens que oferecem funcionalidade idêntica – não deve haver mudanças além da arquitetura ou sistema operacional de destino.
Publicidade
Cada arquitetura na lista se refere a outro manifesto por meio de seu campo de resumo. O manifesto referenciado será um arquivo regular de arquitetura única. O Docker combina a plataforma atual com o manifesto de arco único correto e carrega esse arquivo para determinar a lista final de camadas de imagem.
Você pode criar manualmente imagens com várias arquiteturas usando o comando docker manifest. Construa cada uma das imagens individuais e coloque-as em um registro. Em seguida, use o comando docker manifest create para combinar as imagens em um novo manifesto compartilhado sob uma única tag.
# em um docker de máquina AMD64 build -t my-image: amd64. docker push my-image: amd64 # em uma máquina ARM docker build -t my-image: arm. docker push my-image: arm # agora combina os manifestos docker manifest create my-image: latest \ --amend my-image: x64 --amend my-image: arm docker manifest push my-image: mais recente
Usar a criação de manifesto com a sinalização --amend permite mesclar vários manifestos independentes. O manifesto final é então enviado ao Docker Hub com a tag mais recente. Os usuários AMD64 e ARM poderão criar contêineres a partir desta imagem.
A montagem manual de imagens de múltiplos arcos não é obrigatória. Em vez disso, você pode usar o comando buildx para simplificar consideravelmente o processo.
docker buildx build --platform linux / amd64, linux / arm64 / v8 --tag my-image: mais recente
Este comando único resulta em uma imagem que funciona nas plataformas AMD64 e ARM64. Nos bastidores, ele ainda está produzindo uma lista de manifesto de vários arquivos, então é útil entender o funcionamento interno de como as imagens são vinculadas.
Anotando manifestos
O Docker permite que você substitua manualmente os dados do manifesto por meio de anotações. Os campos com suporte incluem informações de arquitetura e sistema operacional.
Publicidade
Use o comando docker manifest annotate para configurar anotações. Se você estiver anotando uma imagem de arquitetura única, forneça uma tag de imagem que faça referência a ela. Para imagens de vários arcos, você &’ precisará da tag geral da imagem e da tag do manifesto individual na lista de manifestos de vários arcos.
o manifesto do docker anota minha imagem: minha imagem mais recente: amd64 --os-version linux
Este comando marca a versão AMD64 de my-image: imagem mais recente como um contêiner baseado em Linux.
As anotações geralmente não precisam ser definidas manualmente. Eles geralmente são inferidos automaticamente do ambiente de construção. Você pode usar o comando annotate para adicionar campos ausentes ou alterar a configuração da imagem no futuro.
Resumo
Os manifestos do Docker descrevem as camadas de uma imagem e as arquiteturas que ela suporta. Um manifesto pode ser de arquitetura única, com suporte a uma plataforma específica, ou de arquitetura múltipla. No último caso, o arquivo contém uma lista de referências aos manifestos de arco único que incorpora.
A interação manual com manifestos deve ser rara, mas é possível com o grupo de comando docker manifest. Agora é mais comum automatizar compilações de vários arcos por meio do Buildx, que oferece uma experiência simplificada de montagem de manifesto.
Nenhum comentário