Beim Arbeiten mit vielen docker-compose.yml Dateien habe ich öfter die Anforderung gehabt, einzelne Images neu zu pullen. In der Regel reicht ein docker compose pull, was aber heißt, dass er alle images zieht.
Es gibt jedoch bei mir durchaus öfters den Fall, dass ich dies nicht möchte. Zudem hatte ich einige Container, wo nur auf ein bestimmtes Versions-Tag (z.B. mysql:8) gepulled wird oder ich sogar mit latest arbeite. Dies bedeutete, dass ich mir jedes Image einzeln aus der docker-compose-datei rauspfriemeln musste.
Damit ich im Wiederherstellungsfall das alte Image schneller wiederfinde, wollte ich das speziell taggen.
In der Regel habe ich an den Namen des Tags ein _backup dran gehängt. Vorher musste das vorherige Image mit diesem Tag gelöscht werden. Diese manuelle Arbeit habe ich nun in ein Script gegossen.
Update 30.11.2023: siehe unten Changelog
Das Script was auf GitLab liegt, durchpflügt die docker-compose.yml-Datei (parameterisierbar in der Datei) und fragt interaktiv nach, ob ein neues Image gepulled werden soll.
Wenn ja (default), dann legt das Script vorher ein “Backup” des Containers an, indem es an den Tag-Namen des aktuellen Containers ein _backup dran hängt.
Vorher wird das evtl. vorhandene und so benannte Image noch gelöscht, damit die Festplatte nicht platzt.
Das Suffix des Tags ist anpassbar im Script.
Bei jedem Durchlauf werden nochmal alle passenden Images angezeigt, damit alte Images nochmal aufgelistet werden. So fallen ungetaggte Images mit z.B. <none> leichter auf.
Die Ausgabe sieht dann z.B. so aus:
Update docker image: mysql:8 [j]|n:
Lösche evtl. Backups
docker images mysql:8_backup
LINES_MIT_HEADER=2
lösche altes Image
docker image rm mysql:8_backup
Untagged: mysql:8_backup
Untagged: mysql@sha256:566007208a3f1cc8f9df6b767665b5c9b800fc4fb5f863d17aa1df362880ed04
Deleted: sha256:b2013ac9910129ded1da4c96495142b2ed0638ddf7e86e65156400d9a8503777
Deleted: sha256:d24171674816d2cdb9a7cfaf9980f3ba574930efe226ca7fa840084072974e08
Deleted: sha256:046ec448aa8eaaa27e4118211c9f77da24d35b8a84b25f997334c3473d14a870
Deleted: sha256:ab05f09658d83ed8ff487d346fcc9fa4cecf5a23906a7e7feffaea83a1332a14
Deleted: sha256:96db44e22a968a3a16890685d95bd96d420d99a8880966056721c36842fa38af
Deleted: sha256:402981938079002ce0b77d9fe7a892608155b3866ad1967313b4934d0d8a6d3c
Deleted: sha256:e38cf6d3efcf0edd5d80758556fdafa43e9e3136edbc05928febf8771b1cba31
Deleted: sha256:0d197db846f4e62ab3d29cef5d359f5896ddd6869ba49608f276741da328ef29
Deleted: sha256:121010cc4276929c2ba287fe57dfd0c61483862809dfc884c2aa3d998d6cc292
Deleted: sha256:b72678d2fc4485cc1febd27ab3cc6fe2ddc9ef62b2f016aaa8620040a339677f
Deleted: sha256:b42107e741524c1f305a1a4649a4d96a5921c48c5b8c438ad871ab7cc5815231
Lege Backup an
docker tag mysql:8 mysql:8_backup
8: Pulling from library/mysql
210eb976c4c7: Pull complete
ebb4c64fd647: Pull complete
cb8397d67a0f: Pull complete
ff0e9bc8aa4e: Pull complete
e6f52b272e7f: Pull complete
e2d9e8e437ee: Pull complete
e61517738248: Pull complete
cfb2700e7252: Pull complete
4044404847dd: Pull complete
c142db3aeff8: Pull complete
Digest: sha256:1ee299bf9eb8d2218fcb4fad666a090c92caef48ce524e6edce35f2e2d55170d
Status: Downloaded newer image for mysql:8
docker.io/library/mysql:8
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 8_backup 8da80fe49fcf 4 weeks ago 577MB
mysql 8 2d9aad1b5856 2 months ago 574MB
Besonderheit
Bei einigen Containern arbeite ich mit konkreten Versionsnummern in den Tags.
Beispiel-Ausschnitt aus einer docker-compose.yml
1 image: onlyoffice/documentserver:7.5.1.1
In diesem Fall muss die obige Abfrage
Update docker image: onlyoffice/documentserver:7.5.1.1 [j]|n:
mit n für nein beantwortet werden. Hier findet ja gerade eine Versionierung bzw. Backup über den Namen des Tags statt. Zudem kann ich hier schlecht die nächste Versionsnummer erraten.
Weiterhin kann ja auch ein Überspringen einer Subversion gewünscht sein.
Da die Images sowieso anhand Ihres Tags schon als Image-Version vorliegen, muss die Version somit im docker-compose.yml -File angepasst werden.
Dieses Script ist somit nur für die fixen Version-Strings wie oben bei mysql oder dem oben erwähnten lastest geeignet, erleichert aber meinen Alltag ungemein.
Changelog
| Datum | Änderung |
|---|---|
| 30.11.2023 | Teaser erweitert, einige Sätze ausgebessert. Letzten Absatz “Besonderheit” hinzugefügt. |