基于Harbor搭建企业镜像仓库
虽然Docker官方提供了Docker Hub作为公共的Registry服务器,给到用户进行镜像的保存和管理工作。但对于企业而言,考虑到安全性和网络效率等原因,通常会搭建私有的Registry服务器,用于提供企业内部的镜像仓库服务。
本文将基于开源的Harbor项目来介绍关于私有仓库的搭建。
一. Harbor介绍
Harbor是由VMware公司中国团队开发的一个企业级Registry项目,可用于搭建企业内部的容器镜像仓库。Harbor在Docker Registry的基础上增加了企业用户所需的权限控制、安全漏洞扫描、日志审核和远程复制等重要功能,还提供了图形管理界面及面向国内用户的中文支持,开源后便迅速业内流行开来,成为中国云原生用户的主流容器镜像仓库。
2018年7月,Harbor正式进入CNCF(谷歌创办的云原生基金会,旗下项目包括Kubernetes、Prometheus等世界级产品),并在2020年6月顺利毕业,成为了CNCF首个来自中国的开源项目。
Harbor的架构如下图所示,其中Core services为Harbor的核心模块,主要包括UI、token和webhook三个组件。UI提供图形化界面,辅助用户管理镜像;webhook 用于及时 获取Registry上镜像状态的变化情况,并传递给其他模块;token组件用于提供验证令牌。
另外,还有Job service用于多个Harbor间的镜像同步功能,Log collector用于日志收集和审核功能。
除了自身组件外,Harbor也需要使用到一些外部组件,如使用Nginx作为代理、Registry v2作为镜像存储、PostgreSQL作为数据库等等。
harbor的每个组件都是以Docker容器的形式进行部署,可以使用Docker Compose来进行统一管理。
二. 软硬件要求
1. 硬件要求
硬件 | 最低配置 | 推荐配置 |
---|---|---|
CPU | 2CPU | 4CPU |
内存 | 4GB | 8GB |
磁盘 | 40G | 160G |
注:硬件配置只是官方提供的一个参考,生产环境还需要根据实际情况进行容量规划。
2. 软件要求
软件 | 版本 |
---|---|
Docker | 17.06.0-ce+版或更高版本 |
Docker Compose | 1.18.0或更高 |
Openssl | 首选最新版本 |
三. 安装部署
1. 安装Docker
此处略过,不清楚的朋友可查看此文档《Docker容器实战三:安装部署》。
2. 安装docker compose
1 2 | $ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose |
测试是否正常安装
1 | $ docker-compose version |
3. 安装harbor
下载harbor
1 | $ wget https://github.com/vmware/harbor/releases/download/v1.10.12/harbor-online-installer-v1.10.12.tgz |
解压
1 | $ tar -zxvf harbor-online-installer-v1.10.12.tgz |
修改配置文件 /harbor/harbor.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 | hostname: harbor.alex.com #harbor域名或IP,使用域名的话需要配置DNS解析 http: port: 80 https: port: 443 certificate: /etc/ssl/server.crt #证书路径 private_key: /etc/ssl/server.key harbor_admin_password: Harbor12345 #admin用户登录密码 database: password: root123 #harbor数据库ROOT用户链接的密码 max_idle_conns: 50 max_open_conns: 100 data_volume: /data #数据目录 |
运行安装脚本
1 | $ sh install.sh |
注:该脚本将安装harbor默认组件,如需增加镜像扫描功能,可增加 --with-clair参数;如需增加heml仓库,可增加--with-chartmuseum参数。
脚本安装完成后,运行docker-compose命令,确认容器状态是否正常。
1 2 3 4 5 6 7 8 9 10 11 12 | $ docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------------------------------------------------------------ harbor-core /harbor/harbor_core Up (healthy) harbor-db /docker-entrypoint.sh Up (healthy) 5432/tcp harbor-jobservice /harbor/harbor_jobservice ... Up (healthy) harbor-log /bin/sh -c /usr/local/bin/ ... Up (healthy) 127.0.0.1:1514->10514/tcp harbor-portal nginx -g daemon off; Up (healthy) 8080/tcp nginx nginx -g daemon off; Up (healthy) 0.0.0.0:80->8080/tcp,:::80->8080/tcp, 0.0.0.0:443->8443/tcp,:::443->8443/tcp redis redis-server /etc/redis.conf Up (healthy) 6379/tcp registry /home/harbor/entrypoint.sh Up (healthy) 5000/tcp registryctl /home/harbor/start.sh Up (healthy) |
确认Harbor相关组件容器运行正常后,打开浏览器访问域名,可看到登录界面,安装完成。
四. 验证仓库使用
1. 创建项目
使用admin账号登录Harbor,新建一个私有项目mytest。
2. 镜像tag
在本地服务器上,使用 docker tag为本地镜像打标签
1 | $ docker tag nginx:1.20 harbor.alex.com/mytest/nginx:1.20 |
3. 登录授权
1 2 3 | $ docker login harbor.alex.com Username: admin Password: |
如果是使用自签名证书,可能登录时会报如下错误 :
1 2 3 4 | $ docker login harbor.alex.com Username: admin Password: Error response from daemon: Get "https://harbor.alex.com/v2/": x509: certificate signed by unknown authority |
此时,可以通过下面方式让Docker信任CA根证书,然后即可正常登录。
1 2 3 | $ cp ca.crt /etc/pki/ca-trust/source/anchors $ update-ca-trust extract $ systemctl restart docker |
登录后,在本地 ~目录会生成 .docker/config.json 文件,保存相关的登录信息,下次使用可不用登录 。
4. 上传镜像
1 2 3 4 5 6 7 8 9 | $ docker push harbor.alex.com/mytest/nginx:1.20 The push refers to repository [harbor.alex.com/mytest/nginx] 07ef16952879: Pushed 881700cb7ab2: Pushed 4f49c6d6dd07: Pushed a64d597d6b14: Pushed c2a3d4a53f9a: Pushed fd95118eade9: Pushed 1.20: digest: sha256:a76df3b4f1478766631c794de7ff466aca466f995fd5bb216bb9643a3dd2a6bb size: 1570 |
上传完成后,即可在镜像仓库看到相关的镜像,验证成功。