前言
原来一直用的是docker hub来push和pull自己的镜像,可是国内pull/push到dockerhub速度实在不敢恭维,而且经常出现handshake timeout的问题,所以思索着能不能有国内的镜像源选择,daocloud是不错的国内选择,可提供pull的镜像也挺多的,但是pull可以,push得另外收费(200一个月)。我自己有三个私有的镜像需要push/pull的,所以思考着干脆自己搭建一个私有的docker registry,国内的服务器上/下载速度怎么都会比直接到docker hub拉取和推送镜像快,但是在搭建过程中遇到了各种各样的琐碎的问题,这里就做一个梳理.
前提:一台有公网IP的主机,最好还有域名[我用的是腾讯云主机,域名是Godaddy买的,域名解析也在Godaddy~]
Docker Registry
首先我们确保我们安装了docker engine,这是我们的前提,然后我们先拉取docker registry的镜像
sudo docker pull registry
Tips 这个默认是从docker hub拉取的,不是很大,可以挂着慢慢等,如果还是嫌慢的话,还有个办法来自daocloud官网给出的配置 Docker 加速器,提取出来就是下面这一行的linux命令:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://0835afe2.m.daocloud.io
其实就是下载一个set_mirror.sh脚本并运行它,脚本好像会在/etc/docker/目录下创建一个daemon.json的文件,至少我看到是这样的,具体其他做了什么操作可以仔细看看它给的set_mirror.sh脚本
[官方对set_mirror.sh说明:该脚本可以将 –registry-mirror 加入到你的 Docker 配置文件 /etc/default/docker 中(不是/etc/docker/?)]
再去把registry pull回来,可以感觉明显快很多
获取证书
docker push/pull 操作不知道从哪个版本开始需要https了,所以我们得给我们的主机弄一个https先.
我的主机是挂了域名的(用domain.com代表吧),而从[官网Get a certificate]可以看出,docker registry如果要https,则需要两个东西,一个是.crt文件,一个是.key文件,有了这两个就可以让我们的docker registry走https,验证ssl了
其实这两个文件都可以自签署,详细办法后面再说,是使用openssl生成的,这种办法比较麻烦,而且docker还不一定认这种自签署的证书[Get https://domain.com:5000/v1/_ping: x509: certificate signed by unknown authority问题]
所以为了提高一次性成功率,我决定先折腾DV颁发的权威机构签署的证书(还有OV,EV,相关CA证书说明可以看这篇),因为正好腾讯云自己有提供DV SSL免费一年的证书[你要说我穷,我也没办法],之前没搞过https和证书这些东西,借这个免费一年的DV SSL先上上手,具体怎么操作我就是按照腾讯云自己给出的文档,为我的域名提交了申请,然后添加了CNAME,然后耐心等待验