Создать образ докера X86 на ARM?
Я установил конвейер сборки на устройстве ARM, на котором создается приложение.NET Core. Последним шагом конвейера сборки будет сохранение скомпилированного приложения.NET Core в образе докера.
Можно ли сохранить приложение в образе среды выполнения.NET Core для X86?
Я надеюсь, что приложение.NET Core не заботится об архитектуре системы, пока платформа.NET развернута. И этому докеру не нужно запускать образ X86 для создания нового образа:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
COPY /my-application/build/ /app/
EXPOSE 80/tcp
WORKDIR /app
ENTRYPOINT ["dotnet", "app.dll"]
1 ответ
Если я правильно понимаю ваш вопрос, у вас есть машина ARM, на которой запущен конвейер, и вы хотите, чтобы она скомпилировала как ARM
и x86
образ?
Buildx - для создания кроссплатформенных образов
Что вы можете. Вы можете использовать buildx для управления кросс-компиляцией. Так что вперед и установите buildx.
После того, как вы установили buildx и настроили его. Вы можете просто запустить:
docker buildx build \
--platform linux/amd64,linux/386,linux/arm/v7 \
--push \
-t docker_user/docker_image:latest \
.
Начиная с базового образа, это будет работать для любой платформы, которую вы хотите. Вы можете изменить платформы, для которых хотите построить.
Что делает buildx, он эмулирует целевую платформу и выполняет все шаги в вашем обычном файле докеров, как если бы он работал на этой платформе. Buildx также помечает изображение,-t
параметр. И помещает его в реестр докеров по выбору, если вы укажете--push
.
На самом деле он подталкивает изображение для каждой платформы и файл манифеста, соединяющий эти изображения. Если другой докер-клиент хочет запустить образ, загружается манифест и выбирается необходимая платформа.
При компиляции докеров
Чтобы это сработало, вам нужно скомпилировать образ в конвейере докеров. В любом случае это рекомендуется, потому что его локальная компиляция и последующее копирование в контейнер приведет к получению разных образов в зависимости от установленного программного обеспечения на машине, создающей образ.
Следуйте инструкциям здесь, чтобы создать необходимый файл докеров.
Требования
Чтобы это работало, базовый образ также должен поддерживать несколько архитектур. Вы можете проверить это в реестре докеров. Так обстоит дело с образами ядра dotnet. Но если ваш базовый образ не поддерживает платформу, он, вероятно, не сработает. Однако перекомпиляция всего образа должна работать (пока базовый образ поддерживает эту платформу).
Посмотреть в действии
У вас также есть действие github для установки buildx в бегун github. Я использую это для нескольких своих библиотек, см. Этот файл рабочего процесса или результат здесь