Linux中國

如何使用 Watchtower 自動更新正在運行的 Docker 容器

使用 Watchtower 自動更新 Docker 容器基礎鏡像

對開發運維人員來說,保持 Docker 容器為最新版本是重要工作之一。手動更新 Docker 容器是一項耗時的工作。這篇文章解釋了 Watchtower 是什麼,如何安裝它,以及在 Linux 中如何 使用 Watchtower 自動更新正在運行的 Docker 容器

Watchtower 是什麼?

Watchtower 是一款自由開源的應用,用來監控運行中的 Docker 容器,並且當它發現基礎鏡像被更改後,可以自動的更新容器。

若 Watchtower 發現一個運行中的容器需要更新,它會以發送 SIGTERM 信號的方式,優雅的結束運行中容器的運行。

它會下載新鏡像,然後以最初部署時使用的方式,重啟容器。所有文件會在後台自動下載,因此不需要用戶的介入。

在這份指南中,我們將會明白如何在類 Unix 系統中使用 Watchtower 自動更新正在運行的 Docker 容器。

我已經在 CentOS 和 Ubuntu 中測試了這份指南,所有的 Linux 發行版中操作過程都一樣。

在 Linux 中安裝 Watchtower

可以通過 Docker 鏡像的方式下載 Watchtower 。因此,部署它是小事一樁。在你的 Linux 中安裝 Docker 鏡像,然後運行 Watchtower 立即開始監控 Docker 容器。

參考下方指導在基於 PRM 和 DEB 包管理系統中安裝 Docker

安裝 Docker 後,你可以使用以下命令以 root 用戶身份部署 Watchtower 容器:

# docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower

如果你已經安裝了 Docker 桌面版,以普通用戶運行 Watchtower 容器。

$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower

該命令會拉取最新版的 watchtower 鏡像,並運行 watchtower 容器。

輸出樣例:

Unable to find image 'containrrr/watchtower:latest' locally
latest: Pulling from containrrr/watchtower
1045b2f97fda: Pull complete 
35a104a262d3: Pull complete 
1a0671483169: Pull complete 
Digest: sha256:bbf9794a691b59ed2ed3089fec53844f14ada249ee5e372ff0e595b73f4e9ab3
Status: Downloaded newer image for containrrr/watchtower:latest
91c104ef0e9896e8cd5ff30d9f13e728dbfad66443830ec2ac85dde6d7d37564

Run Watchtower Docker Container

使用 Watchtower 自動更新 Docker 容器

在你的系統上,Watchtower 正在和其他容器一起運行。你可以使用一下命令查看運行中的 Docker 容器列表:

$ docker ps

輸出樣例:

CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS          PORTS                                         NAMES
91c104ef0e98   containrrr/watchtower       "/watchtower"            14 minutes ago   Up 14 minutes   8080/tcp                                      watchtower
f90b462b0712   bitnami/wordpress-nginx:6   "/opt/bitnami/script…"   19 minutes ago   Up 19 minutes   0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp   ostechnix-wordpress-1

正如上方輸出所示,watchtower 容器正在和名為 ostechnix-wordpress-1 的容器一起運行。從現在開始,watchtower 會每隔幾分鐘會檢查該容器。

如果 Watchtower 發現該容器的基礎鏡像的任何變化,它會優雅的關閉 ostechnix-wordpress-1 容器,然後使用與最初啟動它時使用的相同方式,啟動新的鏡像。

類似的,它會自動地每隔幾分鐘檢查所有的運行中容器,並自動更新它們。

Watchtower 如何更新多連接的容器?

在監視多連接容器時,Watchtower 十分智能。

假設我們現在運行兩個容器。

$ docker ps

輸出樣例:

CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS          PORTS                                         NAMES
91c104ef0e98   containrrr/watchtower       "/watchtower"            14 minutes ago   Up 14 minutes   8080/tcp                                      watchtower
f90b462b0712   bitnami/wordpress-nginx:6   "/opt/bitnami/script…"   19 minutes ago   Up 19 minutes   0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp   ostechnix-wordpress-1
a895f082438a   bitnami/mariadb:10.6        "/opt/bitnami/script…"   20 minutes ago   Up 19 minutes   3306/tcp                                      ostechnix-mariadb-1

View Running Docker Containers

正如你看到的,我們正在運行 ostechnix-wordpress-1ostechnix-mariadb-1 這兩個容器。ostechnix-mariadb-1 容器鏈接到 ostechnix-wordpress-1 容器。

如果 Watchtower 發現 ostechnix-wordpress-1 容器有個新版本,它會先關閉與之相連接的 ostechnix-mariadb-1 容器 ,然後才會關閉 ostechnix-wordpress-1 容器。

更新 ostechnix-wordpress-1 容器後,Watchtower 會以正確的順序,且與最初啟動它們時使用的相同方式,重啟這兩個容器,以便應用程序正確恢復。在我們的例子中,首先啟動的是 ostechnix-mariadb-1 容器,然後是 ostechnix-wordpress-1 容器,以確保連接能夠繼續運行。

監控特定容器

默認情況下,Watchtower 將監控在它所指向的 Docker 守護進程中運行的所有 Docker 容器。

不過,你可以像下面這樣,通過指定容器名稱限制 Watchtower 監視特定的 Docker 容器。

$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower ostechnix-wordpress-1

在上方的例子中,watchtower 會忽略其他容器,只監視名為 ostechnix-wordpress-1 的容器更新情況。

如果你不指定任何參數,Watchtower 會照常監視所有運行中的 Docker 容器。

發送提示

或許你想收到容器更新的通知。你可以通過電子郵件、Slack 、MSTeams 以及 Gotify 發送通知。

下面這個例子展示了如何通過電子郵件發送通知。假設你已經設置了 SMTP 伺服器。

docker run -d 
  --name watchtower 
  -v /var/run/docker.sock:/var/run/docker.sock 
  -e WATCHTOWER_NOTIFICATIONS=email 
  -e WATCHTOWER_NOTIFICATION_EMAIL_FROM=fromaddress@gmail.com 
  -e WATCHTOWER_NOTIFICATION_EMAIL_TO=toaddress@gmail.com 
  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.gmail.com 
  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587 
  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=fromaddress@gmail.com 
  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=app_password 
  -e WATCHTOWER_NOTIFICATION_EMAIL_DELAY=2 
  containrrr/watchtower

參考下方 Watchtower Github 倉庫和 Watchtower 官方主頁獲取更多信息:

資料

via: https://ostechnix.com/automatically-update-running-docker-containers/

作者:sk 選題:lkxed 譯者:Donkey 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國