一、问题出现

前段时间,上头派了一个小任务,那就是需要在某台作为开发环境的服务器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

 至此,从搭建私仓、推送镜像、拉取镜像已经完成。