Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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