如何使用 Watchtower 自动更新正在运行的 Docker 容器
创始人
2024-03-02 11:59:19
0

使用 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中国 荣誉推出

相关内容

阿里云CentOS镜像源配...
在开源世界的广袤版图中,CentOS以其卓越的稳定性与坚实的可靠性...
2025-06-17 06:11:09
在CentOS系统中为Do...
理解Docker存储的核心机制:驱动与分层管理 在CentOS系统...
2025-06-16 07:41:58
下一个25年,AI可以为人...
2013年,电影《Her》上映时,观众们还会觉得与主角自然交谈、对...
2025-06-13 16:16:04
Docker 4.42 版...
IT之家 6 月 12 日消息,科技媒体 linuxiac 昨日(...
2025-06-12 15:13:33
我的docker随笔39:...
本文介绍在容器中修改时间而不影响宿主机的系统时间。 问题提出 某容...
2025-06-01 18:45:21
【Docker】Netwo...
文章目录网络情况查看宿主机网络情况 `ifconfig&#...
2025-06-01 12:34:38

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...