docker-registry2(docker-distribution)环境搭建
前面一篇博客在介绍京东speedy安装时顺带介绍了docker-regisry1的安装,但是registry1是python语言写的,而现在registry2版本即docker distribution更加安全和快速,并且是用go语言写的,docker1.6及其以上版本已经不再支持registry:1,本文就介绍下怎么在本地安装运行distribution。
前面一篇博客在介绍京东speedy安装时顺带介绍了docker-regisry1的安装,但是registry1是python语言写的,而现在registry2版本即docker distribution更加安全和快速,并且是用go语言写的,docker1.6及其以上版本已经不再支持registry:1,本文就介绍下怎么在本地安装运行distribution。
首先介绍一下环境,我是在centos7上安装的,ip地址是192.168.1.104。另外,要保证golang语言的版本在1.5以上,不然提示一堆错误,比如crypto中的sha512错误。我设置的环境变量中GOPATH=/root/goprojects,GOROOT=/usr/local/go
第一步:执行命令 mkdir -p /var/lib/registry,创建存储镜像文件的目录
第二步:执行go get github.com/docker/distribution/cmd/registry下载并安装distribution,按照github官方给的文档,在该步骤执行后就能完成安装,但是distribution中用的的包并不能正常下载,比如安装过程中会提示recognize import golang.org/x/crypto/bcrypt/.解决办法是到github上下载crypto项目,然后再$GOPATH/src/下建立golang.org/x/目录并把crypto项目解压到该目录下,依次这样做直到成功安装。
第三步:执行$GOPATH/bin/registry --version会显示版本
执行$GOPATH/bin/registry $GOPATH/src/github.com/docker/distribution/cmd/registry/config-example.yml运行registry
注意:执行push命令的机器docker版本应该大于1.6不然会提示错误
除此之外,执行docker push命令时还有可能报如下错误:
The push refers to a repository [192.168.1.104:5000/base] (len: 1)
unable to ping registry endpoint https://192.168.1.104:5000/v0/
v2 ping attempt failed with error: Get https://192.168.1.104:5000/v2/: tls: oversized record received with length 20527
v1 ping attempt failed with error: Get https://192.168.1.104:5000/v1/_ping: tls: oversized record received with length 20527
这个是因为验证的原因,简单地处理方式只需在执行push命令的机器上执行service docker stop停止docker服务,然后执行/usr/bin/docker daemon --insecure-registry=192.168.1.104:5000,重新启动,然后就能重新push成功了。该方式只是简单策略,真正解决该问题需要搞清楚registry:2的验证方式,这个我以后要深入研究。
这是第一次安装的过程,安装完成后可能自己会更改代码,然后需要重复性的编译,需要如下配置:
首先,进入$GOPATH/src/github.com/docker/distribution目录,该目录中有Makefile文件,但是直接执行make命令会报如下错误:
/bin/sh: golint: command not found
+ build
registry/storage/driver/testsuites/testsuites.go:19:2: cannot find package "gopkg.in/check.v1" in any of:
解决方式是下载安装godep和golint,命令如下:go get github.com/tools/godep github.com/golang/lint/golint,但同样会出现
package golang.org/x/tools/go/gcimporter: unrecognized import path "golang.org/x/tools/go/gcimporter"
package golang.org/x/tools/go/types: unrecognized import path "golang.org/x/tools/go/types"
出现这种错误的原因是types、gcimporter、exact包版本太老或者不存在,根本原因还是因为长城防火墙的原因,将golang.org网站墙了,go get命令不能下载依赖包,解决的方法是自己翻墙去golang.org/x/tools去下载,网站会跳转到https://go.googlesource.com/tools/+/master/go/,然后可以下载需要的包然后放到对应目录下了。
并不是所有的人都方便翻墙,在这里我把下载好的三个包types、gcimporter、exact分别存到csdn资源上,以下是地址,大家去下吧:
gcimporter: http://download.csdn.net/detail/yuanfang_way/9245579
exact: http://download.csdn.net/detail/yuanfang_way/9245563
types: http://download.csdn.net/detail/yuanfang_way/9245607
至此,可以编译成功了。
更多推荐
所有评论(0)