Watchtower - Docker Container automatisch aktualisieren
Nun hat man alle möglichen Container am Laufen. Früher hat man einfach um das System zu aktualisieren ein apt-get update && apt-get upgrade
gemacht und schon war alles auf dem aktuellen Stand. Wie machen wir das nun bei Docker. Docker Container werden durch aktualisierte Images "gepatcht", welche man mit einem docker pull CONTAINERNAME
zieht und dann den Container neustartet. Mit Compose geht das genauso. Wie aber kann man das Ganze nun automatisieren? Vielleicht will man auch nur darüber informiert werden, das es Updates gibt?
Die Lösung ist ebenfalls ein Docker Image, bzw ein Docker Container, der sich um das Suchen nach Updates, das Neustarten und die Benachrichtigung kümmert: Watchtower
Docker Compose File
Ich habe bereits im Schritt Portainer Docker Installation ein Compose Projekt Namens tools
angelegt, zu diesem möchte ich watchtower
hinzufügen:
docker-compose.yml
...
watchtower:
image: containrrr/watchtower
command: --monitor-only --cleanup -i 28800 --include-stopped --label-enable --stop-timeout 30s
#--debug --monitor-only
environment:
- TZ=${TZ}
- WATCHTOWER_NOTIFICATIONS=email
- WATCHTOWER_NOTIFICATION_EMAIL_FROM=root@example.tld
- WATCHTOWER_NOTIFICATION_EMAIL_TO=support@example.tld
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER=mx.example.tld
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=root@example.tld
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=MAILPASSWORD
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587
labels:
com.centurylinklabs.watchtower.enable: "true"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: always
networks:
frontend-nw:
...
Solltet ihr es als Standalone Compose Projekt haben wollen, einfach den oben stehenden Code in das Snippet hier einfügen:
version: '3.7'
services:
...
networks:
frontend-nw:
driver: bridge
driver_opts:
com.docker.network.bridge.name: br-toolsfe
Nun können wir das Ganze deployen:
docker-compose up -d
Was passiert hier nun?
Es wird ein Docker Container mit Watchtower hochgefahren, der alle 8h (28000 Sekunden) nach Updates (auch für ausgeschaltete Container) sucht, allerdings nur bei Systemen die dazu gekennzeichnet wurden (siehe Konfiguration der zu aktualisierenden Container). Updates werden dank des Parameters --monitor-only
nur überprüft, lässt man diesen weg, geschieht alles vollautomatisch, ebenfalls auch ein Aufräumen veralteter Images --cleanup
. Die Environment Konfigurationen sorgen für das Verbinden an einen SMTP Mailserver.
Konfiguration der zu aktualisierenden Container
Alle Container, die man auf Updates prüfen möchte, benötigen im docker-compose.yml
die folgenden zwei Zeilen, sollte es schon labels:
geben, einfach nur das zusätzliche LABEL einfügen.
labels:
com.centurylinklabs.watchtower.enable: "true"
Aktivieren durch:
docker-compose up -d