1. 环境及参考
1.1 环境:
- harbor server:
- 系统:centos7
- 内核版本:3.10.0-1127.13.1.el7.x86_64
- 内网ip地址:192.168.8.200
- 内网域名:harbor.bfmiaodi.top
- harbor版本:1.9.4
- Docker version 19.03.12, build 48a66213fe
- docker-compose version 1.18.0, build 8dd22a9
1.2 其他:
harbor默认使用https,自签署证书的话每个客户端连接的时候都要做操作。域名是自己买的公网域名,内网里解析这个域名到harbor的地址,这样可以签署受信任的https证书。(各大厂商都有免费的ssl证书可以申请,每次一年有效期) 域名解析到ip地址使用的是路由器自带功能。(openwrt系统-接口-主机名) 也可以使用named(bind)来自解析dns,个人不是很喜欢,家里电脑多,还需要改dns,路由器来的更实在。
1.3 相关参考
网络文章:
- 主要参考这个: https://www.yuque.com/duduniao/docker/ohrxds#9Zpxx
官方参考文档:
- 官网: https://goharbor.io/docs/2.0.0/install-config/download-installer/
- https相关配置:https://goharbor.io/docs/2.0.0/install-config/configure-https/
2. 安装harbor
2.1 安装docker-ce及docker-compose
省略
2.2 下载harbor并解压
cd /opt
mkdir src certs release apps
cd /opt/src
wget https://github.com/goharbor/harbor/releases/download/v1.9.4/harbor-offline-installer-v1.9.4.tgz
mv harbor /opt/release/harbor-v1.9.4
ln -s /opt/release/harbor-v1.9.4 /opt/apps/harbor
2.3 编辑配置文件 harbor.yml
cd /opt/apps/harbor
vim harbor.yml
修改以下几个地方:
- hostname 改为你的域名 如:harbor.bfmiaodi.top
- https相关 先不配置 等先安装好harbor之后再配置
- data_volume: /data/harbor
- location: /data/harbor/logs
- harbor_admin_password 管理员密码(账号为admin)
./install.sh
即可自动安装完成 安装完成后
docker ps
查看启动的harbor相关容器
访问内网域名或者ip登录web控制台
3. https配置
3.1 申请阿里云证书
网上教程基本都是自签证书,上传/拉取镜像还要加白名单,比较麻烦。 这里用的内网域名就是自己买的公网域名,可以直接申请受信任的证书,客户端不用做额外操作。 域名是在阿里云买的,直接申请的免费受信任证书,申请成功后下载nginx版本。 阿里云把免费证书申请藏得比较深,很不情愿让用户白白申请。这里说下路径: 控制台 -> ssl证书(应用安全)-> 购买证书 -> 单个域名 -> DV域名级SSL -> 免费版 到这里就可以直接点击购买了。 购买之后点申请,填写相关信息,提交申请,过几分钟一般自动就申请完成了。 申请成功后下载证书,选择nginx类型的。因为harbor使用了nginx代理。 将证书解压后拷贝到/opt/certs/目录下 编辑harbor.yml:
cd /opt/apps/harbor
vim harbor.yml
将https相关的配置都打开: certificate为pem文件的路径 private_key为key文件的路径
https:
# # https port for harbor, default is 443
port: 443
# # The path of cert and key files for nginx
certificate: /opt/certs/4640220_harbor.bfmiaodi.top.pem
private_key: /opt/certs/4640220_harbor.bfmiaodi.top.key
重新启动harbor
4. 验证
4.1 新建仓库
登录web控制台, 新建两个项目 public的公开项目 private的私有项目 用于测试
上传镜像的方法,网页里已经给出
4.2 上传镜像
找一台安装docker的测试机器
[root@k-22 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 235592615444 4 months ago 104MB
nginx latest 2622e6cca7eb 4 months ago 132MB
[root@k-22 ~]# docker tag nginx:latest harbor.bfmiaodi.top/public/nginx:latest
[root@k-22 ~]# docker push harbor.bfmiaodi.top/public/nginx:latest
The push refers to repository [harbor.bfmiaodi.top/public/nginx]
f978b9ed3f26: Layer already exists
9040af41bb66: Layer already exists
7c7d7f446182: Layer already exists
d4cf327d8ef5: Layer already exists
13cb14c2acd3: Layer already exists
errors:
denied: requested access to the resource is denied
unauthorized: authentication required
[root@k-22 ~]# docker login harbor.bfmiaodi.top
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[root@k-22 ~]# docker push harbor.bfmiaodi.top/public/nginx:latest
The push refers to repository [harbor.bfmiaodi.top/public/nginx]
f978b9ed3f26: Layer already exists
9040af41bb66: Layer already exists
7c7d7f446182: Layer already exists
d4cf327d8ef5: Layer already exists
13cb14c2acd3: Layer already exists
latest: digest: sha256:0efad4d09a419dc6d574c3c3baacb804a530acd61d5eba72cb1f14e1f5ac0c8f size: 1362
[root@k-22 ~]# docker logout harbor.bfmiaodi.top
Removing login credentials for harbor.bfmiaodi.top
私有仓库一样的,这里就不贴了。
4.3 拉取公开仓库
- 直接拉取公开仓库镜像--成功
- 上传公开仓库--失败(需要登录才能上传)
4.4 拉取私有仓库
- 直接拉取私有仓库镜像--失败
- 登录私有仓库
- 再次拉取私有仓库镜像--成功
- 查看已经拉取的镜像