博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CentOS7.3部署镜像仓库Harbor
阅读量:5321 次
发布时间:2019-06-14

本文共 8839 字,大约阅读时间需要 29 分钟。

参考文档:

  1. harbor介绍:
  2. harbor安装&使用指导:
  3. docker-compose安装指导:
  4. docker-compose版本:
  5. harbor配置https:

一.环境

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服务已提前部署,可参考:#如果使用curl或wget下载较慢,可以通过其他渠道提前下载后上传到服务器[root@harbor ~]# curl -L  > /usr/local/bin/docker-compose#赋权[root@harbor ~]# chmod +x /usr/local/bin/docker-compose#验证docker-compose是否部署成功[root@harbor ~]# docker-compose --version

2. 下载harbor

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

3. 配置harbor.cfg 

[root@harbor src]# cd harbor#解压目录下的harbor.cfg文件即配置文件,详细的配置项可见参考文档:[root@harbor harbor]# vim harbor.cfg#设置访问地址,可用ip,域名,不能使用127.0.0.1或localhosthostname = 10.11.51.71#默认使用http协议访问UI与token/notification服务;如果采用https,需要将nginx ssl设置为on,可参考:ui_url_protocol = http#mysql数据库root用户默认密码root123.db_password = root123#image复制并发量max_job_workers = 3 #是否为token生成证书,默认为oncustomize_crt = on#nginx cert与key文件的路径, 只有采用https协议是才有意义 ssl_cert = /data/cert/server.crtssl_cert_key = /data/cert/server.key#The path of secretkey storagesecretkey_path = /data#Admiral's url, comment this attribute, or set its value to NA when Harbor is standaloneadmiral_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.comemail_server_port = 25email_username = sample_admin@mydomain.comemail_password = abcemail_from = admin 
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 = passwordldap_basedn = ou=people,dc=mydomain,dc=com# ldap_filter = (objectClass=person)ldap_uid = uid ldap_scope = 3 ldap_timeout = 5#默认开启自注册self_registration = on#token有效时间,默认30minutestoken_expiration = 30#创建项目权限控制,默认是"everyone"(所有人),可设置为"adminonly"(管理员)project_creation_restriction = everyone#与远程registry通信时是否采用验证sslverify_remote_cert = on

4. 配置后端存储(optional)

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

此时需要更新harbor解压目录下"common/templates/registry/config.yml"文件的"storage"字段。具体修改见参考文档:

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

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

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

6. 访问harbor ui

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

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

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

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

三.简单使用

1. 在web ui创建项目

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

2. 为项目添加镜像

1)登陆本地私有registry

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

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

3)push镜像到私有registry

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

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

3. 添加项目成员

1)创建用户并分配权限

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

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

2)添加项目成员

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

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

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

#删除本地镜像[root@harbor ~]# docker rmi 10.11.51.71/harbor_1/photon:1.0Untagged: 10.11.51.71/harbor_1/photon:1.0Untagged: 10.11.51.71/harbor_1/photon@sha256:30daf1dc09787f9d886fb3f554237ca9ba656d84590703e700f8ab740b342693#使用一般用户账号登陆本地私有registry[root@harbor ~]# docker logout 10.11.51.71Remove login credentials for 10.11.51.71[root@harbor ~]# docker login 10.11.51.71Username: user1Password: Login Succeeded#下载镜像[root@harbor ~]# docker pull 10.11.51.71/harbor_1/photon:1.01.0: Pulling from harbor_1/photonDigest: sha256:30daf1dc09787f9d886fb3f554237ca9ba656d84590703e700f8ab740b342693Status: Downloaded newer image for 10.11.51.71/harbor_1/photon:1.0

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

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

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

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

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

四.管理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 down -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.ymlproxy:  remoteurl:   #如果访问私有仓库,需要带上docker hub(指定的仓库)的账号/密码  #username: [username]  #password: [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

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

#修改docker启动文件”[service]”字段[root@test ~]# vim /usr/lib/systemd/system/docker.service[Service]EnvironmentFile=/etc/sysconfig/dockerExecStart=/usr/bin/dockerd $OPTIONS#定义启动参数,添加“--registry-mirror”与“--insecure-registry”参数[root@test ~]# vim /etc/sysconfig/dockerOPTIONS="-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

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

 

#如下从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。

3)查看harbor registry

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

4)查看项目

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

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

六.问题

1. 本地登陆registry报错

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

原因: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调用此参数文件)

转载于:https://www.cnblogs.com/netonline/p/8144181.html

你可能感兴趣的文章
使用vlfeat工具箱中的vl_kmeans函数
查看>>
路飞学城Python-Day79
查看>>
用CPPUnit做单元测试 (转)
查看>>
字母数字排序
查看>>
Basic Cisco Configs
查看>>
Yii 多表关联relations
查看>>
python 冒泡、二分查找
查看>>
Hello World
查看>>
linux 下安装python3
查看>>
js中style,currentStyle和getComputedStyle的区别
查看>>
技巧类
查看>>
LOJ6036编码
查看>>
day11_多线程(多线程安全问题)
查看>>
Diary of Codeforces Round #402 (Div. 2)
查看>>
产品体验成就产品
查看>>
DOM 表单应用
查看>>
C#+OpenGL+FreeType显示3D文字(2) - 用GLSL+VBO绘制文字
查看>>
为什么eclipse中启动tomcat后,浏览器中出现404?
查看>>
js压缩
查看>>
JS实现手机访问pc网址自动跳转到wap网站
查看>>