一、问题出现
前段时间,上头派了一个小任务,那就是需要在某台作为开发环境的服务器A的Docker上搭建一个私仓,用来存放开发环境的镜像,之前都是将镜像存放在测试环境的服务器上的,现在需要把它们进行分开存放。
二、具体流程
主要的流程为以下几点:
1、在服务器A上搭建一个registry私仓
2、配置镜像源
3、推送镜像
4、服务器B拉取镜像
三、服务器A上搭建一个registry私仓
1、拉取registry镜像,默认拉取的是最新镜像,如果有指定版本,那么需要具体指定。
docker pull registry
2、确认镜像拉取成功,查看镜像是否存在。
docker images
3、创建registry容器。
docker run -d --name registry -p 5000:5000 -v /home/personal_registry:/var/lib/registry registry
4、端口映射到本地的5000,通过本地访问以下地址,查看能否访问成功。
http://自己的局域网ip:5000/v2/_catalog
此时,接口访问成功,内容为空,则说明当前registry搭建成功,但是没有还没有任何镜像存在。
四、配置镜像源
如果其他服务器需要拉取服务器A上registry上的镜像的话,那么需要配置其daemon.json文件,在文件中配置地址是为了让docker知道去哪里拉取或上传镜像,否则将会报类似如下错误:
Error response from daemon: Get https://../v1/_ping: http: server gave HTTP response
具体解决方法如下:
打开etc/docker/daemon.json(具体看你docker安装在哪个位置,配置文件在何处),在insecure-registries位置配置上私仓的ip地址与端口。
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"insecure-registries": ["127.0.0.1:5000","私仓ip:端口"], //配置的端口,必须跟harbor服务的端口一致
"log-opts": {
"max-size": "10m"
}
}
五、推送镜像
可以通过服务器A或其他服务器向服务器A上的registry推送镜像,以下作为一个例子,将服务器A中的registry推送到服务器A上的registry。
1、registry镜像重命名
docker tag registry[:tag] 私仓ip:端口/registry[:tag]
重命名,给registry加上私仓的ip,是为了,推送镜像的时候能够让docker知道往何处推送镜像
2、推送镜像
docker push 私仓ip:端口/registry[:tag]
3、检查推送是否成功
通过以上步骤,如果没有出什么其他问题的话,镜像是推送成功的,可以通过访问以下地址查看是否有镜像信息,以此确认:
http://自己的局域网ip:5000/v2/_catalog
六、服务器B拉取镜像
拉取前,别忘了配置daemon.json文件
1、从私仓拉取镜像
docker pull 私仓ip:端口/registry[:tag]
2、确认镜像是否拉取成功
docker images
至此,从搭建私仓、推送镜像、拉取镜像已经完成。