虽然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
$ 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
测试是否正常安装
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 #数据目录
运行安装脚本
注:该脚本将安装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相关组件容器运行正常后,打开浏览器访问域名,可看到登录界面,安装完成。
四. 验证仓库使用
1. 创建项目
使用admin账号登录Harbor,新建一个私有项目mytest。
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
上传完成后,即可在镜像仓库看到相关的镜像,验证成功。
专注于Devops、SRE、运维开发等技术分享,扫码关注公众号,获取更多精彩内容!