环境:
有一个集群,里面有三台服务器
master: 192.168.1.106
nodes1: 192.168.1.104
nodes2: 192.168.1.105
操作系统: 使用的MacOS,windows同样有效
一. docker的Registry的安装和配置
选择将nodes1作为镜像仓库.
1. 在node节点上,获取并安装registry镜像
docker pull registry
2. 启动容器
docker run -p 5000:5000 -v /home/registry_images:/var/lib/registry -d --restart=always registry
这里将registry挂载到了本地home目录,避免docker重启后,镜像丢失
二. registry的使用
1. 修改master机器上的registry容器为所在的宿主机
/etc/docker/daemon.json
{ "insecure-registries":["192.168.1.104:5000"],//修改为registry所在容器的宿主机 "registry-mirrors": ["https://w52p8twk.mirror.aliyuncs.com"] }
"insecure-registries": 含义是,192.168.1.104不是一个安全的http请求,但请信任这个仓库地址.
我的registry在node节点上,node的ip是192.168.1.104
2. 重启docker
systemctl daemon-reload systemctl restart docker
3. 下载一个Nginx并上传到Registry仓库
尝试把 192.168.1.104:5000/Nginx:test上传到我们的Registry仓库
docker push 192.168.1.104:5000/Nginx:test
可以成功push,说明我们的仓库是创建成功了.
4. 下面在其他master和node上做同样的操作. 修改/etc/docker/daemon.json文件
{ "insecure-registries":["192.168.1.104:5000"],"registry-mirrors": ["https://w52p8twk.mirror.aliyuncs.com"] }
重启docker
systemctl daemon-reload
systemctl restart docker
遇到的问题:
所有设置都没问题,但是上传就是失败
查询日志
cd /var/log tail -200f messages
错误信息如下:
Attempting next endpoint for push after error: Get https://192.168.198.142:5000/v2/: http: server gave HTTP response to HTTPS client"
出现这个问题有两种情况
1. 没有配置"insecure-registries":["192.168.1.104:5000"], 可以确定我是配置了的,上面有具体方法
2. 没有关闭防火墙
setenforce 0 关闭防火墙
查询防火墙
getenforce
5. 查询上传到仓库的镜像
有两个方法
方法一: 去镜像仓库地址查询:
cd /home/registry_images
详细目录如下:
cd /home/registry_images/docker/registry/v2/repositories
这个目录是我设置的镜像仓库在本地的挂载目录.
方法二: 通过接口查询
curl -XGET http:192.168.1.104:5000/v2/_catalog
{"repositories":["Nginx"]}
6. 查询仓库的tag标签
curl -XGET http:192.168.1.104:5000/v2/Nginx/tags/list
{"errors":[{"code":"NAME_UNKNOWN","message":"repositoryname not known toregistry","detail":{"name":"image_name"}}]}
curl -XGET http:192.168.1.104:5000/v2/Nginx/tags/list
{"name":"Nginx","tags":["latest"]}