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

CentOS 7.3部署Harbor镜像仓库

246次阅读
没有评论

共计 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、短信等云产品特惠热卖中