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

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