feat: Добавлена поддержка multi-arch сборки и автоматическое извлечение тегов
- Добавлена поддержка multi-arch сборки (amd64 и arm64) для всех Docker образов - Реализовано автоматическое извлечение тегов из базовых образов - Добавлены вспомогательные функции: * docker-setup-builder - настройка multi-arch builder * docker-get-base-tag - извлечение тегов из базовых образов * docker-build-image - сборка одного образа с multi-arch - Обновлена сборка ansible-controller с поддержкой multi-arch - Исправлен путь к requirements.yml для ansible-controller - Обновлена справка с информацией о новых возможностях - Все образы теперь автоматически отправляются в Docker Hub при сборке - Поддержка платформ: linux/amd64,linux/arm64 Новые возможности: - Автоматическое извлечение тегов из базовых образов - Multi-arch сборка для всех образов - Автоматическая отправка в Docker Hub - Улучшенная справка с подробным описанием функций
This commit is contained in:
109
Makefile
109
Makefile
@@ -33,6 +33,13 @@ DOCKER_REGISTRY ?= inecs
|
||||
DOCKER_VERSION ?= latest
|
||||
DOCKER_IMAGES := ansible-controller alt-linux astra-linux redos rhel centos alma rocky
|
||||
|
||||
# Multi-arch поддержка
|
||||
DOCKER_PLATFORMS ?= linux/amd64,linux/arm64
|
||||
DOCKER_BUILDX_BUILDER ?= multiarch-builder
|
||||
|
||||
# Базовые образы и их теги
|
||||
BASE_IMAGES := altlinux/p9 astralinux/astra-1.7 redos/redos:9 registry.access.redhat.com/ubi8/ubi quay.io/centos/centos:stream9 almalinux:8 rockylinux:8
|
||||
|
||||
.PHONY: role vault git docker presets controller help
|
||||
|
||||
# =============================================================================
|
||||
@@ -366,10 +373,14 @@ docker:
|
||||
echo " make docker build - сборка образов"; \
|
||||
echo " make docker push - отправка в Docker Hub";; \
|
||||
build) \
|
||||
echo "🐳 Сборка Docker образов..."; \
|
||||
echo "🐳 Сборка Docker образов (multi-arch)..."; \
|
||||
echo "📋 Платформы: $(DOCKER_PLATFORMS)"; \
|
||||
echo "📋 Builder: $(DOCKER_BUILDX_BUILDER)"; \
|
||||
echo ""; \
|
||||
$(MAKE) docker-setup-builder; \
|
||||
for image in $(DOCKER_IMAGES); do \
|
||||
echo "🔨 Сборка $(DOCKER_REGISTRY)/$$image:$(DOCKER_VERSION)"; \
|
||||
(cd dockerfiles/$$image && docker build -t $(DOCKER_REGISTRY)/$$image:$(DOCKER_VERSION) .); \
|
||||
$(MAKE) docker-build-image IMAGE=$$image; \
|
||||
done; \
|
||||
echo "✅ Образы собраны";; \
|
||||
push) \
|
||||
@@ -436,10 +447,12 @@ docker:
|
||||
echo " 💡 Показывает: registry, version, список образов"; \
|
||||
echo " 💡 Рекомендует: docker login перед работой"; \
|
||||
echo ""; \
|
||||
echo " 🐳 make docker build - собрать все Docker образы"; \
|
||||
echo " 🐳 make docker build - собрать все Docker образы (multi-arch)"; \
|
||||
echo " 💡 Собирает: ansible-controller, alt-linux, astra-linux, redos"; \
|
||||
echo " 💡 Собирает: rhel, centos, alma, rocky"; \
|
||||
echo " 💡 Тегирует: inecs/образ:latest"; \
|
||||
echo " 💡 Платформы: $(DOCKER_PLATFORMS)"; \
|
||||
echo " 💡 Тегирует: inecs/образ:<tag> (автоматически извлекает теги)"; \
|
||||
echo " 💡 Отправляет: автоматически в Docker Hub"; \
|
||||
echo ""; \
|
||||
echo " 📤 make docker push - отправить образы в Docker Hub"; \
|
||||
echo " 💡 Требует: docker login"; \
|
||||
@@ -466,15 +479,93 @@ docker:
|
||||
echo " ⚠️ ТРЕБУЕТ: подтверждение пользователя";; \
|
||||
esac
|
||||
|
||||
# =============================================================================
|
||||
# ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ ДЛЯ DOCKER
|
||||
# =============================================================================
|
||||
|
||||
# Настройка multi-arch builder
|
||||
docker-setup-builder:
|
||||
@echo "🔧 Настройка multi-arch builder..."; \
|
||||
if ! docker buildx ls | grep -q $(DOCKER_BUILDX_BUILDER); then \
|
||||
echo "📦 Создание builder $(DOCKER_BUILDX_BUILDER)..."; \
|
||||
docker buildx create --name $(DOCKER_BUILDX_BUILDER) --driver docker-container --use; \
|
||||
else \
|
||||
echo "✅ Builder $(DOCKER_BUILDX_BUILDER) уже существует"; \
|
||||
docker buildx use $(DOCKER_BUILDX_BUILDER); \
|
||||
fi
|
||||
|
||||
# Извлечение тега из базового образа
|
||||
docker-get-base-tag:
|
||||
@if [ -z "$(IMAGE)" ]; then \
|
||||
echo "❌ Ошибка: IMAGE не указан"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
case "$(IMAGE)" in \
|
||||
alt-linux) \
|
||||
BASE_IMAGE="altlinux/p9"; \
|
||||
TAG=$$(docker inspect --format='{{index .RepoDigests 0}}' $$BASE_IMAGE 2>/dev/null | cut -d'@' -f1 | cut -d':' -f2 || echo "latest");; \
|
||||
astra-linux) \
|
||||
BASE_IMAGE="astralinux/astra-1.7"; \
|
||||
TAG=$$(docker inspect --format='{{index .RepoDigests 0}}' $$BASE_IMAGE 2>/dev/null | cut -d'@' -f1 | cut -d':' -f2 || echo "latest");; \
|
||||
redos) \
|
||||
BASE_IMAGE="redos/redos:9"; \
|
||||
TAG=$$(docker inspect --format='{{index .RepoDigests 0}}' $$BASE_IMAGE 2>/dev/null | cut -d'@' -f1 | cut -d':' -f2 || echo "latest");; \
|
||||
rhel) \
|
||||
BASE_IMAGE="registry.access.redhat.com/ubi8/ubi"; \
|
||||
TAG=$$(docker inspect --format='{{index .RepoDigests 0}}' $$BASE_IMAGE 2>/dev/null | cut -d'@' -f1 | cut -d':' -f2 || echo "latest");; \
|
||||
centos) \
|
||||
BASE_IMAGE="quay.io/centos/centos:stream9"; \
|
||||
TAG=$$(docker inspect --format='{{index .RepoDigests 0}}' $$BASE_IMAGE 2>/dev/null | cut -d'@' -f1 | cut -d':' -f2 || echo "latest");; \
|
||||
alma) \
|
||||
BASE_IMAGE="almalinux:8"; \
|
||||
TAG=$$(docker inspect --format='{{index .RepoDigests 0}}' $$BASE_IMAGE 2>/dev/null | cut -d'@' -f1 | cut -d':' -f2 || echo "latest");; \
|
||||
rocky) \
|
||||
BASE_IMAGE="rockylinux:8"; \
|
||||
TAG=$$(docker inspect --format='{{index .RepoDigests 0}}' $$BASE_IMAGE 2>/dev/null | cut -d'@' -f1 | cut -d':' -f2 || echo "latest");; \
|
||||
ansible-controller) \
|
||||
TAG="latest";; \
|
||||
*) \
|
||||
echo "❌ Неизвестный образ: $(IMAGE)"; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
echo "📋 Образ: $(IMAGE)"; \
|
||||
echo "📋 Базовый образ: $$BASE_IMAGE"; \
|
||||
echo "📋 Тег: $$TAG"; \
|
||||
echo "$$TAG"
|
||||
|
||||
# Сборка одного образа с multi-arch
|
||||
docker-build-image:
|
||||
@if [ -z "$(IMAGE)" ]; then \
|
||||
echo "❌ Ошибка: IMAGE не указан"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
TAG=$$($(MAKE) docker-get-base-tag IMAGE=$(IMAGE)); \
|
||||
echo "🔨 Сборка $(DOCKER_REGISTRY)/$(IMAGE):$$TAG"; \
|
||||
cd dockerfiles/$(IMAGE) && \
|
||||
docker buildx build \
|
||||
--platform $(DOCKER_PLATFORMS) \
|
||||
--tag $(DOCKER_REGISTRY)/$(IMAGE):$$TAG \
|
||||
--tag $(DOCKER_REGISTRY)/$(IMAGE):latest \
|
||||
--push \
|
||||
.; \
|
||||
echo "✅ $(IMAGE):$$TAG собран и отправлен"
|
||||
|
||||
# =============================================================================
|
||||
# КОМАНДЫ ДЛЯ РАБОТЫ С ANSIBLE-CONTROLLER
|
||||
# =============================================================================
|
||||
controller:
|
||||
@case "$(word 2, $(MAKECMDGOALS))" in \
|
||||
build) \
|
||||
echo "🔨 Сборка ansible-controller..."; \
|
||||
cd dockerfiles/ansible-controller && docker build -t $(DOCKER_REGISTRY)/ansible-controller:$(DOCKER_VERSION) .; \
|
||||
echo "✅ ansible-controller собран";; \
|
||||
echo "🔨 Сборка ansible-controller (multi-arch)..."; \
|
||||
echo "📋 Платформы: $(DOCKER_PLATFORMS)"; \
|
||||
$(MAKE) docker-setup-builder; \
|
||||
cd dockerfiles/ansible-controller && \
|
||||
docker buildx build \
|
||||
--platform $(DOCKER_PLATFORMS) \
|
||||
--tag $(DOCKER_REGISTRY)/ansible-controller:$(DOCKER_VERSION) \
|
||||
--push \
|
||||
.; \
|
||||
echo "✅ ansible-controller собран и отправлен";; \
|
||||
run) \
|
||||
echo "🚀 Запуск ansible-controller..."; \
|
||||
cd dockerfiles/ansible-controller && docker-compose up -d; \
|
||||
@@ -486,9 +577,11 @@ controller:
|
||||
*) \
|
||||
echo "🎯 Доступные команды:"; \
|
||||
echo ""; \
|
||||
echo " 🔨 make controller build - собрать ansible-controller"; \
|
||||
echo " 🔨 make controller build - собрать ansible-controller (multi-arch)"; \
|
||||
echo " 💡 Собирает: inecs/ansible-controller:latest"; \
|
||||
echo " 💡 Платформы: $(DOCKER_PLATFORMS)"; \
|
||||
echo " 💡 Использует: dockerfiles/ansible-controller/Dockerfile"; \
|
||||
echo " 💡 Requirements: dockerfiles/ansible-controller/requirements.yml"; \
|
||||
echo ""; \
|
||||
echo " 🚀 make controller run - запустить ansible-controller"; \
|
||||
echo " 💡 Запускает: docker-compose up -d"; \
|
||||
|
||||
@@ -57,7 +57,7 @@ RUN curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.22.1 sh - \
|
||||
&& rm -rf istio-1.22.1
|
||||
|
||||
# Копируем requirements.yml
|
||||
COPY requirements.yml /tmp/requirements.yml
|
||||
COPY dockerfiles/ansible-controller/requirements.yml /tmp/requirements.yml
|
||||
|
||||
# Устанавливаем Ansible коллекции
|
||||
RUN ansible-galaxy collection install -r /tmp/requirements.yml
|
||||
|
||||
Reference in New Issue
Block a user