1 概述
本文将介绍两种方法搭建 docker 私有仓库: 基于 docker-distribution 和 基于 harbor 搭建
2 基于 docker-distribution 的搭建
docker-distribution 用于构建 docker 仓库私服, 安装 docker-distribution 包, 在 extras 仓库里
yum -y install docker-distribution
查看安装文件
- [root@docker ~]# rpm -ql docker-distribution
- /etc/docker-distribution/registry/config.yml
- /usr/bin/registry
- /usr/lib/systemd/system/docker-distribution.service
- /usr/share/doc/docker-distribution-2.6.2
- /usr/share/doc/docker-distribution-2.6.2/AUTHORS
- /usr/share/doc/docker-distribution-2.6.2/CONTRIBUTING.md
- /usr/share/doc/docker-distribution-2.6.2/LICENSE
- /usr/share/doc/docker-distribution-2.6.2/MAINTAINERS
- /usr/share/doc/docker-distribution-2.6.2/README.md
- /var/lib/registry
- [root@docker ~]#
查看 / etc/docker-distribution/registry/config.yml 文件, 有基础的配置, 如默认镜像放置路径为 rootdirectory: /var/lib/registry
默认不做修改, 启动服务
[root@docker ~]# systemctl start docker-distribution.service
启动成功后, 服务监听在 5000 端口
默认 docker 不支持不安全的 http 协议, 需要在 docker 的 json 配置文件写入 "insecure-registries":[] 这个配置项. 假设安装 docker-distribution 的服务器 ip 为 10.10.10.72, 如果能够解析主机名, 也可以写 主机名: 5000, 如下
- [root@docker ~]# vim /etc/docker/daemon.json
- {
- "registry-mirrors": ["https://eyg9yi6d.mirror.aliyuncs.com/"],
- "bip":"172.17.0.1/16",
- "insecure-registries":["10.10.10.72:5000"]
- }
重启 docker 服务, 此时该 docker 可以把 10.10.10.72 当做不安全的仓库使用, 会使用 http 协议连接仓库 10.10.10.72
[root@docker ~]# systemctl restart docker.service
把镜像推送到 10.10.10.72 这台仓库
首先, 把要推送到仓库的镜像打标签, 如下
[root@docker ~]# docker tag nginx:v1 10.10.10.72:5000/testdis_nginx:v1
然后把打完标签的镜像推送到仓库
[root@docker ~]# docker push 10.10.10.72:5000/testdis_nginx:v1
如果出现如下的报错, registry 有两个版本的接口, v1 和 v2, 可能是 docker-ce 推送时调用的是 v2 版本接口, 但是 docker-distribution 不支持版本 v2, 只支持 v1, 这里默认找 v2 版本. 导致出现如下的报错
- [root@docker ~]# docker push 10.10.10.72:5000/testdis_nginx:v1
- The push refers to repository [10.10.10.72:5000/testdis_nginx]
- Get https://10.10.10.72:5000/v2/ : http: server gave HTTP response to HTTPS client
- [root@docker ~]#
但是, 默认 distribution 搭建的仓库没有安全认证机制, 所以可以借助 nginx 来实现安全认证
Docker private Registry 的 Nginx 反代配置方式:
- # client_max_body_size 对客户端上传的文件大小不做限制
- vim nginx.conf
- client_max_body_size 0;
- location / {
- proxy_pass http://registrysrvs/ ;
- proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
- proxy_redirect off;
- proxy_buffering off;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- auth_basic "Docker Registry Service";
- auth_basic_user_file "/etc/nginx/.ngxpasswd";
- }
Docker-distribution 配置文件格式详细信息:
https://docs.docker.com/registry/configuration/#list-of-configuration-options
distribution 没有 web 页面, 管理起来不方便, 还有一个解决办法是 vmware harbor, 路径为 https://github.com/vmware/harbor 关于 harbor 的安装文档, 可以见链接 https://github.com/vmware/harbor/blob/master/docs/installation_guide.md
3 基于 harbor 仓库搭建
安装包: harbor-offline-installer-v1.5.2.tgz, 这个包很大, 有 1G 左右
注意, harbor 依赖 docker-compose, 因此要提前安装好 docker-compose, 而且不同版本的 harbor 依赖的 docker-compose 不一样, 如果没有安装, 执行
yum -y install docker-compose
同时也要安装 docker 软件, 并启动 docker 服务
- yum -y install docker-ce
- systemctl start docker.service
是一个编译好的包, 展开就可以启动
- tar xf harbor-offline-installer-v1.5.2.tgz -C /usr/local
- cd /usr/local/harbor
- vim /usr/local/harbor/harbor.cfg
- # 注意, 这个配置文件, 如果不更改, 里面的选项都是会自动创建, 所以要看清楚, 包括路径是否和本地其他文件有冲突
- # 主要修改以下三个配置, 其他配置可使用默认
- hostname=docker.ghbsubby.cn
- db_password=root123
- # 管理登录密码
- harbor_admin_password = Harbor12345
运行 install.sh
. /usr/local/harbor/install.sh
安装过程,[Step 1]: loading Harbor images ... 这一步比较慢, 需要下载很多镜像, 来实现相关的服务
停止 docker harbor 服务, 通过 docker-compose 来实现, 所有 harbor 服务会被停止, 命令如下
注意, 命令必须在 / usr/local/harbor / 路径下执行
docker-compose stop
启动服务
docker-compose start
但是这里有个问题, 推送打过标签的镜像到 harbor 是遇到了问题
- docker tag testrun:latest 10.10.10.72/lnmp/testrun:v1
- docker push 10.10.10.72/lnmp/testrun:v1
出现报错, 超时了.
目前添加了以下两个配置
如果是协议上不支持 v1 和 v2, 加入配置 insecure-registries 可能可以解决, 尤其 docker 版本是 docker 而不是 docker-ce 时可以解决.
这里 docker 没有实现安全访问, 因此需要把 harbor 的主机写入 insecure-registries 配置段
- [root@docker harbor]# vim /etc/docker/daemon.json
- {
- "registry-mirrors": ["https://eyg9yi6d.mirror.aliyuncs.com/"],
- "bip":"172.17.0.1/16",
- "insecure-registries":["10.10.10.72"]
- }
- [root@docker ~]# vim /etc/sysconfig/docker
- OPTIONS='--insecure-registry 10.10.10.72'
推送还是不成功, 估计也跟版本有关系. 操作步骤是没问题的, 应该是哪些配置没启用. 这个问题还在解决中~~
来源: http://www.bubuko.com/infodetail-2716290.html