上一篇文章,介绍了Registry的部署与使用,2019年人又懒惰了,不详敲命令了,所以我们想部署个开源产品,正好VMware公司开源了企业级Registry项目Harbor,由VMware中国研发的团队负责开发。
一、Harbor简介
Harbor是一个用于存储和分发Docker镜像的企业级Registry
服务器,通过添加一些企业必需的功能特性,例如安全
、标识
和管理
等,扩展了开源Docker Distribution
。作为一个企业级私有
Registry服务器,Harbor
提供了更好的性能
和安全
。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理
,访问控制
和活动审计
等。
与企业级的Registry相比优点如下:
更安全
更快捷
用户管理
访问控制
活动审计
1.1 Harbor私有仓库的作用
- 公司或个人项目代码不能公开,如何共享镜像或快速发布?直接共享 Dockerfile 用时 build 吗?
- 在国内直接拉取官方镜像非常缓慢。如何才能快速取官方基础镜像呢?
- 国内的网络环境下,项目在 CI/CD 过程中拉取镜像可能会花费比较多的时间,如何能加快拉取镜像的速度?
没错,搭建Harbor私有镜像仓库
吧。 (其实官网推荐使用:Registry)
官方中文文档:https://vmware.github.io/harbor/cn
二、系统环境及配置要求
2.1 运行配置要求
硬盘主要存储镜像,镜像量大可以考虑加大。
2.2 软件要求
软件 | 版本 | 说明 |
---|---|---|
Pyhton | 2.7 及以上 | 我用的是CenOS 7 默认安装 2.7 版本,未装的装上 |
Docker | 1.10 及以上 | Docker容器基础一 |
Docker Compose | 1.6.0 以上 | 安装 docker-compose |
Openssl | 推荐用最高版本 | 生成证书,自备证书的忽略 |
三、安装部署Harbor
3.1 Harbor安装步骤
- 下载安装程序;
- 配置harbor.cfg文件;
- 运行
install.sh
来安装并启动Harbor;此 shell 脚本会生成所需要的配置文件,调用docker-compose
来进行镜像拉取及启动。
Harbor 有两种方式
进行安装。分为离线
和在线
,如果网络环境不佳可以先择离线安装。
本次部署使用当前最新稳定版本 v1.6.3
3.2 环境介绍
[root@node01 ~]# cat /etc/redhat-release #系统版本
CentOS Linux release 7.4.1708 (Core)
[root@node01 ~]# uname -a #内核版本
Linux node01 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Last login: Fri Dec 28 18:23:08 2018 from 192.168.56.1
3.3 下载安装器
百度云链接:https://pan.baidu.com/s/1c_P0LSGCQK0HC-z8SS8a4Q
提取码:3g7p (下面使用离线包进行部署)
更多:github下载地址
3.4 解压安装程序:
mkdir /home/tools
rz #如果慢,可以使用winscp进行传输
tar -zxvf harbor-offline-installer-v1.6.3.tgz
.
3.5 修改配置文件:
cd harbor/
vim harbor.cfg #高版本就是 harbor.yml
修改以下部分:
hostname = hub.dgstack.cn # 用于访问用户界面和register服务。它应该是目标机器的IP地址或完全限定的域名(FQDN),例如192.168.1.10或reg.yourdomain.com。不要使用localhost或127.0.0.1为主机名。
ui_url_protocol = http #(http或https,默认为http)用于访问UI和令牌/通知服务的协议。如果公证处于启用状态,则此参数必须为https。
ssl_cert = #SSL证书的路径,仅当协议设置为https时才应用
ssl_cert_key = #SSL密钥的路径,仅当协议设置为https时才应用。
harbor_admin_password = 123456 # 修改管理面板的登录密码
修改 docker-compose.yml
文件, 不关心安装位置、端口的可以忽略。默认 docker-compose.yml 日志放在 var/logs/ 下,端口开放 80, 443
harbor.cfg中有两类参数,所需参数和可选参数。
- 所需参数:这些参数需要在配置文件harbor.cfg中设置,如果用户更新它们并运行install.sh脚本重新安装Harbour,参数将生效。
- 可选参数:这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动Harbour后在Web UI上进行更新。如果他们进入harbor.cfg,他们只会在第一次启动Harbor时生效,随后对这些参数的更新,harbor.cfg将被忽略
3.6 准备配置文件
#部署前一定要安装docker-compose,详细部署见文章头部
./prepare
# 安装启动harbor
./install.sh
3.7 查看以运行的docker容器
[root@node01 harbor]# docker ps
3.8 Web测试
http://hub.dgstack.cn 如果您不想用80端口请往下看
登入账号:admin
登入密码:123456
四 【特殊要求】Harbor 更改访问端口
4.1 修改docker-compose.yml文件
找到nginx镜像配置,将外网映射端口改成未被占用的端口
[root@hub harbor]# vim docker-compose.yml
proxy:
image: goharbor/nginx-photon:v1.6.2
container_name: nginx
restart: always
volumes:
- ./common/config/nginx:/etc/nginx:z
networks:
- harbor
ports:
- 88:80
- 843:443
- 8443:4443
depends_on:
- postgresql
- registry
- ui
- log
4.2 更改harbor.cfg文件
将hostname添加上映射端口
[root@hub harbor]# vim harbor.cfg
hostname = hub.wubolive.com:88
重启docker-compose
[root@hub harbor]# docker-compose down -v
[root@hub harbor]# ./install
五、Harbor原理
5.1 Docker login的流程
5.2 Docker push流程
六、Harbor日常操作 K8S为例(业务请配置https)
6.1 上传docker镜像
因docker默认不支持http
方式上传镜像,所有需要在配置文件中指明使用http访问,或者参考文章底部连接,配置为HTTPS模式,根据您的实际情况而定。
[root@hub harbor]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://cc51a693.m.daocloud.io"],
"insecure-registries": ["hub.dgstack.cn"]
}
systemctl daemon-reload #重载
systemctl restart docker #重启
docker-compose ps #查看服务状态,如果退出了,需要启动
docker-compose up -d #启动harbor
#或者批量启动docker容器
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
6.2 登入Harbor 在面板中创建一个用户K8S
并加入library
项目
echo "192.168.56.11 hub.dgstack.cn"
[root@hub harbor]# docker login hub.dgstack.cn
Username: k8s
Password:
Login Succeeded
# 显示Login Succeeded说明登入成功
6.3 推送镜像格式:
#docker tag 镜像中心域名/项目名称/镜像名:版本
docker tag SOURCE_IMAGE[:TAG] hub.dgstack.cn/library/IMAGE[:TAG]
# docker push 更改tag后的镜像名
docker push hub.dgstack.cn/library/IMAGE[:TAG]
6.4 拉取镜像格式:
docker pull hub.dgstack.cn/library/nginx:latest
如果您在docker 客户端上拉取镜像报错,可以参考如下方式,设置镜像
报错信息:
Error response from daemon: Get https://10.0.17.142/v2/: dial tcp 10.0.17.142:443: connect: connection refused
解决方法:1 docker服务指定镜像仓库
1,查找docker.service 所在的位置
systemctl status docker 或者find / -name docker.service -type f
2,配置文件添加 --insecure-registry=仓库地址
ExecStart=/usr/bin/dockerd --insecure-registry=10.0.17.142
3,重新启动服务
systemctl daemon-reload
systemctl restart docker
4,检验是否生效
5,拉取镜像
docker pull 10.0.17.142/base-images/nginx:v1
解决方法2,添加https自签证书,详细配置如下
附:以HTTPS方式部署Harbor
https://github.com/goharbor/harbor/blob/master/docs/configure_https.md
至此 Harbor 企业级私有镜像仓库实战 完结。
- QQ精品交流群
-
- 微信公众号
-