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