CentOS7.3部署镜像仓库Harbor
参考文档:
- harbor介绍:https://github.com/vmware/harbor
- harbor安装&使用指导:https://github.com/vmware/harbor/blob/master/docs/installation_guide.md
- docker-compose安装指导:https://docs.docker.com/compose/install/
- docker-compose版本:https://github.com/docker/compose/releases/
一.环境
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
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
#查看镜像,另有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
浏览器访问:http://10.11.51.71(注意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.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
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.yml
proxy:
remoteurl: https://registry-1.docker.io #如果访问私有仓库,需要带上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/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
#在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.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
原因: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调用此参数文件)
CentOS7.3部署镜像仓库Harbor的更多相关文章
- centos7 部署镜像仓库 harbor
=============================================== 2018/4/16_第2次修改 ccb_warlock 更新 ...
- centos7 部署镜像仓库 harbor步骤详解
一.基础设置 1.1 安装vim.wget yum install -y vim wget 1.2 卸载home.扩大root 如果考虑镜像仓库是给研发团队使用,需要配置较大容量的,因为cento ...
- 私有镜像仓库Harbor基础介绍与部署
企业级私有镜像仓库Harbor 一:介绍 Harbor,是一个英文单词,意思是港湾,港湾是干什么的呢,就是停放货物的,而货物呢,是装在集装箱中的,说到集装箱,就不得不提到Docker容器,因为dock ...
- docker 镜像仓库 Harbor 部署 以及 跨数据复制
docker 镜像仓库 Harbor 部署 跨数据复制 Harbor 是 Vmwar 公司开源的 企业级的 Docker Registry 管理项目 它主要 提供 Dcoker Registry 管理 ...
- 离线手动部署docker镜像仓库——harbor仓库(HTTPS)
实验环境: harbor服务器系统:CentOS Linux release 7.5.1804 (Core)harbor服务器IP:10.1.12.114harbor版本:v1.5.0docker版本 ...
- 企业级Docker镜像仓库Harbor部署与使用
yum install docker 官网地址:https://docs.docker.com/compose/install/ 运行此命令以下载Docker Compose的当前稳定版本 1 sud ...
- Docker: 企业级镜像仓库Harbor的使用
上一节,演示了Harbor的安装部署 这次我们来讲解 Harbor的使用. 我们需要了解到: 1. 如何推镜像到镜像仓库 2. 如何从镜像仓库拉取镜像 3. 如何运行从私有仓库拉取的镜像 # 查看 h ...
- 私有容器镜像仓库harbor
私有镜像仓库Harbor 1.Harbor概述 Habor是由VMWare公司开源的容器镜像仓库.事实上,Habor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用 ...
- 企业级镜像仓库harbor搭建
企业级镜像仓库harbor搭建 一. Harbor概述 VMware公司最近开源了企业级Registry项目Harbor,其的目标是帮助用户迅速搭建一个企业级的Docker registry 服 ...
随机推荐
- (转)python类class中_init_函数以及参数self的简单解释
1)_init_函数(方法) #-*- encoding:utf-8 -*- class NewClass(object): def __init__(self,name): print self s ...
- MongoDB常用指令
db 查看当前操作的数据库 show dbs 显示所有数据库 show collections 显示当前数据库下的所有集合 use database_name 连接到一个名叫[database_nam ...
- Spring异步-@Async注解
Spring异步:@Async注解 使用@Async前需要开启异步支持:@EnableAsync 注解和XML方式 @Async返回值的调用:需要使用Future包装 1.如果没有使用Future包装 ...
- iOS之面试题:阿里-P6一面-参考思路
阿里-p6-一面 1.介绍下内存的几大区域? 2.你是如何组件化解耦的? 3.runtime如何通过selector找到对应的IMP地址 4.runloop内部实现逻辑? 5.你理解的多线程? 6. ...
- JSON在Java中的使用(一)
1.去JSON官网下载org.json包 https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.json%22%20AND%20a%3A%22 ...
- 前端基础-jQuery的优点以及用法
一.jQuery介绍 jQuery是一个轻量级的.兼容多浏览器的JavaScript库. jQuery使用户能够更方便地处理HTML Document.Events.实现动画效果.方便地进行Ajax交 ...
- NodeJs 实现简单WebSocket 即时通讯
至于服务器语言选择nodeJs,一是因为自己是做前端的,对javascript比较熟悉,相比于其他后台语言,自然会更喜欢nodeJs了, 二是NodeJs本身事件驱动的方式很擅长与大量客户端保持高并发 ...
- Mysql only_full_group_by 引起的错误
SQLSTATE[]: Syntax error or access violation: Expression # of SELECT list is not in GROUP BY clause ...
- C语言下的错误处理问题
今天来分享我认为比较好的几种在C语言下的错误处理方式 方式一: int example(int num) { ) { ; } ; } 在不符合条件的情况下使用return终止程序 方式二: void ...
- scala (4) 可变数组和不可变数组
在scala中数组分为不可变长数组(在immutable包下)和可变长数组(在mutable包下) 不可变长数组指的是长度不可变,但是数组中角标对应的元素的值是可变的 可变数组指的是长度和数组中角标对 ...