使用 Harbor 2.6+ 搭建 私有的Docker Registry

16 篇文章 3 订阅
16 篇文章 0 订阅

Docker 官方的 Registry, Registry 2 的限制比较多,如果不设置证书,不能启用用户名验证。

改用 Harbor 搭建了一个 Docker Registry 仓库服务,中间遇到不少问题,总结一下,以备后续参考。

我搭建的服务域名用的是 hub.ihopeit.com, 端口是 1443 端口,没有使用 443 的默认 SSL 端口。 然后证书是使用自己签发的 SSL 证书,没有使用正式的 SSL 证书。

官方安装文档:

Harbor docs | Download the Harbor Installer

1).下载到压缩包之后,按照官方文档配置harbor.yml,

2). 参考官方文档,使用自己签发的 SSL 证书,

3). install.sh 之前先运行 ./prepare。

4).安装的时候,把 clair, chart registry 也安装上:

./install.sh --with-notary --with-clair --with-chartmuseum 

这样 docker 容器的安全扫描工具和 helm charts registry 也都可以用了。

注意:2.6.0 之后的 Harbo 用的是 clair, 而不是trivy 作为安全扫描工具,官方文档有误。

搭建完之后,用 admin 登录后台,创建 user 账号,创建 project。要创建 project 才能 push image。project 相当于 docker hub上的用户命名空间。

FAQ 1. 自己创建的 SSL 证书,从客户端访问,会遇到这个错误:

Get "https://hub.ihopeit.com:1443/v2/": x509: certificate signed by unknown authority

把域名加入到 insecure-registries 里面即可。

  "insecure-registries": ["harbor.test.com","registry.cn-shenzhen.aliyuncs.com"], # Docker如果需要从非正式证书的SSL源管理镜像,这里加上 insecure registries 的配置。

FAQ 2. 如果遇到 /harbor_cust_cert: No such file or directory 的问题,

1. 检查证书是否有拷贝到 YAML 文件中配置的 data_volume 指定的挂载的 /data 目录。

2.是否有运行 config 脚本。

harbor.yml 配置:

data_volume: /data/

FAQ 3. 按照官方文档执行安装脚本, 出现错误提示说需要设置 hostname, 实际上已经设置过了。

sudo ./install.sh --with-notary --with-trivy --with-chartmuseum

Note: Please set hostname and other necessary attributes in harbor.yml first. DO NOT use localhost or 127.0.0.1 for hostname, because Harbor needs to be accessed by external clients.

这个问题是因为 2.6.0 之后的 Harbo 用的是 clair, 而不是trivy 作为安全扫描工具,官方文档有误.

FAQ 4. 如果遇到 harbor-jobservice 服务有这个错误, 检查服务里面是否配置有代理:

Failed on load rest config err:Get "http://core:8080/api/internal/configurations": dial tcp 172.22.0.8:8080: connect: connection refused

$docker exec -it harbor-jobservice  /bin/bash

$echo $http_proxy $https_proxy

把这些地址全部追加到下面2个文件的 noProxy/NO_PROXY 配置中:

127.0.0.1,localhost,.local,.internal,log,db,redis,nginx,core,portal,postgresql,jobservice,registry,registryctl,clair,chartmuseum,notary-server

vim ~/.docker/config.json

vim /etc/systemd/system/docker.service.d/proxy.conf

在这个proxy.conf文件(可以是任意*.conf的形式)中,添加以下 NO_PROXY 的内容配置:

[Service]

Environment=“HTTP_PROXY=192.168.1.19:1234"

Environment="HTTPS_PROXY=192.168.1.19:1234"

Environment="NO_PROXY=.example.com,hub.ihopeit.com,127.0.0.1,localhost,.local,.internal,log,db,redis,nginx,core,portal,postgresql,jobservice,registry,registryctl,clair,chartmuseum,notary-server"

如果不需要代理,直接去掉里面的 HTTP_PROXY, HTTPS_PROXY 也是可以的。 

重启 docker, 使得配置生效:

sudo systemctl daemon-reload

sudo systemctl restart docker

检查代理配置是否生效:

systemctl show --property=Environment docker > a.txt

cat a.txt

搭建完成 Harbor 之后, 用 admin 账号登录后台,创建 user 账号,并且设置为管理员,然后创建 project。要创建 project 才能 push image。project 相当于 docker hub上的用户命名空间。

使用创建的用户登录镜像仓库:

docker login hub.ihopeit.com:1443

之后 push docker 镜像到仓库中, 可以看到项目中的镜像仓库:

docker tag stilleshan/linux-command:latest hub.ihopeit.com:1443/ihopeit/linux-command:latest

docker push hub.ihopeit.com:1443/ihopeit/linux-command:latest

登录到镜像仓库: https://hub.ihopeit.com:1443

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要在 Jenkins 中创建一个新的构建任务。在任务配置中,你需要配置以下步骤: 1. 从 Gitee 仓库中拉取代码 2. 执行 Hyperf 项目的构建命令 3. 构建 Docker 镜像并上传至 Harbor 4. 在目标服务器上通过 Docker 运行镜像,启动 Hyperf 服务 以下是一个简单的 Jenkinsfile 示例: ``` pipeline { agent any stages { stage('Git Checkout') { steps { git 'https://gitee.com/yourusername/yourrepo.git' } } stage('Build') { steps { sh 'composer install' sh './bin/hyperf.php build' } } stage('Dockerize') { steps { sh 'docker build -t yourimage:latest .' withCredentials([usernamePassword(credentialsId: 'harbor-login', passwordVariable: 'HARBOR_PASSWORD', usernameVariable: 'HARBOR_USERNAME')]) { sh "docker login -u ${env.HARBOR_USERNAME} -p ${env.HARBOR_PASSWORD} harbor.yourdomain.com" } sh 'docker tag yourimage:latest harbor.yourdomain.com/yourproject/yourimage:latest' sh 'docker push harbor.yourdomain.com/yourproject/yourimage:latest' } } stage('Deploy') { steps { sh 'docker pull harbor.yourdomain.com/yourproject/yourimage:latest' sh 'docker stop yourcontainer || true' sh 'docker rm yourcontainer || true' sh 'docker run -d --name yourcontainer -p 80:80 harbor.yourdomain.com/yourproject/yourimage:latest' } } } } ``` 你需要根据自己的实际情况进行调整,并且需要在 Jenkins 中配置相关的参数和凭据信息。同时,你还需要在服务器上安装 DockerDocker Compose,以便能够运行 Docker 镜像。 希望这能帮到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值