Watchtower 是一个可以实现自动化更新 Docker 基础镜像与容器的实用工具。它监视正在运行的容器以及相关的镜像,当检测到 registry 中的镜像与本地的镜像有差异时,它会拉取最新镜像并使用最初部署时相同的参数重新启动相应的容器。
命令:
docker run -d \ --name watchtower \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower
所有容器都会自动更新,也包括 Watchtower 本身。
官方给出的默认启动命令在长期使用后会堆积非常多的标签为 none 的旧镜像,如果放任不管会占用大量的磁盘空间。要避免这种情况可以加入 –cleanup 选项,这样每次更新都会把旧的镜像清理掉。
docker run -d \ --name watchtower \ --restart unless-stopped \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower \ --cleanup
--cleanup
选项可以简写为 -c
:
docker run -d \ --name watchtower \ --restart unless-stopped \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower -c
某些容器可能需要稳定的运行,经常更新或重启可能会造成一些问题,这时我们可以使用一些选项参数来选择与控制容器的更新。
假设我们只想更新 nginx、redis 这两个容器,我们可以把容器名称追加到启动命令的最后面,就像下面这个例子:
docker run -d \ --name watchtower \ --restart unless-stopped \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower -c \ nginx redis
手动检查更新
前面的使用方式都是让 Watchtower 以 detached
(后台)模式在运行并自动更新容器,而 Watchtower 也支持以 foreground
(前台)模式来使用,即运行一次退出并删掉容器,来实现手动更新容器。这对于偶尔更新一次那些不在自动更新列表中的容器非常有用。
对于 foreground
模式,需要加上 --run-once
这个专用的选项。下面的例子 Docker 会运行一次 Watchtower 并检查 aria2-pro
容器的基础镜像更新,最后删掉本次运行创建的 Watchtower 容器。
docker run --rm \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower -c \ --run-once \ aria2-pro
--run-once
可以简写为 -R
:
docker run --rm \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower -cR \ aria2-pro
Qi 问的问题 2022年7月27日