Skip to main content

ขี้เกียจอัพเดท Docker Container เอง มาติดตั้ง watchtower บน Synology NAS กันเถอะ!

เปลี่ยนไปใช้ wud แทน watchtower ไม่แนะนำให้ใช้แล้ว

เมื่อถึงจุดหนึ่งที่คุณติดตั้งอะไรต่าง ๆ นา ๆ ใน Docker แล้วก็เริ่มขี้เกียจมานั่งอัพเดท Container เอง เพราะมันเยอะ เสียเวลาชีวิต watchtower จะช่วยคุณได้ครับ

โดย watchtower จะทำการหาอัพเดท image ล่าสุดให้ ถ้ามี version ที่ใหม่กว่าของเรามันก็จะหยุด ลบ และติดตั้ง image ใหม่ให้ โดยอิงจากค่าที่เราตั้งมันไว้ตอนแรก โดยที่เราไม่ต้องทำอะไรกับมันเลย ลงแล้วก็ปล่อยเบลอ ลืม ๆ ไปซะ

ขั้นตอนติดตั้ง

Docker Run
  • ขั้นแรกต้องลง Docker ไว้แล้ว ซึ่งก็น่าจะลงกันไว้หมดแล้วไม่งั้นคงไม่มาหาเครื่องทุ่นแรงอย่าง watchtower
  • ไปที่ Control Panel > Task Scheduler เลือกจาก dropdown Create > Scheduled Task > User-defined script

image.png


  • tab General ตั้งชื่อ task เป็นอะไรก็ได้ไม่มีผลอะไร ส่วน user ให้เลือกเป็น root

1 U1QHyK8cQU7G1P61jgVGaA.png


  • tab Schedule เราต้องการลงแค่ครั้งเดียว เลือกเป็น Do not repeat วันที่อะไรไม่ต้องไปยุ่ง

image.png


  • tab Task Settings เลือกส่ง email แจ้งเตือนมาหาเรา แล้วก็ใส่เมลล์ตัวเองลงไป
  • copy code ไปใส่ในช่องตามรูปด้านล่าง แล้วกด OK
docker run -d --name=watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
--restart=always \
containrrr/watchtower --cleanup

image.png


หลังจากนั้นให้เลือก task นี้แล้วกด Run หรือ คลิ๊กขวาที่ task นี้แล้ว Run ได้เลยครับ ถ้าไม่มีอะไรผิดพลาด watchtower มันจะไปโผล่ใน Docker tab Container เอง โดยตัวมันเองจะเช็คอัพเดททุก 24 ชั่วโมงครับ

Source https://containrrr.dev/watchtower/usage-overview/



Arguments

สำหรับคนที่ไม่สนจะตั้งค่าอะไร ก็ปล่อยให้มันทำงานไปได้เลย ส่วนนี้จะแนะนำ setting ที่น่าสนใจบางตัวเพิ่มเติม เผื่อใครอยากปรับแต่งให้เหมาะกับเรามากขึ้น

เลือกอัพเดทเฉพาะ Container

ในบางครั้งเราก็ไม่อยากให้ watchtower อัพเดททุกอย่างที่ติดตั้ง อาจจะเนื่องโปรแกรมยังไม่เสถียร อัพเดทแล้วพังบ่อย เราก็สามารถมาตั้งค่าเพิ่มได้ ใน docker run (ลบ container เดิมทิ้งแล้ว ใส่ใหม่เลย)

ดูบรรทัดที่ 5 จะเห็นว่า เราจะใส่ชื่อ container ที่ต้องการให้ watchtower เช็คเพื่ออัพเดท มีกี่อันก็เคาะช่องว่างไล่ไป

$ docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower --cleanup \
    pihole Komga


Setting อื่น ๆ ที่น่าสนใจ

แบ่งเป็น 2 ส่วน คือ

  • Argument - ส่วนนี้จะใช้ต่อท้ายใน docker run เหมือน cleanup ที่ใส่ไว้ให้แล้ว ถ้าจะใส่อะไรเพิ่มก็ต่อไปเรื่อย ๆ
  • Environment Variable และ Value - สำหรับใส่ในส่วนของ Env ใน docker compose หรือยัดผ่าน GUI ของ Synology Docker ก็ได้
Argument Environment Variable Value What it does
--cleanup WATCHTOWER_CLEANUP true, false
watchtower จะลบ image เก่าทิ้งหลังจากอัพเดทแล้ว
--interval 300 WATCHTOWER_POLL_INTERVAL 300
ตั้งเวลาวินาทีว่าจะให้ watchtower เช็คบ่อยแค่ไหน ในตัวอย่างคือ 300 วินาที หรือ 5 นาที  ส่วนค่า default คือ 86400 (24 ช.ม.)
--schedule "0 0 4 * * *" WATCHTOWER_SCHEDULE 0 0 4 * * * แทนที่จะตั้งเวลาเป็นวินาที ก็ตั้งเป็นกำหนดการแทน ตัวอย่างคือตี 4 ของทุกวัน  ถ้าจะลองตั้งค่าอื่นไปดูได้ใน Cron expression generator

TZ Asia/Bangkok ตั้ง Time Zone บ้านเราก็ใช้เป็น Asia/Bangkok ไว้ใช้คู่กับ WATCHTOWER_SCHEDULE ให้ง่ายก็ใส่ไว้ใน Env ทั้งคู่

WATCHTOWER_POLL_INTERVAL กับ WATCHTOWER_SCHEDULE ให้เลือกใช้อย่างใดอย่างหนึ่ง

Arguments ทั้งหมดดูในจากที่นี่เลย



อื่น ๆ


run เช็คว่ามีอันไหนอัพเดทบ้าง

docker run -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once --monitor-only

run แบบครั้งเดียวพร้อมอัพเดท (ทั้งหมด)

docker run -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once --cleanup
docker run -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once --cleanup watchtower

Docker-Compose

version: '3.3'
services:
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    volumes:
      - '/var/run/docker.sock:/var/run/docker.sock'
    restart: always
    environment:
      - WATCHTOWER_SCHEDULE=0 0 4 * * *
      # Removes old images after updating
      - WATCHTOWER_CLEANUP=true
    
      # Update containers that have a com.centurylinklabs.watchtower.enable label set to true.
      - WATCHTOWER_LABEL_ENABLE=true
    
      # Do not update containers that have com.centurylinklabs.watchtower.enable
      # - WATCHTOWER_LABEL_ENABLE=false
      
      # Will also include restarting containers
      - WATCHTOWER_INCLUDE_RESTARTING=true
      # Will also include created and exited containers
      # - WATCHTOWER_INCLUDE_STOPPED=true
      # Note that monitor-only can also be specified on a per-container basis
      # with the com.centurylinklabs.watchtower.monitor-only label set on those containers.
      # - WATCHTOWER_MONITOR_ONLY=true

Label สำหรับใส่เพิ่มใน docker-compose เพื่อตั้งให้ container ที่ระบุทำการ auto update
        labels:
          - "com.centurylinklabs.watchtower.enable=true"