#!/bin/bash # Build multi-architecture Docker image for web-gateway # Supports: amd64 (x86_64) and arm64 (Raspberry Pi 4, Apple Silicon) set -e # Configuration IMAGE_NAME="${IMAGE_NAME:-easylinux/web-gateway}" IMAGE_TAG="${IMAGE_TAG:-latest}" PLATFORMS="${PLATFORMS:-linux/amd64,linux/arm64}" echo "============================================" echo "Building Multi-Arch Docker Image" echo "============================================" echo "Image: ${IMAGE_NAME}:${IMAGE_TAG}" echo "Platforms: ${PLATFORMS}" echo "============================================" # Check if buildx is available if ! docker buildx version >/dev/null 2>&1; then echo "Error: docker buildx not found. Please install Docker Buildx." echo "See: https://docs.docker.com/buildx/working-with-buildx/" exit 1 fi # Create builder instance if it doesn't exist if ! docker buildx ls | grep -q multiarch-builder; then echo "Creating multiarch-builder..." docker buildx create --name multiarch-builder --use --bootstrap else echo "Using existing multiarch-builder..." docker buildx use multiarch-builder fi # Build and push multi-arch image echo "Building for platforms: ${PLATFORMS}..." # Check if PUSH is set to true if [ "${PUSH}" = "true" ]; then echo "Building and pushing to registry..." docker buildx build \ --platform "${PLATFORMS}" \ --tag "${IMAGE_NAME}:${IMAGE_TAG}" \ --push \ . echo "============================================" echo "✅ Multi-arch image built and pushed!" echo "============================================" echo "Image: ${IMAGE_NAME}:${IMAGE_TAG}" echo "" echo "Verify architectures:" echo " docker buildx imagetools inspect ${IMAGE_NAME}:${IMAGE_TAG}" else # For multi-arch, save to local registry cache echo "Building locally (use PUSH=true to push to registry)..." docker buildx build \ --platform "${PLATFORMS}" \ --tag "${IMAGE_NAME}:${IMAGE_TAG}" \ . echo "============================================" echo "✅ Multi-arch image built successfully!" echo "============================================" echo "Image: ${IMAGE_NAME}:${IMAGE_TAG}" echo "" echo "Note: Multi-arch images are in buildx cache." echo "To push to registry:" echo " PUSH=true ./build-multiarch.sh" echo "" echo "To load single arch locally:" echo " docker buildx build --platform linux/amd64 -t ${IMAGE_NAME}:${IMAGE_TAG} --load ." echo " or" echo " docker buildx build --platform linux/arm64 -t ${IMAGE_NAME}:${IMAGE_TAG} --load ." fi