Watchtower - Docker Container automatisch aktualisieren

Aus Laub-Home Wiki

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

Quellen