这几天在做新公司的新集群架构,肯定要用到镜像仓库,之前只用过docker registry来启用一个仓库,管理挺不方便,所以这次决定使用harbor来搭建一个企业级的私有容器仓库。

harbor的具体搭建,其实挺简单的,去下载的官方的安装包,解压后,

./prepare
进行初始化配置,然后再install就行了

因为我搭建的Harbor仓库是在自己部署的Gitlab容器的服务器上,所以在最前端又用了nginx做了一个nginx做了反向代理,因为Harbor需要使用https,省事又自己弄了个自签证书

对于自签证书,现需要生成一个根证书,用于给自己做签名

openssl req -newkey rsa:4096 -nodes -sha256 -x509 -days 365 -keyout root.key -out root.crt

回车后按照提示输入国家、地区组织信息就行了

之后我们需要生成一个域名的证书签名,比如域名为 developerhome.net

openssl req -newkey rsa:4096 -nodes -sha256 -keyout developerhome.net.key -out server.csr

同样回车后按提示输入信息

现在我们生成证书

openssl x509 -req -days 365 -in server.csr -CA root.crt -CAkey root.key -CAcreateserial -out developerhome.net.crt 

之后只要放在一个路径,然后对 harbor.cfg 中做修改就行了,不过如果和我一样使用了nginx做反向代理,则需要在nginx中做ssl的配置


...

ssl_certificate /cert/developerhome.net.crt;
ssl_certificate_key /cert/developerhome.net.key;
ssl_session_timeout 5m;

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
...

然后可以顺利登录了。然后需在docker 的daemon.json中增加

"insecure-registries": ["developerhome.net"]

才可以正常的pull和push

然而,登录后本来一切都挺好的,之后突然有一天就出现401 Unauthorized的错误了。各种找问题,才发现,问题其实是因为我在重新prepare后,没有用docker-compse down,销毁掉容器,我使用docker-compose up -d来直接更新了,而prepare后,用于docker登录的公钥私钥都变了,所以只要再down一次,再up起来

一切都好了。