Zum Inhalt

Monat: April 2021

Automatische Docker Image Updates

Auf meinem kleinen Server zu Hause tummeln sich ca. 30 Docker Container. Bisher habe ich mich via Docker-Update-Image-Notififier (DIUN) über Updates benachrichtigen lassen, wenn es neue Version der genutzten Images gab. Das Update hab ich dann aber trotzdem noch selbst gemacht bzw. machen müssen. Die Benachrichtung via eMail ist ganz ansprechend und die ganze Geschichte lässt sich sich schön individuell konfigurieren, ja nachdem, wie man es braucht.

Hier mal das dazugehörige docker-compose.yml:

version: "3.5"
services:
  diun:
    container_name: diun
    image: crazymax/diun:latest
    volumes:
      - "./data:/data"
      - "./diun.yml:/diun.yml:ro"
      - "/var/run/docker.sock:/var/run/docker.sock"
    environment:
      - "TZ=Europe/Berlin"
      - "LOG_LEVEL=info"
      - "LOG_JSON=false"
    restart: unless-stopped

Und noch die diun.yml dazu:

watch:
  workers: 20
  schedule: "30 2 * * *"
  firstCheckNotif: true

providers:
  docker:
    watchByDefault: true
    
notif:
  mail:
    host: smtp.my-email-provider.de
    port: 465
    ssl: true
    insecureSkipVerify: true
    from: docker@my-email-provider.de
    to: docker@my-email-provider.de
    username: blablabla
    password: blablubb123

Die Benachrichtigung sieht dann in etwa so aus:

Soweit, so gut. Heute habe ich dann zufällig Watchtower entdeckt. Da sehen die Benachrichtigungen zwar nicht so schön aus, aber dafür können automatische Updates gemacht werden, wenn neue Versionen der Images vorliegen.

Auch hier wieder eine komplette docker-compose.yml, inkl. eMail Relay via Postfix:

version: "3.5"

services:
  watchtower:
    image: containrrr/watchtower:latest
    container_name: watchtower
    restart: unless-stopped
    depends_on: 
      - postfix
    environment:
      TZ: 'Europe/Berlin'
      WATCHTOWER_MONITOR_ONLY: 'false'
      WATCHTOWER_CLEANUP: 'true'
      WATCHTOWER_SCHEDULE: '0 15 5 * * *'
      WATCHTOWER_HTTP_API_METRICS: 'true'
      WATCHTOWER_HTTP_API_TOKEN: no5theit0dooqueih2ohjoo7ya6Tai7a
      WATCHTOWER_NOTIFICATIONS: email
      WATCHTOWER_NOTIFICATION_EMAIL_FROM: docker@my-email-provider.de
      WATCHTOWER_NOTIFICATION_EMAIL_TO: docker@my-email-provider.de
      WATCHTOWER_NOTIFICATION_EMAIL_SERVER: postfix
      WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT: 25
      WATCHTOWER_NOTIFICATION_EMAIL_DELAY: 5
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - 9180:8080
  postfix:
    image: juanluisbaptiste/postfix:latest
    container_name: postfix
    restart: unless-stopped
    environment:
      TZ: 'Europe/Berlin'
      SMTP_SERVER: smtp.my-email-provider.de
      SMTP_PORT: 25
      SMTP_USERNAME: blablabla
      SMTP_PASSWORD: blablubb123
      SERVER_HOSTNAME: my-dockerhost

Die bereitgestellten Metriken greift mein Prometheus ab:

  - job_name: 'watchtower'
    scrape_interval: 5s
    metrics_path: /v1/metrics
    bearer_token: no5theit0dooqueih2ohjoo7ya6Tai7a
    static_configs:
      - targets: ['192.168.1.130:9180']

Wenn bestimmt Images nicht aktualisiert werden sollen, was z.B. bei auf dem System selbst gebauten Images der Fall ist, kann das mit diesem Label verhindert werden:

version: '3.3'
services:
  my-app:
    ports:
      - '8080:8080'
    container_name: my-app
    image: 'my-app:latest'
    restart: unless-stopped
    volumes:
      - './log:/app/log'
    labels:
      - com.centurylinklabs.watchtower.enable=false