Чистая и простая установка для создания образа 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, автоматически созданные для нескольких поддерживаемых архитектур:
Спасибо за чтение и наслаждайтесь!