Чистая и простая установка для создания образа Docker для нескольких версий базовых образов и платформ.

С выпуском Apple M1 или Apple Silicon потребность в изображениях arm64 только возрастет. Кроме того, в запуске контейнеров Docker и целых кластеров Kubernetes на Raspberrys или других микрокомпьютерах arm64 нет ничего нового.

Например, вы можете запустить свой собственный сервер Minecraft на Raspberry Pi:



Настройте параллельную многоархивную сборку с помощью CircleCI

Это краткое руководство по созданию образа Docker с несколькими версиями для разных архитектур или платформ (наиболее важно AMD 64 и ARM 64).

Поскольку в моей учетной записи Travis-CI с открытым исходным кодом закончились кредиты после того, как они поменяли свою модель, и я все равно хотел попробовать разные инструменты CI, я наткнулся на CircleCI. После начального обучения он становится довольно чистым и простым в настройке.

1. Настройте изображение для нескольких версий

Если вы хотите создать свой образ для нескольких версий базового образа, скажем, alpine, 1.9-alpine и 1.7-alpine (или focal, bionic и latest в мире Ubuntu), вы можете просто добавить ARG в файл Docker:

ARG ALPINE_VERSION=alpine
FROM influxdb:$ALPINE_VERSION

Теперь вам просто нужно передать аргумент сборки при сборке:

ALPINE_VERSION=1.9-alpine
docker build --build-arg ALPINE_VERSION=$ALPINE_VERSION -t $REPO/$IMAGE_NAME:$TAG .

Теперь вы можете настроить задания параллельной сборки в .circleci/config.yml:

2. Проверьте исходный код для архитектур.

Проверьте базовый образ, который вы используете для нескольких архитектур. Вы можете создавать только то, что поддерживается вашими тегами базового изображения.

Официальный образ influxdb в этом примере поддерживает linux/amd64 и linux/arm64/v8, поэтому вам нужно создавать именно для этих платформ.

PLATFORMS=linux/amd64,linux/arm64/v8


3. Построить конвейер

Для образа Docker я использовал docker:dind, хотя не уверен, что он нужен, поскольку механизм сборки удален. Также вы можете выбрать конкретную версию удаленного движка Docker:

  docker:
    - image: docker:dind
  steps:
    - setup_remote_docker:
        version: 20.10.2

Установить docker buildx

Вдохновленный сферой sensu/docker-buildx, я установил buildx как плагин и включил экспериментальные функции с помощью переменной DOCKER_CLI_EXPERIMENTAL.



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



Настроить Docker buildx

Чтобы выполнить сборку для других архитектур, вам необходимо настроить контекст и конструктор:

Строить и толкать

Наконец, вы можете просто строить и нажимать вот так:

Только недавнее изображение может быть хорошим

Последнее, что осталось сделать, - это обеспечить регулярное автоматическое построение образа. Мы будем проинформированы, когда это произойдет (через уведомления конвейера), и сможем исправить это. Пользователи нашего образа могут рассчитывать на последнюю версию со всеми необходимыми обновлениями и исправлениями безопасности.

Просто добавьте еще один рабочий процесс, содержащий конфигурацию triggers и schedule:

Посмотреть в действии

Вот мои образы InfluxDB и airprint-bridge, автоматически созданные для нескольких поддерживаемых архитектур:





Спасибо за чтение и наслаждайтесь!