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中國

    Linux中國

    捐贈 Let's Encrypt,共建安全的互聯網

    隨著 Mozilla、蘋果和谷歌對沃通和 StartCom 這兩家 CA 公司處罰落定,很多使用這兩家 CA 所簽發證書的網站紛紛尋求新的證書籤發商。有一個非盈利組織可以為大家提供了免費、可靠和安全的 SSL 證書服務,這就是 Let's Encrypt 項目。現在,它需要您的幫助
    Linux中國

    關於Linux防火牆iptables的面試問答

    Nishita Agarwal是Tecmint的用戶,她將分享關於她剛剛經歷的一家公司(印度的一家私人公司Pune)的面試經驗。在面試中她被問及許多不同的問題,但她是iptables方面的專家,因此她想分享這些關於iptables的問題和相應的答案給那些以後可能會進行相關面試的人。 所有的問題和相應的答案都基於Nishita Agarwal的記憶並經過了重寫。 嗨,朋友!我叫Nishita Agarwal。我已經取得了理學學士學位,我的專業集中在UNIX和它的變種(BSD,Linux)。它們一直深深的吸引著我。我在存儲方面有1年多的經驗。我正在尋求職業上的變化,並將供職於印度的P
    Linux中國

    Lets Encrypt 已被所有主流瀏覽器所信任

    旨在讓每個網站都能使用 HTTPS 加密的非贏利組織 Lets Encrypt 已經得了 IdenTrust的交叉簽名,這意味著其證書現在已經可以被所有主流的瀏覽器所信任。從這個裡程碑事件開始,訪問者訪問使用了Lets Encrypt 證書的網站不再需要特別配置就可以得到 HTTPS 安全保護了。 Lets Encrypt 的兩個中級證書 ...