如何使用 Watchtower 自动更新正在运行的 Docker 容器

admin 2022年8月15日21:28:01评论20 views字数 4269阅读14分13秒阅读模式
 
如何使用 Watchtower 自动更新正在运行的 Docker 容器
导读:使用 Watchtower 自动更新 Docker 容器基础镜像                       
本文字数:4992,阅读时长大约:6分钟

使用 Watchtower 自动更新 Docker 容器基础镜像

对开发运维人员来说,保持 Docker 容器为最新版本是重要工作之一。手动更新 Docker 容器是一项耗时的工作。这篇文章解释了 Watchtower 是什么,如何安装它,以及在 Linux 中如何 使用 Watchtower 自动更新正在运行的 Docker 容器 。

如何使用 Watchtower 自动更新正在运行的 Docker 容器

Watchtower 是什么?

Watchtower 是一款自由开源的应用,用来监控运行中的 Docker 容器,并且当它发现基础镜像被更改后,可以自动的更新容器。

若 Watchtower 发现一个运行中的容器需要更新,它会以发送 SIGTERM 信号的方式,优雅的结束运行中容器的运行。

它会下载新镜像,然后以最初部署时使用的方式,重启容器。所有文件会在后台自动下载,因此不需要用户的介入。

在这份指南中,我们将会明白如何在类 Unix 系统中使用 Watchtower 自动更新正在运行的 Docker 容器。

我已经在 CentOS 和 Ubuntu 中测试了这份指南,所有的 Linux 发行版中操作过程都一样。

如何使用 Watchtower 自动更新正在运行的 Docker 容器

在 Linux 中安装 Watchtower

可以通过 Docker 镜像的方式下载 Watchtower 。因此,部署它是小事一桩。在你的 Linux 中安装 Docker 镜像,然后运行 Watchtower 立即开始监控 Docker 容器。

参考下方指导在基于 PRM 和 DEB 包管理系统中安装 Docker

◈ 如何在 CentOS 中安装 Docker🔗 ostechnix.com
◈ 如何在 Ubuntu 中安装 Docker🔗 ostechnix.com
◈ 适用于 Linux 的 Docker 桌面初学者手册🔗 ostechnix.com

安装 Docker 后,你可以使用以下命令以 root 用户身份部署 Watchtower 容器:

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

如果你已经安装了 Docker 桌面版,以普通用户运行 Watchtower 容器。

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

该命令会拉取最新版的 watchtower 镜像,并运行 watchtower 容器。

输出样例:

  1. Unable to find image 'containrrr/watchtower:latest' locally
  2. latest: Pulling from containrrr/watchtower
  3. 1045b2f97fda: Pull complete
  4. 35a104a262d3: Pull complete
  5. 1a0671483169: Pull complete
  6. Digest: sha256:bbf9794a691b59ed2ed3089fec53844f14ada249ee5e372ff0e595b73f4e9ab3
  7. Status: Downloaded newer image for containrrr/watchtower:latest
  8. 91c104ef0e9896e8cd5ff30d9f13e728dbfad66443830ec2ac85dde6d7d37564

如何使用 Watchtower 自动更新正在运行的 Docker 容器

Run Watchtower Docker Container

如何使用 Watchtower 自动更新正在运行的 Docker 容器

使用 Watchtower 自动更新 Docker 容器

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

  1. $ docker ps

输出样例:

  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. 91c104ef0e98 containrrr/watchtower "/watchtower" 14 minutes ago Up 14 minutes 8080/tcp watchtower
  3. 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 自动更新正在运行的 Docker 容器

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

在监视多连接容器时,Watchtower 十分智能。

假设我们现在运行两个容器。

  1. $ docker ps

输出样例:

  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. 91c104ef0e98 containrrr/watchtower "/watchtower" 14 minutes ago Up 14 minutes 8080/tcp watchtower
  3. 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
  4. a895f082438a bitnami/mariadb:10.6 "/opt/bitnami/script…" 20 minutes ago Up 19 minutes 3306/tcp ostechnix-mariadb-1

如何使用 Watchtower 自动更新正在运行的 Docker 容器

View Running Docker Containers

正如你看到的,我们正在运行 ostechnix-wordpress-1 和 ostechnix-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 容器

监控特定容器

默认情况下,Watchtower 将监控在它所指向的 Docker 守护进程中运行的所有 Docker 容器。

不过,你可以像下面这样,通过指定容器名称限制 Watchtower 监视特定的 Docker 容器。

  1. $ 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 容器。

如何使用 Watchtower 自动更新正在运行的 Docker 容器

发送提示

或许你想收到容器更新的通知。你可以通过电子邮件、Slack 、MSTeams 以及 Gotify 发送通知。

下面这个例子展示了如何通过电子邮件发送通知。假设你已经设置了 SMTP 服务器。

  1. docker run -d
  2. --name watchtower
  3. -v /var/run/docker.sock:/var/run/docker.sock
  4. -e WATCHTOWER_NOTIFICATIONS=email
  5. -e WATCHTOWER_NOTIFICATION_EMAIL_FROM=fromaddress@gmail.com
  6. -e WATCHTOWER_NOTIFICATION_EMAIL_TO=toaddress@gmail.com
  7. -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.gmail.com
  8. -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587
  9. -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=fromaddress@gmail.com
  10. -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=app_password
  11. -e WATCHTOWER_NOTIFICATION_EMAIL_DELAY=2
  12. containrrr/watchtower

参考下方 Watchtower Github 仓库和 Watchtower 官方主页获取更多信息:

如何使用 Watchtower 自动更新正在运行的 Docker 容器

资料

◈ Watchtower GitHub🔗 github.com
◈ Watchtower 主页🔗 containrrr.dev

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

作者:sk 选题:lkxed 译者:Donkey 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如何使用 Watchtower 自动更新正在运行的 Docker 容器
LCTT 译者 :Donkey
🌟🌟🌟
如何使用 Watchtower 自动更新正在运行的 Docker 容器 | Linux 中国
翻译: 14.0 篇

|

贡献: 64 天
2022-06-09
2022-08-12
https://linux.cn/lctt/Donkey-Hao
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。

原文始发于微信公众号(Linux中国):如何使用 Watchtower 自动更新正在运行的 Docker 容器 | Linux 中国

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年8月15日21:28:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   如何使用 Watchtower 自动更新正在运行的 Docker 容器http://cn-sec.com/archives/1236119.html

发表评论

匿名网友 填写信息