Docker Container automatische docker.compose file erstellen als Backup

mamema

Benutzer
Mitglied seit
23. Okt 2009
Beiträge
667
Punkte für Reaktionen
132
Punkte
63
HiHo

weil ich für diese Lösung selbst vor einiger Zeit was basteln musste, freue ich mich, dass ich diese nun gefunden habe, evtl. kann das noch jemand brauchen.
Das Skript erstellt docker-compose files mit allen Settings. Damit kann der Container dann später einfach wieder erstellt werden.
Der backup_dir Pfad muss entsprechend angepasst werden

#!/bin/sh

# Path to backup location
backup_dir="/volume1/docker/_compose-backups"

docker pull red5d/docker-autocompose
current_time=$(date "+%Y.%m.%d-%H.%M.%S")
docker ps --format '{{.Names}}' > containers.txt
while IFS="" read -r p || [ -n "$p" ]
do
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock red5d/docker-autocompose $p > "$backup_dir/$p-$current_time.yaml"
done < containers.txt
find "$backup_dir" -name "*.yaml" -mtime +5 -exec rm {} \;
 

Ulfhednir

Benutzer
Sehr erfahren
Mitglied seit
26. Aug 2013
Beiträge
3.264
Punkte für Reaktionen
923
Punkte
174
Vielleicht kannst du 1-2 weitere Worte darüber verlieren. In welchen Szenario das von Vorteil ist.
Ich deute das Ganze aktuell so: Es erstellt anhand der aktuell installierten Container (?) eine jeweilige .yaml-File? Sprich ich erspare mir das copy & pasten der Einstellungen des Containers, wenn ich bsw. ein Container-Update durchführen möchte?
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.481
Punkte für Reaktionen
364
Punkte
103
lustige Idee :)

Der Container enthält ein Python Script, dass über den docker.sock einen Container über seine Container-ID abfragt und dann daraus eine docker-compose.yml ableitet. Im Grunde ist es simples json zu yaml mapping.

Damit habe ich mir gerade mal spasseshalber ein docker-compose.yml für plex erstellen lassen:
Code:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock red5d/docker-autocompose $(docker ps -q --filter name=plex) > docker-compose.yml

Ich hab das script mal refactored und mal die temporären Dateien entfernt:
Code:
while read -r container_name; do
  docker run --rm -v /var/run/docker.sock:/var/run/docker.sock red5d/docker-autocompose ${container_name} > ${container_name}-compose.yaml
done <<< "$(docker ps --format '{{.Names}}')"
 
Zuletzt bearbeitet:

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.481
Punkte für Reaktionen
364
Punkte
103
Ich deute das Ganze aktuell so: Es erstellt anhand der aktuell installierten Container (?) eine jeweilige .yaml-File?
je Container!
? Sprich ich erspare mir das copy & pasten der Einstellungen des Containers, wenn ich bsw. ein Container-Update durchführen möchte?
Korrekt, einfach das Tag bei image: anpassen und mit docker-compose up -d deployen und schon wird der berstehende Container weggeworfen, das Image gezogen und gegen das neue Image ein neuer Container mit denselben Parametern erzeugt.
 
  • Like
Reaktionen: Ulfhednir

mamema

Benutzer
Mitglied seit
23. Okt 2009
Beiträge
667
Punkte für Reaktionen
132
Punkte
63
abgesehen davon, dass dies bei Updates geht, war diese Lösung eher als Backup gedacht. Container Updates gehen einfacher
docker stop
docker pull
docker clear
docker start

ganz ohne compose file
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.481
Punkte für Reaktionen
364
Punkte
103
Es dient der Erzeugung von docker-compose.yml definitionen von laufenden Container. Wie man die damit erzeugten compose Datein danach weiter verwendet ist dann tatsächlich ein anderes Thema.

docker stop
docker pull
docker clear
docker start
Wenn das tatsächlich funktionieren sollte, hätte ich heute etwas neues dazu gerlent.
Ich habe leider keine "alten" Images auf dem Host, sonst würde ich es selbst testen...

Ein vergleich von docker inspect $(docker ps -q --filter name=mein_container) --format '{{ .Image }}' (mein_container muss natürlich entsprechend angepasst werden) vor und nach der Aktion zeigt, ob der Container danach wirklich auf Basis eines neuen Images läuft.
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
1.982
Punkte für Reaktionen
576
Punkte
134
Was das Aktualisieren von Containern/Images angeht, da würde ich mir an Deiner Stelle lieber Watchtower anschauen, falls Du das noch nicht kennst...
 
  • Like
Reaktionen: Wollfuchs

Wollfuchs

Benutzer
Sehr erfahren
Mitglied seit
06. Sep 2020
Beiträge
1.143
Punkte für Reaktionen
261
Punkte
159
Danke fuer den Tipp, hab mir mal einen Watchtower installiert.

Gut, ich hab aktuell nur nen pihole am laufen aber wer weiss .. mal sehen ob der Aussichtsturm wir eingestellt, alle 2h nach nem Update schaut.
Wenn das klappt, kann ich ihn ja auf 1 mal an Tag runterdrehen ..
 

Ulfhednir

Benutzer
Sehr erfahren
Mitglied seit
26. Aug 2013
Beiträge
3.264
Punkte für Reaktionen
923
Punkte
174
Vielen Dank für die Hinweise. Bisher mache ich die Updates manuell; hier habe ich mir z.T. in Portainer Custom Templates angelegt. Den Container verwerfe ich dann und erstelle über das Template mit den zugehörigen Parametern neu. Auch hier ist es ein wenig Frickelei, wenn man die Compose File erstellt. Daher dachte ich, dass ich die aktuellen Daten mit dem obigen Skript exportiere und dann in mein Custom Template kopiere.

---
Von Watchtower habe ich schon mal nebenbei gehört, im selben Atemzug habe ich auch gehört, dass die Einstellungen des Containers zurückgesetzt wurden... o_O Das wird aber mutmaßlich auch daran liegen, dass derjenige die Einstellungen nicht ausgelagert hat. Gucke ich mir mal bei Zeiten genauer an.
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.481
Punkte für Reaktionen
364
Punkte
103
docker stop
docker pull
docker clear
docker start
Ich habe gerade versucht es nachzustellen. Ich habe es wohl falsch verstanden, dass sind keine Befehle für die docker cli, sondern die bekannten Aktionen die in der UI durchzufühen sind. Es gibt kein "docker clear" auf der Kommandozeile. .. Also doch nichts dazu gelernt.
Wäre aber tatsächlich cool gewesen wenn es das geben würde - für Anfänger sicherlich nicht unnützlich.
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat