Как публиковать образы Docker, созданные для разных архитектур, в Docker HUB?

Как публиковать образы Docker, созданные для разных архитектур, в Docker HUB?

У меня есть контейнер, который построен поверхDebian:Джесси(есть некоторая компиляция openssl и некоторые пользовательские вещи). Я хочу, чтобы мой образ былзапускаемыйна разных архитектурах, например, на «обычных» операционных системах x86_64, а также на архитектурах на базе ARM, таких как RaspberryPI.

Я обнаружил, что когда я собираю образ на x86_64 и публикую его на HUB, он не работает, когда он вытягивается на устройство ARM и наоборот. Попытка сделать это приводит к некоторым ошибкам "не удается найти некоторые библиотеки" или "нераспознанные команды".

Вопрос в следующем: как собрать и опубликовать мой образ, чтобы он был доступен для других архитектур (и, что важно, как указать Docker автоматически выбирать подходящую архитектуру при загрузке)?

Я это вижуконтейнеры Debian «были перенесены» на разные архитектурыно я не могу найти никакой информации, как это сделать для моего изображения.

решение1

Мультиархитектурные образы в докере находятся в стадии активной разработки. Ключевой частью этого является docker manifestcli, которыйвсе еще разрабатывается в этом PR.

Сначала вам нужно создать образы для разных архитектур, которые вы всегда можете запустить напрямую в системе соответствующей архитектуры. Образ с несколькими архитектурами — это «список манифестов», который будет указывать на эти образы. Затем клиент Docker извлечет соответствующий образ из этого списка, когда вы извлечете образ с несколькими архитектурами.

Пока вышеуказанный PR не будет интегрирован в Docker, вы можете использоватьманифест-инструментчто позволяет вам определить список манифестов и отправить его на сервер реестра. Это позволяет использовать входной файл yaml, как в примере ниже:

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

Затем вы запускаете следующую команду, чтобы взять указанный выше файл yaml и преобразовать его в список манифестов, который помещается в определенный реестр:

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

решение2

  1. Создавайте свой имидж на основе имиджа соответствующей архитектуры.
    • например: arm32v7/debian:jessieвместоdebian:jessie
  2. Отметьте это как что-то другое.
    • например: fracz/fooapp:arm32-latest, fracz/fooapp:raspi-latest,fracz/fooapp:grandma-use-this-one
  3. Тот, кто хочет разместить ваше изображение, несет ответственность за выбор соответствующего тега.
    • Хотя вы, вероятно, захотите разместить некоторую соответствующую информацию в своих документах/файлах readme и т. д.

Связанный контент