Watchtower
介紹
使用情境如果下:
假設我們有運行一些服務例如個人網站,並且是佈署在別台電腦上的話,我們用CI/CD來幫忙build新的docker image,然後連到遠端電腦去做更新。
流程圖類似如下圖:
現在我們可以透過Watchtower這個工具,替我們自動更新遠端設備(server)裡面的docker image和重啟docker container的服務。
概念比較像是他會啟動一個小的監聽server,他會每過特定時間去像遠端的docker registry確認是否此docker image有被更新過? 如果有的話,就會幫我們更新並且重啟container。
此作法就可以省去我們在CICD文檔內,還要特地做連到遠端然後再去做pull docker image,重啟等的動作。
所以基本上就是把我們的服務全部放到docker image,然後用此docker image去做啟動。
流程圖大概繪像下圖:
使用方法
於想要追蹤的container裡面加入這個參數 label
並設定為 true ,Watchtower就會追蹤這個container。反之,則不會追蹤。畢竟可能我們可能有非常多的容器,而只想特定追蹤某個容器而已。
labels:
- "com.centurylinklabs.watchtower.enable=true"
另外,如果在command line的後面加上容器的名稱,Watchtower就會只關注那個container而已。預設是追蹤device內所有的container,建議是可以加入這個參數,watchtower就不會追蹤設備裡docker全部的容器。
可以在 --interval
設定要多久監聽一次。
以下為範例:
docker-compose.yml
version: "3"
services:
app:
build: .
image: chieh/app:latest
ports:
- 80:80
- 35729:35729
container_name: meta
labels:
- "com.centurylinklabs.watchtower.enable=true"
restart: unless-stopped
watchtower:
image: containrrr/watchtower
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- $HOME/.docker/config.json:/config.json
container_name: watchtower
labels:
com.centurylinklabs.watchtower.enable: true
command: --interval 300 meta
environment:
WATCHTOWER_POLL_INTERVAL: 300 # Poll interval in seconds
# WATCHTOWER_INCLUDE_STOPPED: 1 # Include stopped containers
# WATCHTOWER_REVIVE_STOPPED: 1 # Restart stopped containers
# WATCHTOWER_CLEANUP: 1 # Delete unused image
WATCHTOWER_LABEL_ENABLE: 1 # Only include containers with enable label
# WATCHTOWER_LIFECYCLE_HOOKS: 1 # Enable pre/post-update scripts