Docker 官方提供了一个搭建私有仓库的镜像 registry ,只需把镜像下载下来,运行容器并暴露5000端口,就可以使用了。
$ docker pull registry:2 $ docker run -d -v /opt/registry:/var/lib/registry -p 8080:5000 --name registry-test registry:2
Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。
浏览器访问http://localhost:8080/v2,出现下面情况说明registry运行正常。
#要通过docker tag将该镜像标志为要推送到私有仓库: $ docker tag nginx:latest localhost:8080/nginx:latest #通过 docker push 命令将 nginx 镜像 push到私有仓库中: $ docker push localhost:8080/nginx:latest
再去访问 http://localhost:8080/v2/_catalog 查看私有仓库目录,可以看到刚上传的镜像了:
#拉取本地私有仓库的镜像,使用如下命令: $ docker pull localhost:8080/nginx:latest
问题1.
Docker默认使用的是https,但是搭建私有镜像默认使用的是http服务,所以在拉去私有镜像或者下载时会出现以下类似的错误:
The push refers to repository [aiho.site:8080/redis]
Get https://aiho.site:8080/v2/: http: server gave HTTP response to HTTPS client
解决办法:
修改docker daemon的启动参数(需要访问仓库的其他机器),添加如下参数,表示信任这个私有仓库,不进行安全证书检查(centos7为例)
$ vi /etc/docker/daemon.json { "insecure-registries":["本地仓库所在IP:8080"] }
下面是我的配置:
#然后重启docker服务,重启registry服务,
$ systemctl restart docker
$ docker restart registry-test
再去推送到本地仓库活或者其他IP拉取都正常了!!