缘起
这是介绍docker容器的第五篇文章。本系列其他文章链接如下:
- 容器(1):容器相关知识简介——容器化、docker、docker-compose、Kubernetes / K8s等
- 容器(2):docker最佳实践指南——docker-compose和Portainer
- 容器(3):docker最佳实践指南——数据卷volume的管理
- 容器(4):docker最佳实践指南——容器更新、升级和迁移
- 容器(6):使用Docker时的一些误区、坏习惯和问题
上一篇文章提到了如何更新或升级容器。我在更新docker容器时发现,其中很多容器都已经两三年没更新了,版本跨越太多,这就导致有些容器没法直接更新。而有些容器则更新不多,可以直接更新。由于各个容器更新频率不同,而且创建的容器优比较多,我不想隔几天就手动去检查一下容器有没有更新可用。于是我就想到了一个问题:有没有工具可以自动监测容器的更新呢?
当然是有的,比如WatchTower,但WatchTower是自动更新容器的工具,我并不想让它自动更新,我只想知道容器有没有更新可用,所以就一直没用。最近,我发现有个叫WUD(What’s Up Docker)的工具可以监测容器的更新,并且简单易用,就打算尝试一下。
前提
- 已安装Docker和docker-compose
- 了解Docker的基本概念和基本用法
- 使用docker-compose管理容器(如果你没有使用docker-compose管理容器,也不想使用docker-compose管理容器,那么本篇文章仅供参考)
WUD(What’s Up Docker)简介
WUD(What’s Up Docker)是一个开源的Docker容器更新监测工具,它可以监测Docker Hub上的容器镜像是否有更新,并且可以通过邮件、Slack等方式通知用户。
WUD安装与使用
安装WUD
WUD的安装十分简单,按照官方文档的说明即可。这里我们使用docker-compose来安装WUD,docker-compose.yml
文件如下:
|
|
启动后在浏览器中访问http://localhost:3000
即可。
创建管理账户
但上述方法安装的WUD是没有管理账户的,在本地访问尚可,但如果想把服务暴露到公网,就需要创建一个管理账户。WUD提供了两种方法来创建管理账户:
- 使用环境变量将用户名和密码传递给WUD容器
- 使用OpenidConnect(OIDC)来创建管理账户
详见[官方文档](https://getwud.github.io/wud/#/configuration/authentications/)。
第一种方法非常简单便捷,我就直接使用了。我们只需要在docker-compose.yml
文件中添加以下环境变量即可:
|
|
其中密码是以hash的形式存储的,我们可以使用hrpasswd
命令来生成密码的hash:
|
|
如果你没有安装htpasswd
命令,可以在这个网站上生成密码的hash。
需要注意的是,生成的hash值以用户名开头,我们只需要取出冒号后面的部分即可。冒号后面的部分可能含有$
符号,所以我们需要用$$
来替换掉$
符号。比如原hash值为$apr1$2c4a3d5e$e0f8b7c6d7f8b7c6d7f8b7c6
,那么我们需要将其替换为$$apr1$$2c4a3d5e$$e0f8b7c6d7f8b7c6d7f8b7c6
。
再重新启动WUD容器,进入浏览器,可以看到如下登录界面:
输入你的用户名和密码就可以登录了,注意输入的是密码,不需要输入hash值。
WUD监测容器更新
通过网页界面可以监测容器的更新状态,登录后可以看到如下界面:
可见WUD检测到了37个容器,其中10个有更新的版本可用。点击进去可用查看详情:
可以看到容器的当前版本号以及最新的版本号,我们可以根据需求来决定是否更新容器。
设置WUD监测规则
在WUD中,我们看到的容器状态可能是这样的:
这里面有两个问题:
- 我们的容器使用的标签(tag)是数字形式的,但WUD会监测所有标签,包括一些不规则的标签,例如图中authelia最新的标签是
feat-i18n-lang-attr
。如果我们只希望监测数字形式的标签,就需要设置监测规则。 - 当我们部署一个服务时,可能会使用多个容器来部署这个服务,例如chevereto的服务就需要两个容器来部署,一个是
chevereto-free
,一个是chevereto-free-database
。我们不需要监测所有的容器,只需要监测chevereto-free
这个容器就可以了。否则如果监测到chevereto-free-database
有更新了,而chevereto-free
暂无更新可用,我们只更新chevereto-free-database
,可能导致兼容性的问题。我们也需要设置监测规则来避免这种情况。
包含某些标签
对于第一种情况,我们可以在对应容器的docker-compose.yml
文件中添加wud.tag.include
来告诉WUD我们只希望监测哪些标签。比如我们只希望监测数字形式如xx.yy.zz
形式的标签,那么我们可以添加如下配置:
|
|
这种方式是正则表达式的方式来匹配标签的,^
表示开头,\d
表示数字,+
表示一个或多个,\.
表示点号,$$
表示结尾。这样就可以匹配到数字形式的标签了。
xx.yy.zz
形式的标签中,一般xx
表示主版本号,yy
表示次版本号,zz
表示修订号。我们可以根据需求来设置监测规则,比如只监测主版本号和次版本号的更新,忽略掉修订号,那么我们可以将正则表达式改为:
|
|
这样我们把xx.yy
用括号括起来表示为一个分组,然后在=>
后面指定了我们只希望监测xx.yy
的更新。这样就可以只监测主版本号和次版本号的更新了。
不监测某些容器
对于第二种情况,我们可以在对应容器的docker-compose.yml
文件中添加wud.watch
来告诉WUD我们是否监测这个容器。比如我们不希望监测chevereto-free-database
这个容器,那么我们可以添加如下配置:
|
|
这样就可以不监测chevereto-free-database
这个容器了。