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