
У меня есть контейнер, который построен поверхDebian:Джесси(есть некоторая компиляция openssl и некоторые пользовательские вещи). Я хочу, чтобы мой образ былзапускаемыйна разных архитектурах, например, на «обычных» операционных системах x86_64, а также на архитектурах на базе ARM, таких как RaspberryPI.
Я обнаружил, что когда я собираю образ на x86_64 и публикую его на HUB, он не работает, когда он вытягивается на устройство ARM и наоборот. Попытка сделать это приводит к некоторым ошибкам "не удается найти некоторые библиотеки" или "нераспознанные команды".
Вопрос в следующем: как собрать и опубликовать мой образ, чтобы он был доступен для других архитектур (и, что важно, как указать Docker автоматически выбирать подходящую архитектуру при загрузке)?
Я это вижуконтейнеры Debian «были перенесены» на разные архитектурыно я не могу найти никакой информации, как это сделать для моего изображения.
решение1
Мультиархитектурные образы в докере находятся в стадии активной разработки. Ключевой частью этого является docker manifest
cli, которыйвсе еще разрабатывается в этом 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
- Создавайте свой имидж на основе имиджа соответствующей архитектуры.
- например:
arm32v7/debian:jessie
вместоdebian:jessie
- например:
- Отметьте это как что-то другое.
- например:
fracz/fooapp:arm32-latest
,fracz/fooapp:raspi-latest
,fracz/fooapp:grandma-use-this-one
- например:
- Тот, кто хочет разместить ваше изображение, несет ответственность за выбор соответствующего тега.
- Хотя вы, вероятно, захотите разместить некоторую соответствующую информацию в своих документах/файлах readme и т. д.