阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

CentOS 7.3部署Harbor镜像仓库

488次阅读
没有评论

共计 9157 个字符,预计需要花费 23 分钟才能阅读完成。

一.环境

1. os

Server:CentOS-7-x86_64-1611(CentOS 7.3)

IP:10.11.51.71

2. docker

Docker:version 1.12.6, build 78d1802

Docker-compose:version 1.16.1, build 6d1ac21

3. harbor(截止 20171026)

Harbor:version 1.2.2

二.部署 harbor 服务

1. 部署 docker-compose

#docker 服务已提前部署,可参考:https://docs.docker.com/engine/installation/linux/docker-ce/centos/
#如果使用 curl 或 wget 下载较慢,可以通过其他渠道提前下载后上传到服务器
[root@harbor ~]# curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

#赋权
[root@harbor ~]# chmod +x /usr/local/bin/docker-compose

#验证 docker-compose 是否部署成功
[root@harbor ~]# docker-compose --version

CentOS 7.3 部署 Harbor 镜像仓库

2. 下载 harbor

#这里下载的是离线安装文件,在线安装文件为 "harbor-online-installer-v1.2.2.tgz"
[root@harbor ~]# cd /usr/local/src/
[root@harbor src]# wget https://github.com/vmware/harbor/releases/download/v1.2.2/harbor-offline-installer-v1.2.2.tgz
[root@harbor src]# tar -zxvf harbor-offline-installer-v1.2.2.tgz

3. 配置 harbor.cfg 

[root@harbor src]# cd harbor

#解压目录下的 harbor.cfg 文件即配置文件,详细的配置项可见参考文档:https://github.com/vmware/harbor/blob/master/docs/installation_guide.md#configuring-harbor
[root@harbor harbor]# vim harbor.cfg
#设置访问地址,可用 ip,域名,不能使用 127.0.0.1 或 localhost
hostname = 10.11.51.71

#默认使用 http 协议访问 UI 与 token/notification 服务;如果采用 https,需要将 nginx ssl 设置为 on,可参考:https://github.com/vmware/harbor/blob/master/docs/configure_https.md
ui_url_protocol = http

#mysql 数据库 root 用户默认密码 root123.
db_password = root123

#image 复制并发量
max_job_workers = 3 

#是否为 token 生成证书,默认为 on
customize_crt = on

#nginx cert 与 key 文件的路径, 只有采用 https 协议是才有意义 
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key

#The path of secretkey storage
secretkey_path = /data

#Admiral's url, comment this attribute, or set its value to NA when Harbor is standalone
admiral_url = NA

#未启用 calir 服务,但解压目录下的”./prepare”文件中要检查以下相关参数配置,不能注释,否则环境准备检查不能通过,报 ”ConfigParser.NoOptionError: No option u'clair_db_password' in section: u'configuration'” 相关错误;或者在”./prepare”中注释相关检查与定义,但需要注意,文件中的关联太多,推荐修改“harbor.cfg”文件即可
clair_db_password = password

#以下配置为 option 配置,只在首次启动生效,可以登陆 UI 后修改
#email 相关配置,均为默认配置
email_identity = 
email_server = smtp.mydomain.com
email_server_port = 25
email_username = sample_admin@mydomain.com
email_password = abc
email_from = admin <sample_admin@mydomain.com>
email_ssl = false

#UI 登陆默认密码
harbor_admin_password = Harbor12345

##By default the auth mode is db_auth, i.e. the credentials are stored in a local database.
#Set it to ldap_auth if you want to verify a user's credentials against an LDAP server.
#默认认证 db_auth 为本地认证,支持 ladp 认证
auth_mode = db_auth

#ladp 相关设置,虽然未采用 ldap 认证,但解压目录下的”./prepare”文件中要检查以下相关参数配置,不能注释,否则环境准备检查不能通过,报 ”ConfigParser.NoOptionError: No option u'ldap_timeout' in section: u'configuration'” 相关错误;或者在”./prepare”中注释相关检查与定义,但需要注意,文件中的关联太多,推荐修改“harbor.cfg”文件即可
ldap_url = ldaps://ldap.mydomain.com
# ldap_searchdn = uid=searchuser,ou=people,dc=mydomain,dc=com
# ldap_search_pwd = password
ldap_basedn = ou=people,dc=mydomain,dc=com
# ldap_filter = (objectClass=person)
ldap_uid = uid 
ldap_scope = 3 
ldap_timeout = 5

#默认开启自注册
self_registration = on

#token 有效时间,默认 30minutes
token_expiration = 30

#创建项目权限控制,默认是 "everyone"(所有人),可设置为 "adminonly"(管理员)
project_creation_restriction = everyone

#与远程 registry 通信时是否采用验证 ssl
verify_remote_cert = on

4. 配置后端存储(optional)

默认情况下,harbor 存储 images 在本地文件系统,但生产环境中会有更稳定的后端存储代替本地文件系统。

此时需要更新 harbor 解压目录下 ”common/templates/registry/config.yml” 文件的 ”storage” 字段。具体修改见参考文档:https://github.com/vmware/harbor/blob/master/docs/installation_guide.md#configuring-storage-backend-optional

5. 安装 harbor 服务

harbor 服务由以下容器组件提供:

harbor-log:运行 rsyslogd 的日志服务,通过 log-drive 的形式收集其余容器的日志,映射在宿主机的 /var/log/harbor/ 目录;

registry:docker 官方 registry,负责保存镜像;

harbor-db:harbor 的数据库,保存系统的 job 及项目、人员权限管理;

harbor-adminserver:harbor 系统管理接口,可以修改系统配置以及获取系统信息;

harbor_ui:harbor ui,核心服务;

harbor_jobservice:harbor 的 job 管理模块,主要是为了镜像仓库之前同步使用;

nginx:反向代理,负责流量转发与安全验证,对外提供的流量都是从 nginx 中转,它将流量分发到后端的 ui 与正在 docker 镜像存储的 docker registry。 

#harbor 解压目录下 "install.sh" 脚本会根据同目录下的 "docker-compose.yml" 的定义下载镜像并启动服务;
#镜像下载较耗时,可提前下载备用,以免发生部署过程中镜像不能 pull 的尴尬
[root@harbor harbor]# ./install.sh

CentOS 7.3 部署 Harbor 镜像仓库

#查看镜像,另有 Notary 与 Clair(漏洞扫描)相关的镜像,harbor 集成了这两个服务,但默认不安装;如果需要安装,执行 "./install.sh --with-notary --with-calir"
[root@harbor harbor]# docker images

CentOS 7.3 部署 Harbor 镜像仓库

#查看容器,可以看到没有 Notary 与 Clair 相关服务;也可使用 "docker ps";
#"docker-compose ps" 需要在 "docker-compose.yml" 文件所在目录执行相关操作
[root@harbor harbor]# docker-compose ps

CentOS 7.3 部署 Harbor 镜像仓库

6. 访问 harbor ui

浏览器访问:http://10.11.51.71(注意 iptables 提前放行相关端口)。

CentOS 7.3 部署 Harbor 镜像仓库

默认用户名 / 密码:admin/Harbor12345

登陆后可见左侧的模块:项目 / 日志 / 系统管理(含用户管理、复制管理、配置管理);右上角账户下有功能模块:用户设置 / 修改密码;

非系统管理员账号登陆时,只能看到有权限的项目与日志,其余模块不可见。

CentOS 7.3 部署 Harbor 镜像仓库

三.简单使用

1. 在 web ui 创建项目

web ui homepage—>+ 项目,按规范填写项目名称,这里级别设置 ” 私有 ”,即不勾选(勾选后会变为 ” 公开 ”);如果设置为公共仓库,则所有人对此项目下的镜像拥有读权限,命令行中不需要执行 ”docker login” 即可下载镜像,镜像操作与 docker hub 一致。

CentOS 7.3 部署 Harbor 镜像仓库

CentOS 7.3 部署 Harbor 镜像仓库

2. 为项目添加镜像

1)登陆本地私有 registry

#需要修改 registry 支持 http 登陆,默认采用 https,详见最后的问题章节
[root@harbor ~]# docker login 10.11.51.71

CentOS 7.3 部署 Harbor 镜像仓库

2)为镜像打 tag

#随意选取 1 个本地镜像打上私有 registry 的 tag;
#tag 格式为:domain(ip)/project/image:version
[root@harbor ~]# docker tag photon:1.0 10.11.51.71/harbor_1/photon:1.0
[root@harbor ~]# docker images

CentOS 7.3 部署 Harbor 镜像仓库

3)push 镜像到私有 registry

#随意选取 1 个本地镜像打上私有 registry 的 tag
[root@harbor ~]# docker push 10.11.51.71/harbor_1/photon:1.0

CentOS 7.3 部署 Harbor 镜像仓库

上传完毕后可登陆 web ui,进入相应项目查看,如下:

CentOS 7.3 部署 Harbor 镜像仓库

3. 添加项目成员

1)创建用户并分配权限

web ui homepage—> 系统管理—> 用户管理—>+ 用户

CentOS 7.3 部署 Harbor 镜像仓库

可将用户设置为管理员,或进行删除操作。

CentOS 7.3 部署 Harbor 镜像仓库

2)添加项目成员

web ui homepage—> 项目—>harbor_1—> 成员—>+ 成员,填写新建的账号并给定角色

CentOS 7.3 部署 Harbor 镜像仓库

可对成员角色进行变更或者删除成员。

CentOS 7.3 部署 Harbor 镜像仓库

3)一般用户账号进行镜像操作

#删除本地镜像
[root@harbor ~]# docker rmi 10.11.51.71/harbor_1/photon:1.0
Untagged: 10.11.51.71/harbor_1/photon:1.0
Untagged: 10.11.51.71/harbor_1/photon@sha256:30daf1dc09787f9d886fb3f554237ca9ba656d84590703e700f8ab740b342693

#使用一般用户账号登陆本地私有 registry
[root@harbor ~]# docker logout 10.11.51.71
Remove login credentials for 10.11.51.71
[root@harbor ~]# docker login 10.11.51.71
Username: user1
Password: 
Login Succeeded

#下载镜像
[root@harbor ~]# docker pull 10.11.51.71/harbor_1/photon:1.0
1.0: Pulling from harbor_1/photon
Digest: sha256:30daf1dc09787f9d886fb3f554237ca9ba656d84590703e700f8ab740b342693
Status: Downloaded newer image for 10.11.51.71/harbor_1/photon:1.0

CentOS 7.3 部署 Harbor 镜像仓库

4. 同步复制(仅介绍步骤)

同步复制需要 2 个 harbor 服务,如果将 10.11.51.71 做主节点,则新服务器可做复制节点。

web ui homepage—> 项目—>harbor_1—> 复制—>+ 复制规则,url 是目标节点的地址,用户名 / 密码使用 admin 账号,勾选启用则开始同步 image。

CentOS 7.3 部署 Harbor 镜像仓库

5. 查看日志(项目中也可查看日志)

web ui homepage—> 日志,操作日志按时间顺序记录。

CentOS 7.3 部署 Harbor 镜像仓库

四.管理 harbor 生命周期

1. 常规操作

#"docker-compose" 可以对 harbor 服务整个生命周期进行管理;
#必须在 "docker-compose.yml" 文件所在目录执行相关操作
[root@harbor ~]# cd /usr/local/src/harbor
[root@harbor harbor]# docker-compose stop | start | restart

2. 修改 harbor.cfg 的操作

#停止服务
[root@harbor ~]# cd /usr/local/src/harbor
[root@harbor harbor]# docker-compose -v

#修改 harbor.cfg 文件
[root@harbor harbor]# vim harbor.cfg

#运行 prepare 脚本更新配置
[root@harbor harbor]# ./prepare

#重启服务
[root@harbor harbor]# docker-compose up -d

3. 移除 harbor 服务容器同时保留镜像数据 / 数据库

[root@harbor harbor]# docker-compose down -v

4. 移除 harbor 服务容器全部数据(重新部署时采用)

#持久数据,如镜像,数据库等在宿主机的 /data/ 目录下;
#日志在宿主机的 /var/log/harbor/ 目录下
[root@harbor harbor]# rm -r /data/database
[root@harbor harbor]# rm -r /data/registry

五.Harbor mirror registry

Mirror 是 registry 的一种特殊类型,起到类似代理服务器的缓存作用,在 docker hub 与 client 之间做镜像的缓存。

基本工作原理:client pull 1 个镜像时,若镜像在 mirror 服务器存在,则直接从 mirror 服务器拉取;若不存在则由 mirror 服务器自动代理从 docker hub(可配置)中拉取镜像,并缓存到 mirror 服务器中;当 client 再次拉取这个镜像时,直接从 mirror 服务器中拉取,不需要再次从 docker hub 中拉取。

1. 配置 mirror server

#修改在解压目录中”common/templates/registry/config.yml”,在最后追加“proxy”字段;
#在运行“./prepare”之前做追加操作
[root@harbor ~]# cd /usr/local/src/harbor
[root@harbor harbor]# vim common/config/registry/config.yml
proxy:
  remoteurl: https://registry-1.docker.io
  #如果访问私有仓库,需要带上 docker hub(指定的仓库)的账号 / 密码
  #username: [username]
  #password: 

  此处含有隐藏内容,需要正确输入密码后可见!

2. 重启 harbor 服务

#不执行“./prepare”
[root@harbor ~]# cd /usr/local/src/harbor
[root@harbor harbor]# docker-compose stop
[root@harbor harbor]# docker-compose rm -f
[root@harbor harbor]# docker-compose up -d

CentOS 7.3 部署 Harbor 镜像仓库

3. 修改客户端 docker 启动参数

#修改 docker 启动文件”[service]”字段
[root@test ~]# vim /usr/lib/systemd/system/docker.service
[Service]
EnvironmentFile=/etc/sysconfig/docker
ExecStart=/usr/bin/dockerd $OPTIONS

#定义启动参数,添加 “--registry-mirror”“--insecure-registry”参数
[root@test ~]# vim /etc/sysconfig/docker
OPTIONS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --registry-mirror=http://10.11.51.71 --insecure-registry 10.11.51.71"

#重启 docker 服务
[root@test ~]# systemctl restart docker

4. 验证

1)client 拉取镜像

#在 client 服务器拉取镜像,108Mb 的 nginx 镜像用时 36min 左右;
#虽然宿主机有做加速处理,但做 harbor registry 的容器没有加速,所以时间较长
[root@test ~]# date ; docker pull nginx ; date

CentOS 7.3 部署 Harbor 镜像仓库

#在 client 删除 nginx 镜像,再拉取 1 次,时间缩短到 11min,证明 mirror 缓存生效;
#效果依然不理想,但的确是生效了
[root@test ~]# docker rmi nginx
[root@test ~]# date ; docker pull nginx ; date

CentOS 7.3 部署 Harbor 镜像仓库 

#如下从 mirror registry 拉取镜像的操作会很高效,同样的 nginx 镜像,实测在 30second 左右;
#即使在没有缓存的情况下效果也不错,但此时日志中显示操作用户名不再是 anonymous,而是前面已经登陆的账号 user1(登陆的是私有 registry);
#且下载的镜像 REPOSITORY 也是”10.11.51.71/library/nginx”全称的形式,而不是 docker hub 默认的只有镜像名称
[root@test ~]# docker pull 10.11.51.71/library/nginx

2)查看日志

web ui homepage—> 日志,操作的是公共镜像,所以用户为 anonymous,项目是默认的 library。

CentOS 7.3 部署 Harbor 镜像仓库

3)查看 harbor registry

#在 harbor 服务器查看
[root@harbor ~]# ll /data/registry/docker/registry/v2/repositories/library/

CentOS 7.3 部署 Harbor 镜像仓库

4)查看项目

web ui homepage—> 项目—>library—> 镜像仓库,操作的是公共镜像,项目是默认的 library。

另外发现在项目中查看缓存有延迟现象,即已生效的缓存不会立即在 web ui 中显示。

CentOS 7.3 部署 Harbor 镜像仓库

六.问题

1. 本地登陆 registry 报错

[root@harbor ~]# docker login 10.11.51.71
Username: admin
Password: 
Error response from daemon: Get https://10.11.51.71/v1/users/: dial tcp 10.11.51.71:443: getsockopt: connection refused

CentOS 7.3 部署 Harbor 镜像仓库

原因:docker login/pull/push 等对 registry 的操作默认启用 https,但这里 harbor 设置的是采用 http。

解决方案:修改 docker 服务启动参数,在 /etc/sysconfig/docker 文件中的 OPTIONS 中增加 ”–insecure-registry 10.11.51.71″ (centos7 中默认没有 /etc/sysconfig/docker 文件,可以手工添加,同步修改启动文件 /usr/lib/systemd/system/docker.service 调用此参数文件)

参考文档:

  1. harbor 介绍:https://github.com/vmware/harbor
  2. harbor 安装 & 使用指导:https://github.com/vmware/harbor/blob/master/docs/installation_guide.md
  3. docker-compose 安装指导:https://docs.docker.com/compose/install/
  4. docker-compose 版本:https://github.com/docker/compose/releases/
  5. harbor 配置 https:https://github.com/vmware/harbor/blob/master/docs/configure_https.md

本文永久更新链接地址:http://www.linuxidc.com/Linux/2018-01/150358.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计9157字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7991221
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
在Windows系统中通过VMware安装苹果macOS15

在Windows系统中通过VMware安装苹果macOS15

在 Windows 系统中通过 VMware 安装苹果 macOS15 许多开发者和爱好者希望在 Window...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...