Docker 通过watchtower对registry私有库的容器的自动更新

小白防忘.
首先得准备好两个虚拟机,我自己用的是Ubuntu镜像,并且两台虚拟机能够ping通,不能通信就不能进行镜像的拉取之类的操作了,后面会有解释为什么使用两台虚拟机。registry和watchtower可以在任意一个准备的虚拟机上运行,示例使用的所有命令都是通过root账户进行操作。
1.配置registry
registry私有库为了安全考虑是需要实现登录认证的,我自己用的是一种最简单的方式——通过htpasswd实现登录认证。
registry:2.7.0以下版本
如果使用的registry镜像在2.7.0以下可以直接使用下面的命令生成htpasswd文件(registry:2版本的镜像不能用下面的方法)

docker run --entrypoint htpasswd registry:2.7.0 -Bbn username password > /root/registry/auth/passwd

以下参数均可自定义:
username:登录的用户名
password:登录的密码
/root/registry/auth/:生成文件的路径
passwd:生成的文件名
registry:2.7.0以上版本或者registry:2
因为docker考虑了进程安全问题,所以在registry:2.7.0以上版本不能使用上面的命令直接生成htpasswd。所以需要下载一个apache2用来生成登录所需要的htpasswd。

apt-get install apache2
#安装完成之后再执行下面的命令,参数和上面提供的参数使用方式相同
htpasswd -Bbn username password > /root/registry/auth/passwd

做完准备工作,就先把registry容器跑起来。

docker run -dp 5000:5000 \
--restart=always --name registry \
-v /root/registry/data:/var/lib/registry \
-v /root/registry/auth:/auth \
-e REGISTRY_AUTH=htpasswd \ 
-e REGISTRY_AUTH_HTPASSWD_REALM=Registry_Realm \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/passwd \
registry:2

直接在浏览器上访问 运行registry容器的虚拟机的ip:5000/v2,在浏览器上能进行登录就表示配置成功了,下图为登录成功后的显示结果。
registry配置成功效果图别高兴太早,在虚拟机上使用docker login ip:5000,不出意外的会报错。需要修改docker的配置文件解决问题。

vi /etc/docker/daemon.json
#在打开的文件中添加(没有就自己创建)
{
		#ip为运行registry容器的服务器的ip地址
    "insecure-registries": ["http://ip:5000"]
}
#保存之后重启docker即可生效
systemctl restart docker
#重启docker之后执行
docker login ip:5000 #根据提示输入之前设置的用户名和密码即可。

登录成功后会自动生成/root/.docker/config.json文件,该文件里就是registry的认证信息,等会配置watchtower的时候会用到。
2.配置watchtower
watchtower的运行机制
因为watchtower的工作机制是定时的扫描一遍所有正在运行的Docker容器的镜像是否被更改,如果watchtower检测到容器的镜像发生了变化,就会将仓库中的镜像拉倒本地,然后将与之对应的容器关闭,最后用容器最初部署时使用的配置信息重新启动容器,从而实现容器的自动更新。
至少需要两台虚拟机的原因
watchtower容器需要和自己的项目容器放在同一个虚拟机内,这样watchtower才能检测到自己部署的项目容器的镜像是否被更新了。又因为自己的项目容器会一直运行,所以是做不到在项目容器运行的虚拟机上直接用docker build;docker rmi;docker tag;docker push;命令更新私有库上的项目镜像的。因为不能删除正在运行中的容器的镜像,所以就不能用docker tag命令将新版本的镜像命名为已经存在的同名同版本号的镜像,也就无法实现对registry的更新了。所以需要一台虚拟机执行docker build;docker rmi;docker tag;docker push;命令,以实现对registry的更新;另一台虚拟机运行watchtower和自己的项目容器,至于registry容器运行在那一台虚拟机里都可以。
搞清楚上面两点,直接下来只需要docker run watchtower就行了,直接上命令吧。

docker run -d --registry=always --name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \ #监视所有在docker中运行的容器
#config.json为登录私有库的认证信息,我用的是root账户,所以使用/root/目录,根据自己的账号改变
-v /root/.docker/config.json:/config.json \ 
containrrr/watchtower \
-i 10 -c # -i 10 表示每隔10s扫描一次 -c 表示清除所有镜像

其他配置可以参考watchtower官网
3.实际的更新流程
docker ps 查看正在运行中的容器
docker ps主要查看项目容器的镜像名称:ip:5000/watch:v1.0
然后在另一台虚拟机里进行更新操作

docker build -t index:v3 -f htmlfile . #构建新版本的镜像
docker rmi ip:5000/watch:v1.0 #删除之前的老版镜像
docker tag index:v3 ip:5000/watch:v1.0 #创建新版的镜像
docker push ip:5000/watch:v1.0 #对registry私有库里的镜像更新
#特别注意push到私有库的镜像名称必须和运行的项目容器的镜像名称相同,不然watchtower会判定项目容器的镜像没有更新。

最后在运行项目容器的虚拟机里执行docker logs就能看到watchtower已经完成了对容器的更新操作了。
docker logs欢迎评论区讨论其他写法,不积跬步无以至千里。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Docker中,可以通过使用Portus来实现docker私有Registry的可视化。Portus是一个带有UI管理功能的仓管理软件,它可以与Registry一起使用,提供更方便的图形化用户界面来浏览、检索和管理Docker镜像仓。通过Portus,用户可以通过浏览器来管理项目和命名空间,进行权限管理,进行镜像的复制和同步,以及记录和追踪所有对镜像仓的操作,用于审计管理。同时,Portus还支持与企业现有的AD/LDAP进行集成,方便进行鉴权认证管理。总之,使用Portus可以使docker私有Registry的管理更加简单和直观。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Docker之企业级可视化私有Harbor(安装、快速、入门)](https://blog.csdn.net/qq_41417660/article/details/106809535)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [docker私有镜像仓registry及其可视化系统Portus的搭建【转】](https://blog.csdn.net/weixin_33898876/article/details/85966303)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值