Bevor du dir den Code genauer anschaust, überlege selbst: Was könnte dieses Script tun? Wähle aus den folgenden drei Möglichkeiten:
- Es installiert Docker und lädt ein Image aus dem Internet herunter.
- Es importiert Docker-Images aus einem bestimmten Verzeichnis und überspringt bereits vorhandene.
- Es bereinigt ungenutzte Docker-Images und optimiert den Speicherplatz.
Schau dir den Code an und entscheide dich für eine Antwort:
Der Code:
#!/bin/bash
IMAGES_DIR="/home/vagrant/exported-docker-images"
echo "Starte Import der Docker-Images aus: $IMAGES_DIR"
if [ -d "$IMAGES_DIR" ]; then
for image in $IMAGES_DIR/*.tar; do
if [ -f "$image" ]; then
# Extrahiere die Image-Informationen aus der Datei
IMAGE_NAME=$(docker load -i "$image" | awk '/Loaded image:/ {print $3}')
# Überprüfe, ob das Image bereits existiert
if docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^$IMAGE_NAME$"; then
echo "Überspringe $IMAGE_NAME, da es bereits geladen ist."
else
echo "Importiere $image..."
docker load -i "$image"
fi
fi
done
else
echo "Kein Verzeichnis für Docker-Images gefunden unter: $IMAGES_DIR"
fi
echo "Provisioning abgeschlossen."
Hast du dich entschieden? Überprüfe deine Antwort:
Die Antwort
Das Script entspricht Antwort 2:
„Es importiert Docker-Images aus einem bestimmten Verzeichnis und überspringt bereits vorhandene.“
Wie funktioniert das genau?
Hier ist eine ausführliche Erklärung:
- Verzeichnis prüfen:
Das Script beginnt damit, zu prüfen, ob das festgelegte VerzeichnisIMAGES_DIR
(/home/vagrant/exported-docker-images
) existiert. Dort sollten.tar
-Dateien liegen, die Docker-Images repräsentieren. Falls das Verzeichnis fehlt, bricht das Script ab und gibt eine Fehlermeldung aus. - Alle
.tar
-Dateien durchgehen:
Das Script durchläuft alle Dateien im Verzeichnis, die auf.tar
enden. Jede Datei wird einzeln verarbeitet. - Image laden:
Mitdocker load -i
wird das Docker-Image aus der.tar
-Datei in die lokale Docker-Registry geladen. - Überprüfung auf Duplikate:
Nachdem ein Image geladen wurde, prüft das Script, ob es bereits in der Registry existiert. Dazu wird der Name und die Tag-Version des Images extrahiert und mit der lokalen Liste der Docker-Images verglichen (docker images --format
). Wenn das Image bereits existiert, wird es übersprungen. - Abschlussmeldung:
Sobald alle Dateien geprüft wurden, gibt das Script eine Meldung aus, dass der Import abgeschlossen ist.
Warum ist das nützlich?
Die Nützlichkeit ist an dieser Stelle Fragwürdig, aber ich hatte Bock drauf.
Vor allem weil ich beim wiederholtem Testen gemerkt habe, das ich doch eine ganze Menge Daten durch die Leitung ziehe und vor allem immer die selben.
Nachhaltigkeit war nicht unbedingt mein vordergründiger Gedanke, aber das war es was mich am Ende getrieben hat, und in dieser Umsetzung, weil ich nicht die Muse hatte einen eigenen lokalen Hub aufzusetzen.
Wie hast du abgeschnitten? Wenn du Antwort 2 gewählt hast, warst du genau richtig! 😊
P.S.
#!/bin/bash
# Verzeichnis für die exportierten Images
EXPORT_DIR="/home/vagrant/docker-images"
mkdir -p "$EXPORT_DIR"
# Alle Docker-Images exportieren
echo "Überprüfe und exportiere alle Docker-Images in das Verzeichnis: $EXPORT_DIR"
for image in $(docker images --format "{{.Repository}}:{{.Tag}}"); do
# Erstelle einen gültigen Dateinamen (ersetze "/" durch "_")
IMAGE_NAME=$(echo "$image" | tr '/' '_')
OUTPUT_FILE="$EXPORT_DIR/${IMAGE_NAME}.tar"
# Überspringe Export, wenn das Image bereits existiert
if [ -f "$OUTPUT_FILE" ]; then
echo "Überspringe $image, da $OUTPUT_FILE bereits existiert."
continue
fi
# Exportiere das Image
echo "Exportiere $image nach $OUTPUT_FILE..."
docker save -o "$OUTPUT_FILE" "$image"
done
echo "Export abgeschlossen. Alle Docker-Images wurden überprüft."