Harbor介绍
以Docker为代表的容器技术的出现,改变了传统的交付方式。通过把业务及其依赖的环境打包进Docker镜像,解决了开发环境和生产环境的差异问题,提升了业务交付的效率。如何高效地管理和分发Docker镜像?是众多企业需要考虑的问题
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,可以用来构建企业内部的Docker镜像仓库。
它在Docker的开源项目 Distribution的基础上,添加了一些企业需要的功能特性,如镜像同步复制、漏洞扫描和权限管理等。
docker 官方提供的私有仓库 registry,用起来虽然简单 ,但在管理的功能上存在不足。 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。
  
Harbor架构图

- 代理层:代理层实质上是一个 Nginx 反向代理,负责接收不同类型的客户端请求,包括浏览器、用户脚本、Docker 等,并根据请求类型和 URI 转发给不同的后端服务进行处理。
- 功能层: 
  - Portal:是一个基于 Argular 的前端应用,提供 Harbor 用户访问的界面。
- Core:是 Harbor 中的核心组件,封装了 Harbor 绝大部分的业务逻辑。
- JobService:异步任务组件,负责 Harbor 中很多比较耗时的功能,比如 Artifact 复制、扫描、垃圾回收等。
- Docker Distribution:Harbor 通过 Distribution 实现 Artifact 的读写和存取等功能。
- RegistryCtl:Docker Distribution 的控制组件。
- Notary(可选):基于 TUF 提供镜像签名管理的功能。
- 扫描工具(可选):镜像的漏洞检测工具。
- ChartMuseum(可选):提供 API 管理非 OCI 规范的 Helm Chart,随着兼容 OCI 规范的 Helm Chart 在社区上被更广泛地接受,Helm Chart 能以 Artifact 的形式在 Harbor 中存储和管理,不再依赖 ChartMuseum,因此 Harbor 可能会在后续版本中移除对 ChartMuseum 的支持。
 
- 数据层: 
  - Redis:主要作为缓存服务存储一些生命周期较短的数据,同时对于 JobService 还提供了类似队列的功能。
- PostgreSQL:存储 Harbor 的应用数据,比如项目信息、用户与项目的关系、管理策略、配置信息、Artifact 的元数据等等。
- Artifact 存储:存储 Artifact 本身的内容,也就是每次推送镜像、Helm Chart 或其他 Artifact 时,数据最终存储的地方。默认情况下,Harbor 会把 Artifact 写入本地文件系统中。用户也可以修改配置,将 Artifact 存储在外部存储中,例如亚马逊的对象存储 S3、谷歌云存储 GCS、阿里云的对象存储 OSS 等等。
 
部署
harbor包下载地址:harbor包
#安装依赖
yum install docker-compose
#下载包
wget https://ghproxy.com/https://github.com/goharbor/harbor/releases/download/v2.5.3/harbor-offline-installer-v2.5.3.tgz
#https://ghproxy.com/是国内的几个GitHub代理加速网站,不用的话下的太慢了
#解压
tar xf harbor-offline-installer-v2.8.0.tgz 
#移到
mv harbor /usr/local/harbor
cd /usr/local/harbor/
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
....
 hostname: 192.168.100.10
....
 #https:
 #  port: 443
 #  certificate: /your/certificate/path
 #  private_key: /your/private/key/path
....
 harbor_admin_password: Harbor12345            #初始密码
....
 data_volume: /data/harbor                     #日志
#安装
./install.sh
#最后看到
[Step 5]: starting Harbor ...
[+] Running 10/10
 ✔ Network harbor_harbor        Created                                                        0.0s 
 ✔ Container harbor-log         Started                                                        0.4s 
 ✔ Container harbor-db          Started                                                        1.2s 
 ✔ Container harbor-portal      Started                                                        2.1s 
 ✔ Container registryctl        Started                                                        1.7s 
 ✔ Container redis              Started                                                        1.9s 
 ✔ Container registry           Started                                                        2.1s 
 ✔ Container harbor-core        Started                                                        2.3s 
 ✔ Container harbor-jobservice  Started                                                        3.3s 
 ✔ Container nginx              Started                                                        3.3s 
✔ ----Harbor has been installed and started successfully.----
就装完了
浏览器访问192.168.100.10


Harbor修改密码

推行镜像
首先创建项目



点击docker-images进入项目,划到推送命令,有相关命令

在docker服务器上
[root@bogon ~]# docker images
REPOSITORY                      TAG       IMAGE ID       CREATED        SIZE
goharbor/prepare                dev       56a6f108ccfd   18 hours ago   172MB
goharbor/harbor-exporter        v2.8.0    2abc02438fcf   7 days ago     97.1MB
goharbor/redis-photon           v2.8.0    ef1f410f9255   7 days ago     127MB
goharbor/trivy-adapter-photon   v2.8.0    724824e3559a   7 days ago     454MB
goharbor/notary-server-photon   v2.8.0    d603449fe91f   7 days ago     113MB
goharbor/notary-signer-photon   v2.8.0    618fc02c41bf   7 days ago     110MB
goharbor/harbor-registryctl     v2.8.0    165749c6eedc   7 days ago     141MB
goharbor/registry-photon        v2.8.0    8bfd12c2163d   7 days ago     78.5MB
goharbor/nginx-photon           v2.8.0    cfc2401896e1   7 days ago     126MB
goharbor/harbor-log             v2.8.0    f31ccc3d46f0   7 days ago     134MB
goharbor/harbor-jobservice      v2.8.0    1b00a3a474e1   7 days ago     140MB
goharbor/harbor-core            v2.8.0    15f4066c1707   7 days ago     164MB
goharbor/harbor-portal          v2.8.0    ae18a071cdce   7 days ago     133MB
goharbor/harbor-db              v2.8.0    f3d4373617a2   7 days ago     179MB
goharbor/prepare                v2.8.0    daa44ccf3b06   7 days ago     170MB
tomcat                          10.1.7    608294908754   3 weeks ago    475MB
nginx                           1.23.3    ac232364af84   4 weeks ago    142MB
#将nginx:1.23.3推送到仓库
[root@bogon ~]# docker tag nginx:1.23.3 192.168.100.10/docker-images/nginx:1.23.3
[root@bogon ~]# docker push 192.168.100.10/docker-images/nginx:1.23.3 
The push refers to repository [192.168.100.10/docker-images/nginx]
Get "https://192.168.100.10/v2/": dial tcp 192.168.100.10:443: connect: connection refused
#可以看到这里报错了,这里报的是https协议,我们没有开启https协议
Get "https://192.168.100.10/v2/":
#需要编辑daemon.json
[root@bogon ~]# vim /etc/docker/daemon.json 
{
  "registry-mirrors": [
        "https://registry.hub.docker.com",
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com"
    ],
  "insecure-registries": ["192.168.100.10:8888"],
  "insecure-registries": ["192.168.100.10"]
}
#登录
[root@bogon ~]# docker login 192.168.100.10
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@bogon ~]# docker push 192.168.100.10/docker-images/nginx:1.23.3 
The push refers to repository [192.168.100.10/docker-images/nginx]
a1bd4a5c5a79: Pushed 
597a12cbab02: Pushed 
8820623d95b7: Pushed 
338a545766ba: Pushed 
e65242c66bbe: Pushed 
3af14c9a24c9: Pushed 
1.23.3: digest: sha256:557c9ede65655e5a70e4a32f1651638ea3bfb0802edd982810884602f700ba25 size: 1570
[root@bogon ~]# 



















