Actualitzar els contenidors amb Watchtower

Si tens un servidor a casa teva, probablement utilitzes Docker per desplegar serveis.

Un desavantatge que té això és l’actualització dels serveis: per actualitzar un contenidor, cal actualitzar la imatge i reiniciar el servei, i fer-ho manualment no és massa eficient. Per això utilitzarem avui Watchtower.

Watchtower és un programa de codi obert, disponible en contenidor Docker, que monitoreja els contenidors Docker que estan en execució i busca si hi ha imatges més noves per aquests. Si n’hi ha una de nova, se la baixarà i reiniciarà el contenidor, deixant-lo funcionant amb els mateixos paràmetres que estava executant-se però amb la nova imatge. A més, ens eliminarà la imatge vella automàticament.

En el meu cas, i utilitzant docker compose, tinc a l’arxiu docker-compose.yaml el següent:

docker

  watchtower:
    image: containrrr/watchtower:latest
    container_name: watchtower
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_INCLUDE_RESTARTING=true
      - WATCHTOWER_INCLUDE_STOPPED=true
      - WATCHTOWER_REVIVE_STOPPED=false
      - WATCHTOWER_NO_RESTART=false
      - WATCHTOWER_TIMEOUT=30s
      - WATCHTOWER_SCHEDULE=0 0 4 * * *
      - WATCHTOWER_DEBUG=false
      - TZ=Europe/Madrid
    network_mode: bridge

Extret de El Blog de Lázaro.

Amb això, estem passant el socket de Docker al contenidor de Watchtower, per poder comunicar-se amb el dimoni Docker i controlar la resta de contenidors.

Els paràmetres d’entorn que li enviem són bàsicament l’horari (cada dia a les 4 del matí), l’opció perquè elimini les imatges velles, un timeout o que també actualitzi els contenidors parats però no els iniciï.

Un cop fet això, podem executar el contenidor i, per comprovar que està operatiu, podem revisar-ne els logs. El primer cop hauria d’aparèixer quelcom semblant a:

docker

time="2024-09-19T18:56:56+02:00" level=info msg="Watchtower 1.7.1"
time="2024-09-19T18:56:56+02:00" level=info msg="Using no notifications"
time="2024-09-19T18:56:56+02:00" level=info msg="Checking all containers (except explicitly disabled with label)"
time="2024-09-19T18:56:56+02:00" level=info msg="Scheduling first run: 2024-09-20 04:00:00 +0200 CEST"
time="2024-09-19T18:56:56+02:00" level=info msg="Note that the first check will be performed in 9 hours, 3 minutes, 3 seconds"

També es podria fer una tasca amb un crontab, on podriem configurar-ho més a la nostra manera i no seria gaire complicat de fer.

Fins aquí el post d’avui. Si t’ha estat d’utilitat pots deixar un comentari o compartir-ho. Ens veiem al següent!