DevOps Tutorial Teil-4: Backups!
| DevOps Scripts
Um eine Sicherung zu erstellen reicht es den gesamten Container zu nehmen in zu Zippen und dann auf einem externen Speicher abzulegen. Am besten automatisch über Nacht. Dafür habe ich ein Script geschrieben, dass sich auf mein NAS verbindet und den gesamten Ordner /var/container ablegt. Die notwendigen Daten sind in den gemappten Ordnern gespeichert, sodass der Container jederzeit von überall neu hochgezogen werden kann und die restlichen Daten werden beim Build neu erzeugt!
1. Script erstellen und abspeichern z.B.: /var/scripts/backup_container.sh
#!/bin/bash
# Zieladresse für die Übertragung
REMOTE_USER="PI"
REMOTE_HOST="127.0.0.1"
REMOTE_PATH="/share/Backup/Container"
# Verzeichnis mit den Docker-Containern
DOCKER_DIR="/var/container"
# Aktuelles Datum im Format YYYY-mm-dd
DATE=$(date +%Y-%m-%d)
# Name für das Archiv mit Datum vor dem Archivnamen
ARCHIVE_NAME="$DATE-docker_container_backup.tar.gz"
# Logdatei
LOG_FILE="/var/container/backup.log"
# Docker-Container in Archiv packen und Logausgabe hinzufügen
{
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Creating archive $ARCHIVE_NAME"
tar -zcf "$ARCHIVE_NAME" -C "$DOCKER_DIR" .
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Transfering archive to $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH"
rsync -azq "$ARCHIVE_NAME" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH"
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Cleanup: Deleting local archive"
rm "$ARCHIVE_NAME"
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Checking for old backups on remote host"
# Alte Backups löschen, wenn mehr als sieben vorhanden sind
BACKUPS=$(ssh "$REMOTE_USER@$REMOTE_HOST" "ls -t $REMOTE_PATH/*-docker_container_backup.tar.gz | tail -n +8")
if [ -n "$BACKUPS" ]; then
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Deleting old backups on remote host"
ssh "$REMOTE_USER@$REMOTE_HOST" "rm $BACKUPS"
fi
} >> "$LOG_FILE" 2>&1
# Löschen der vorherigen Logdatei
rm "$LOG_FILE.prev" >/dev/null 2>&1
# Umbenennen der aktuellen Logdatei zur vorherigen
mv "$LOG_FILE" "$LOG_FILE.prev" >/dev/null 2>&1
2. Cronjob anlegen
sudo crontab -e
# Sichere Docker Container in den Backup Ordner
0 0 * * * /var/scripts/backup_container.sh
Gib mir Feedback!
Hab ich Blödsinn geschrieben oder etwas vergessen? Dann zögere nicht weiter und lass es mich sofort wissen indem du hier einen Kommentar hinterlässt!