У меня есть контейнер, который построен на дебиан: Джесси (есть компиляция 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
arm32v7/debian:jessie
вместо того debian:jessie
fracz/fooapp:arm32-latest
, fracz/fooapp:raspi-latest
, fracz/fooapp:grandma-use-this-one