如何自动更新运行Docker容器
WAKETOWER是一个免费的开源应用程序,允许我们监视运行的Docker容器并在查找基本镜像中的任何更改时自动更新它们。
当WatkTower发现需要更新运行容器时,它将通过将其发送Sigterm信号来优雅地停止运行容器。
然后它将下载新镜像,最后重新启动包含最初部署时使用的选项的容器。
一切都将在后台自动完成,因此不需要用户干预。
在本教程中,我们将看到如何在UNIX的操作系统中使用WatchTower自动更新运行的Docker容器。
我在CentOS 7最小版中测试了本教程,但所有Linux发行版的过程都是相同的。
WathTower - 自动更新运行Docker容器
安装WatchTower.
WathTower本身可作为Docker Image提供。
所以,部署它并不是什么大不了的。
在Linux上安装Docker,并开始运行WatchTower无法立即监控Docker容器。
安装Docker后,我们可以使用以下命令作为root用户部署WatchTower容器:
# docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock v2tec/watchtower
此命令将拉动WatchTower的最新镜像,并启动WatkTower容器。
示例输出:
Unable to find image 'v2tec/watchtower:latest' locally latest: Pulling from v2tec/watchtower a3ed95caeb02: Pull complete 802d894958a2: Pull complete 9916c27d2815: Pull complete Digest: sha256:d89ea18b6332cc83639771fda274ebfd76f7042856d8f4997e99c7925ad02ae9 Status: Downloaded newer image for v2tec/watchtower:latest e85c923f2e4dd22a62c12b038ea9694ba9245dcd835f210e1a1f902ee311e004
用法
WAKETOWER现在已经开始使用系统上的其他运行容器。
我们可以使用命令查看运行Docker容器列表:
# docker ps
示例输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e85c923f2e4d v2tec/watchtower "/watchtower" 3 minutes ago Up 3 minutes watchtower 58543e6ed18a centos:latest "/bin/bash" 5 minutes ago Up 5 minutes theitroad
在上面的输出中看到,WatkTower容器与另一个名为"OniToad"的容器一起运行。
从现在开始,WathTower每隔几分钟就开始观看这个容器。
如果在此容器的基础镜像中找到任何更改,它将优雅地关闭"OniTorad"容器,并使用最初使用相同选项的新镜像重新启动它。
同样,它将每隔几分钟自动检查所有运行容器的更新,并自动更新它们。
默认情况下,WatchTower将监控在Docker守护程序中运行的所有Docker容器。
但是,我们可以通过指定容器的名称限制WatchTower来监视特定的Docker容器,如下所示。
# docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock v2tec/watchtower theitroad
在上面的示例中,WathTower只将监视名为"OniTorad"的容器以进行更新,而其他运行容器将被忽略。
如果我们未指定任何参数,则WalkTower将像往常一样监控所有正在运行的Docker容器。
在监控多个链接容器时,无法足够智能。
让我们说你正在运行一个名为"nginx"的两个容器和"wordpress"容器,它链接到"nginx"容器。
如果WatkTower找到"nginx"容器的更新,它将首先关闭链接的容器:"WordPress",然后停止nginx容器。
然后,它将以正确的顺序重新启动两个容器,以便应用程序正确备份。
在我们的情况下,nginx容器首先开始,然后是WordPress容器,以确保链接继续工作。