Watchtower 是一款应用程序,可监控正在运行的容器中镜像的更改。当您将更新推送到 Docker 注册表时,Watchtower 会检测到更改并提取镜像的新副本。然后,它将使用新镜像和与原始镜像相同的启动选项重新启动容器。
例如,假设您有一个名为 的容器化应用程序my-app
正在运行,其端口映射为8090:3000
。您的团队使用 CI/CD 来推出应用程序的每日更新。迭代完成后,您将标记镜像并将其推送到注册表。Watchtower 已配置为每 60 秒检查一次注册表。60 秒迭代完成后,它会检测到镜像的更改my-app
并将其拉下。然后,Watchtower 会正常关闭my-app
容器,然后使用端口映射为 的新镜像重新启动它8090:3000
。
要使所有这些功能正常运作,Watchtower 需要能够访问 Docker API。创建 Watchtower 容器时,您需要将其/var/run/docker.sock
作为卷挂载。
使用瞭望塔
现在,让我们开始运行 Watchtower。如果您已经安装了 Docker,则可以使用本地系统,或者使用 Docker 认证发行版作为镜像的云服务器之一。在下面的示例中,我们将创建一个使用以下启动选项的 Watchtower 容器。容器将始终重新启动。它将挂载 /var/run/docker.sock
到/var/run/docker.sock
容器上。默认情况下,Watchtower 每 5 分钟检查一次镜像注册表。我们希望它每 30 秒检查一次,因此使用将-i
轮询间隔设置为 的标志30
。有关 Watchtower 选项的完整列表,请访问 GitHub自述文件。
docker run -d --name watchtower --restart always -v /var/run/docker.sock:/var/run/docker.sock v2tec/watchtower -i 30
现在 Watchtower 容器正在运行,让我们创建一个容器供它监控。在您的系统上,创建一个index.html
文件。例如:
<html> <header> <title>我的网页</title> </header> <body>这是我的网页。</body></html>
现在创建一个使用 nginx 作为基础镜像的 Dockerfile。将index.html
文件复制到/usr/share/nginx/html/index.html
容器上。设置/usr/share/nginx/html
为工作目录。
Dockerfile:
从 nginx 复制 index.html /usr/share/nginx/html/index.html 工作目录 /usr/share/nginx/html
Dockerfile 准备就绪后,构建您的镜像。您需要使用 Docker Hub 用户名或私有注册表上镜像的完整 URL 来标记镜像。在下面的示例中,我将使用我的 Docker Hub 用户名。
docker build-t rivethead42/nginx-f Dockerfile。
登录并推送镜像:
docker 登录docker push rivethead42/nginx
使用您推送到注册表的图像创建一个容器:
docker run -d —name my-web-page -p 80:80 —restart always rivethead42/nginx
执行docker ps
以确保您的容器正在运行。验证容器正在运行后,您可以等待几分钟再进行任何更改。我们将检查容器的状态以验证 Watchtower 是否已更新它。
docker ps
现在my-web-page
容器已经运行了几分钟,让我们对index.html
文件进行一些更改。
<html> <header> <title>我的主页</title> </header> <body>这是我的网页,你喜欢吗?</body></html>
执行docker ps
并通过检查状态来记录容器运行的时间。重建镜像并将其推送到 Docker Hub:
docker psdocker build -t rivethead42/nginx -f Dockerfile .docker push rivethead42/nginx
现在我们等待 Watchtower 检测到变化。定期运行docker ps
以检查容器状态。当它小于原始状态时,我们就知道 Watchtower 已经发挥了它的魔力。
docker ps
如您所见,使用 Watchtower 可以非常轻松地使容器保持最新状态。如果您想了解使用 Docker 可以做的其他事情,请查看我的最新课程“边做边学 Docker”。
请先 登录后发表评论 ~