Skip to content

Commit d580400

Browse files
author
wlanboy
committed
Added MultiArch Build
1 parent e914aae commit d580400

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

multiarch-build.sh

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#!/bin/bash
2+
3+
# --- Konfiguration ---
4+
DOCKER_USERNAME="wlanboy"
5+
IMAGE_NAME="wlanboy/javahttpclient:latest"
6+
PLATFORMS="linux/amd64,linux/arm64"
7+
BUILDER_NAME="multiarch-builder"
8+
9+
# Fehlerbehandlung
10+
set -e
11+
12+
# --- 1. Vorab-Abfragen & Cleanup ---
13+
echo "--- Vorbereitung ---"
14+
read -p "Möchtest du den Docker Build-Cache vorab bereinigen? (y/N): " PRE_CLEANUP
15+
if [[ "$PRE_CLEANUP" =~ ^[Yy]$ ]]; then
16+
echo "-> Bereinige Build-Cache..."
17+
docker builder prune -a -f
18+
fi
19+
20+
# Zeitmessung starten
21+
START_TIME=$(date +%s)
22+
23+
# --- 2. System-Check & Login ---
24+
echo -e "\n--- System-Check & Login ---"
25+
26+
if docker info 2>/dev/null | grep -iq "Username"; then
27+
CURRENT_USER=$(docker info 2>/dev/null | grep -i "Username" | awk '{print $2}')
28+
if [ "$CURRENT_USER" == "$DOCKER_USERNAME" ]; then
29+
echo "✅ Bereits als $DOCKER_USERNAME eingeloggt."
30+
else
31+
LOGIN_REQUIRED=true
32+
fi
33+
else
34+
LOGIN_REQUIRED=true
35+
fi
36+
37+
if [ "$LOGIN_REQUIRED" = true ]; then
38+
read -sp "Docker Hub Passwort für $DOCKER_USERNAME eingeben: " DOCKER_PASSWORD
39+
echo ""
40+
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
41+
fi
42+
43+
# 3. QEMU Check
44+
if ! dpkg -l | grep -q qemu-user-static; then
45+
echo "-> Installiere QEMU für Multi-Arch Support..."
46+
sudo apt-get update && sudo apt-get install -y qemu-user-static binfmt-support
47+
sudo update-binfmts --enable
48+
fi
49+
50+
# 4. Builder Setup
51+
if ! docker buildx inspect $BUILDER_NAME &>/dev/null; then
52+
docker buildx create --name $BUILDER_NAME --use
53+
else
54+
docker buildx use $BUILDER_NAME
55+
fi
56+
docker buildx inspect --bootstrap
57+
58+
# --- 5. Auswahl der Aktion ---
59+
echo -e "\nWas möchtest du tun?"
60+
echo "1) Nur bauen (lokal laden - nur aktuelle Architektur)"
61+
echo "2) Bauen und pushen (Multi-Arch zu Docker Hub)"
62+
read -p "Auswahl [1 oder 2]: " ACTION_CHOICE
63+
64+
case $ACTION_CHOICE in
65+
1)
66+
echo "-> Starte lokalen Build..."
67+
docker buildx build -t "$IMAGE_NAME" --load .
68+
echo -e "\n--- Image-Informationen ---"
69+
docker buildx imagetools inspect "$IMAGE_NAME"
70+
echo "Größe auf dem Host:"
71+
docker images "$IMAGE_NAME"
72+
;;
73+
2)
74+
echo "-> Starte Multi-Arch Build & Push ($PLATFORMS)..."
75+
docker buildx build --platform "$PLATFORMS" -t "$IMAGE_NAME" --push .
76+
echo -e "\n--- Remote Manifest-Informationen ---"
77+
docker buildx imagetools inspect "$IMAGE_NAME"
78+
;;
79+
*)
80+
echo "Ungültige Auswahl. Abbruch."
81+
exit 1
82+
;;
83+
esac
84+
85+
# --- 6. Abschluss & Zeitmessung ---
86+
END_TIME=$(date +%s)
87+
DURATION=$((END_TIME - START_TIME))
88+
MINUTES=$((DURATION / 60))
89+
SECONDS=$((DURATION % 60))
90+
91+
echo -e "\n------------------------------------------"
92+
echo "✅ Vorgang erfolgreich abgeschlossen!"
93+
echo "⏱️ Gesamtdauer: ${MINUTES}m ${SECONDS}s"
94+
echo "------------------------------------------"

0 commit comments

Comments
 (0)