一、Watchtower介绍
1.1 Watchtower简介
Watchtower可以自动执行 Docker 容器基础映像更新的过程。Watchtower 将拉下您的新映像,优雅地关闭现有容器,然后使用最初部署时使用的相同选项重新启动它。
1.2 Watchtower使用注意
- Watchtower 旨在用于家庭实验室、媒体中心、本地开发环境等,请不要使用在生产环境。
1.3 Watchtower使用场景
Watchtower主要用于个人环境下自动更新家庭个人服务器中的容器应用。但在生产环境中不适合使用该工具,而是应该使用像Kubernetes这样的容器管理工具。Kubernetes提供了自动更新容器的功能,通过设置滚动更新策略,可以在容器更新时保证应用的高可用性。因此,在生产环境中应考虑使用Kubernetes来进行容器管理和自动更新的功能。
1.4 Docker容器介绍
Docker容器是一种轻量级的虚拟化技术,用于将应用程序和其依赖项打包在一个可移植的容器中。容器通过隔离应用程序的运行环境,使其可以在不同的操作系统和硬件平台上运行。与传统的虚拟机相比,Docker容器更加轻量级和可移植。Docker容器共享主机操作系统的内核,因此可以在同一个主机上同时运行多个容器,而不像虚拟机需要为每个虚拟机分配一定的资源和独立的操作系统。这使得容器在资源利用和性能方面更加高效。Docker容器提供了一个灵活且可控的环境,可以在任何地方运行应用程序,并且能够快速部署和扩展应用程序。它可以帮助开发人员简化应用程序的交付和部署,并提供了更高效的资源利用和更好的可移植性。
二、本次实践介绍
2.1 本地环境规划
本次实践为个人测试环境,操作系统版本为centos7.6。
hostname | IP地址 | 操作系统版本 | Docker版本 |
---|---|---|---|
jeven | 192.168.3.166 | centos 7.6 | 2 20.10.17 |
2.2 本次实践介绍
1.本次实践部署环境为个人测试环境,生产环境请谨慎;
2.在Docker环境下使用Docker容器自动更新工具Watchtower。三、本地环境检查
3.1 检查Docker服务状态
检查Docker服务是否正常运行,确保Docker正常运行。
[root@jeven ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2023-12-19 13:51:24 CST; 23h ago
Docs: https://docs.docker.com
Main PID: 11579 (dockerd)
Tasks: 23
Memory: 605.0M
CGroup: /system.slice/docker.service
3.2 检查Docker版本
检查Docker版本
[root@jeven ~]# docker -v
Docker version 20.10.17, build 100c701
3.3 检查docker compose 版本
检查Docker compose版本,确保2.0以上版本。
[root@jeven ~]# docker compose version
Docker Compose version v2.6.0
四、下载Watchtower镜像
从docker hub拉取Watchtower镜像
[root@jeven ~]# docker pull containrrr/watchtower
Using default tag: latest
latest: Pulling from containrrr/watchtower
e0c7a3e4c313: Pull complete
db1b75c6d82b: Pull complete
5bdc0dfc1598: Pull complete
Digest: sha256:3283e0b5be326d77ff4f4e8b7a91d46aaa1d511c74877b5a32f161548812d00c
Status: Downloaded newer image for containrrr/watchtower:latest
docker.io/containrrr/watchtower:latest
五、Watchtower的基本使用
5.1更新宿主机的所有容器
使用以下命令,更新宿主机的所有容器,也包括 Watchtower 本身。
docker run -d \
--name watchtower \
--volume /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
5.2 指定某个容器进行监视
如果指向监视某一个容器进行自定更新,则在上述命令后面加上容器名即可。
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
miniboard
5.3 指定容器的更新频率
Watchtower 默认情况下 24 小时会检查一次镜像更新。设置--interval 选项更新时间,默认单位秒。
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--interval 6
可以使用--schedule选项, 设定定时更新任务,定时任务为6 字段来表示执行时间,第一个字段表示秒。
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--schedule "0 30 20 * * 5"
表示每周五晚上8点半点检查一次。
5.4 自定清理旧镜像
可以使用--cleanup 选项,这样每次更新都会把旧的镜像清理掉。
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup
用于清理无用的Docker卷。它会删除所有没有关联到任何容器的卷,以释放磁盘空间。
docker volume prune
五、官方参考文档
更多Watchtower详细使用说明,可以参考官方文档。