Como publicar imagens Docker construídas para diferentes arquiteturas no Docker HUB?

Como publicar imagens Docker construídas para diferentes arquiteturas no Docker HUB?

Eu tenho um contêiner construído em cima dedebian: jessie(há alguma compilação do openssl e algumas coisas personalizadas). Eu quero que minha imagem sejalançávelem diferentes arquiteturas, por exemplo, em sistemas operacionais x86_64 "normais", mas também em arquiteturas baseadas em ARM, como RaspberryPI.

Descobri que quando construo a imagem em x86_64 e a publico no HUB, ela não funciona quando é puxada em um dispositivo ARM e vice-versa. Tentar fazer isso resulta em alguns erros “não é possível encontrar algumas bibliotecas” ou “comandos não reconhecidos”.

A questão é: como construir e publicar minha imagem para que fique disponível para outras arquiteturas (e, o que é importante - como dizer ao docker para selecionar automaticamente a imagem apropriada durante o download)?

Eu posso ver issoos contêineres debian "foram portados" para diferentes arquiteturasmas não consigo encontrar nenhuma informação sobre como fazer isso para minha imagem.

Responder1

Imagens multi-arch no docker estão em desenvolvimento ativo. A peça chave disso é um docker manifestcli que éainda sendo desenvolvido neste PR.

Primeiro você precisa criar suas imagens para diferentes arquiteturas, que você sempre pode executar diretamente no sistema de arquitetura apropriado. Uma imagem multiarquitetura é uma “lista manifesta” que apontará para essas imagens. O cliente docker extrairá a imagem apropriada dessa lista quando você extrair a imagem multi-arch.

Até que o PR acima seja integrado ao Docker, você pode usar oferramenta de manifestoque permite definir a lista de manifestos e enviá-la ao servidor de registro. Isso permite um arquivo yaml de entrada como o exemplo abaixo:

image: myprivreg:5000/someimage:latest
manifests:
  -
    image: myprivreg:5000/someimage:ppc64le
    platform:
      architecture: ppc64le
      os: linux
  -
    image: myprivreg:5000/someimage:amd64
    platform:
      architecture: amd64
      features:
        - sse
      os: linux

Em seguida, execute o seguinte para pegar o arquivo yaml acima e convertê-lo em uma lista de manifesto que é enviada para o registro definido:

./manifest-tool push from-spec someimage.yaml

Responder2

  1. Construa a sua imagem contra a imagem da arquitetura relevante.
    • ex: arm32v7/debian:jessieem vez dedebian:jessie
  2. Identifique-o como outra coisa.
    • por exemplo: fracz/fooapp:arm32-latest, fracz/fooapp:raspi-latest,fracz/fooapp:grandma-use-this-one
  3. Quem quiser rodar sua imagem é responsável por selecionar a tag apropriada.
    • Embora você provavelmente queira colocar algumas informações relevantes em seus documentos/readmes/etc

informação relacionada