update docker image ให้ใหม่สดอยู่เสมอ

เมื่อเรามีจำนวน docker container จำนวนเยอะๆ การที่เราต้องมาคอย pull latest image แต่ละ container ค่อนข้างเสียเวลามาก อีกทั้งเราก็ไม่สามารถรู้ล่วงหน้าว่า เมื่อไหร่ image จะมีการ update เป็นเวอร์ชั่นใหม่ แต่ถ้าเราสามารถ automation update docker image ทุกๆ container ของเราชีวิตมันก็คงจะง่ายขึ้นเนอะ

* คำเตือน การตั้ง automation update อาจจะส่งเสียต่อ container ของท่านได้ กรณีเวอร์ชั่นใหม่มี bug ค่อนข้างเยอะ หรือไม่ support ต่อระบบของท่าน เพราะฉนั้นกรุณาทำระบบ monitoring อย่างแข็งแรง!

Watchtower คือ "หอสังเกตการณ์" 555+ อันนั้นก็ตรงตัวไป ถ้าอธิบายง่ายๆก็คือ docker container ตัวนึงที่จะคอยตรวจสอบ docker image ถ้าเจอมีการ update version ก็จะทำการ pull image จากนั้น restart container ให้เราทันที ฟังแล้วชีวิตง่ายขึ้นมาก (อ่านเพิ่มเติม)

เริ่มติดตั้ง Watchtower

สำหรับการติดตั้ง watchtower สามารถทำได้ทั้งแบบ docker run หรือ docker-compose แต่สำหรับวันนี้ผมจะใช้วิธี docker-compose โดยสร้าง stack ผ่านทาง portainer

version: "2"
services:
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=Asia/Bangkok
      - WATCHTOWER_SCHEDULE=0 0 12 * * *
      - WATCHTOWER_CLEANUP=true

environment ที่จำเป็นต้องใช้งาน (อ่านเพิ่มเติม)

  • TZ=Asia/Bangkok คือ time zone อันนี้ทุกคน น่าจะรู้กันแล้ว ข้ามไปเนอะ
  • WATCHTOWER_SCHEDULE=0 0 12 * * * คือ การตั้งเวลา update image จะเป็นรูปแบบ Cron
  • WATCHTOWER_CLEANUP=true คือ ทำการลบ image ตัวเก่าทิ้ง
Logs การทำงาน watchtower