add multi arch

This commit is contained in:
Tomas Mirchev 2025-02-25 16:03:06 +01:00
parent f560c27192
commit 0e854487ee

View File

@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
set -e
if [ $# -eq 0 ]; then if [ $# -eq 0 ]; then
echo "Usage: $0 <image-name>" echo "Usage: $0 <image-name>"
echo "Example: $0 base-debian" echo "Example: $0 base-debian"
@ -9,9 +11,16 @@ fi
IMAGE_NAME=${1:-base-debian} IMAGE_NAME=${1:-base-debian}
echo "Building Docker image: $IMAGE_NAME" echo "Building Docker image: $IMAGE_NAME"
if ! command -v dpkg &> /dev/null; then
echo "❌ Error: dpkg not found. This script only works on Debian-based systems."
exit 1
fi
ARCH=$(dpkg --print-architecture) # Outputs amd64, arm64, armhf, etc.
echo "🛠 Detected architecture: $ARCH"
REPO="registry.tomastm.com" REPO="registry.tomastm.com"
TAG_LATEST="latest" TAG_LATEST="latest"
BUILD_DIR="./${IMAGE_NAME}" BUILD_DIR="./${IMAGE_NAME}"
if [ ! -d "${BUILD_DIR}" ]; then if [ ! -d "${BUILD_DIR}" ]; then
@ -19,35 +28,40 @@ if [ ! -d "${BUILD_DIR}" ]; then
exit 1 exit 1
fi fi
UID=$(id -u) _UID=$(id -u)
GID=$(id -g) _GID=$(id -g)
COMMIT_ID=$(git rev-parse --short HEAD) COMMIT_ID=$(git rev-parse --short HEAD)
IMAGE_LATEST="${REPO}/${IMAGE_NAME}:${TAG_LATEST}" IMAGE_ARCH="${REPO}/${IMAGE_NAME}:${COMMIT_ID}-${ARCH}"
IMAGE_COMMIT="${REPO}/${IMAGE_NAME}:${COMMIT_ID}" IMAGE_LATEST="${REPO}/${IMAGE_NAME}:${TAG_LATEST}-${ARCH}"
docker build \ docker build \
-t ${IMAGE_COMMIT} \ -t ${IMAGE_ARCH} \
--build-arg UID=${UID} \ --build-arg UID=${_UID} \
--build-arg GID=${GID} \ --build-arg GID=${_GID} \
${BUILD_DIR} ${BUILD_DIR}
docker tag ${IMAGE_COMMIT} ${IMAGE_LATEST} docker tag ${IMAGE_ARCH} ${IMAGE_LATEST}
echo "✅ Successfully built and tagged:" echo "✅ Successfully built and tagged:"
echo " 📌 ${IMAGE_COMMIT}" echo " 📌 ${IMAGE_ARCH}"
echo " 🔄 ${IMAGE_LATEST}" echo " 🔄 ${IMAGE_LATEST}"
read -p "🚀 Do you want to push the image to ${REPO}? (y/N): " PUSH_CONFIRM read -p "🚀 Do you want to push the image to ${REPO}? (y/N): " PUSH_CONFIRM
if [[ "$PUSH_CONFIRM" =~ ^[Yy]$ ]]; then if [[ "$PUSH_CONFIRM" =~ ^[Yy]$ ]]; then
echo "📤 Pushing images..." echo "📤 Pushing images..."
docker push ${IMAGE_COMMIT} docker push ${IMAGE_ARCH}
docker push ${IMAGE_LATEST} docker push ${IMAGE_LATEST}
echo "✅ Successfully pushed images to ${REPO}" echo "✅ Successfully pushed images to ${REPO}"
echo " Next step: If you have built and pushed both amd64 and arm64 versions, run the following command to create a multi-arch manifest:"
echo " docker manifest create ${REPO}/${IMAGE_NAME}:${COMMIT_ID} \\"
echo " ${REPO}/${IMAGE_NAME}:${COMMIT_ID}-amd64 \\"
echo " ${REPO}/${IMAGE_NAME}:${COMMIT_ID}-arm64"
echo " docker manifest push ${REPO}/${IMAGE_NAME}:${COMMIT_ID}"
else else
echo " Skipping push. You can manually push later with:" echo " Skipping push. You can manually push later with:"
echo " docker push ${IMAGE_COMMIT}" echo " docker push ${IMAGE_ARCH}"
echo " docker push ${IMAGE_LATEST}" echo " docker push ${IMAGE_LATEST}"
fi fi