基于Harbor搭建企业镜像仓库

虽然Docker官方提供了Docker Hub作为公共的Registry服务器,给到用户进行镜像的保存和管理工作。但对于企业而言,考虑到安全性和网络效率等原因,通常会搭建私有的Registry服务器,用于提供企业内部的镜像仓库服务。

本文将基于开源的Harbor项目来介绍关于私有仓库的搭建。

一. Harbor介绍

Harbor是由VMware公司中国团队开发的一个企业级Registry项目,可用于搭建企业内部的容器镜像仓库。Harbor在Docker Registry的基础上增加了企业用户所需的权限控制、安全漏洞扫描、日志审核和远程复制等重要功能,还提供了图形管理界面及面向国内用户的中文支持,开源后便迅速业内流行开来,成为中国云原生用户的主流容器镜像仓库。

2018年7月,Harbor正式进入CNCF(谷歌创办的云原生基金会,旗下项目包括Kubernetes、Prometheus等世界级产品),并在2020年6月顺利毕业,成为了CNCF首个来自中国的开源项目。

基于Harbor搭建企业镜像仓库

Harbor的架构如下图所示,其中Core services为Harbor的核心模块,主要包括UI、token和webhook三个组件。UI提供图形化界面,辅助用户管理镜像;webhook 用于及时 获取Registry上镜像状态的变化情况,并传递给其他模块;token组件用于提供验证令牌。

另外,还有Job service用于多个Harbor间的镜像同步功能,Log collector用于日志收集和审核功能。

基于Harbor搭建企业镜像仓库

除了自身组件外,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

$ 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

测试是否正常安装

$ docker-compose version

3. 安装harbor

下载harbor

$ wget https://github.com/vmware/harbor/releases/download/v1.10.12/harbor-online-installer-v1.10.12.tgz

解压

$ tar -zxvf harbor-online-installer-v1.10.12.tgz

修改配置文件 /harbor/harbor.yml

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 #数据目录

运行安装脚本

$ sh install.sh

注:该脚本将安装harbor默认组件,如需增加镜像扫描功能,可增加 --with-clair参数;如需增加heml仓库,可增加--with-chartmuseum参数。

脚本安装完成后,运行docker-compose命令,确认容器状态是否正常。

$ 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相关组件容器运行正常后,打开浏览器访问域名,可看到登录界面,安装完成。

基于Harbor搭建企业镜像仓库

四. 验证仓库使用

1. 创建项目

使用admin账号登录Harbor,新建一个私有项目mytest。

基于Harbor搭建企业镜像仓库

2. 镜像tag 

在本地服务器上,使用 docker tag为本地镜像打标签 

$ docker tag nginx:1.20 harbor.alex.com/mytest/nginx:1.20

3. 登录授权

$ docker login harbor.alex.com
Username: admin
Password:

如果是使用自签名证书,可能登录时会报如下错误 :

$ 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根证书,然后即可正常登录。

$ cp ca.crt /etc/pki/ca-trust/source/anchors
$ update-ca-trust extract
$ systemctl restart docker

登录后,在本地 ~目录会生成 .docker/config.json 文件,保存相关的登录信息,下次使用可不用登录 。

4. 上传镜像

$ 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

上传完成后,即可在镜像仓库看到相关的镜像,验证成功。

基于Harbor搭建企业镜像仓库


专注于Devops、SRE、运维开发等技术分享,扫码关注公众号,获取更多精彩内容! 

基于Harbor搭建企业镜像仓库

发表评论

相关文章