harbor概念和部署
github: https://github.com/goharbor/harbor
一.介绍
Harbor,是一个英文单词,意思是港湾,港湾是干什么的呢,就是停放货物的,而货物呢,是装在集装箱中的,说到集装箱,就不得不提到Docker容器,因为docker容器的技术正是借鉴了集装箱的原理。所以,Harbor正是一个用于存储Docker镜像的企业级Registry服务。
Registry是Dcoker官方的一个私有仓库镜像,可以将本地的镜像打标签进行标记然后push到以Registry起的容器的私有仓库中。企业可以根据自己的需求,使用Dokcerfile生成自己的镜像,并推到私有仓库中,这样可以大大提高拉取镜像的效率。
二.Harbor核心组件解释
·Proxy:他是一个nginx的前端代理,代理Harbor的registry,UI, token等服务。
·db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。
·UI:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。
·jobsevice:jobsevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。
·Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。
·Registry:镜像仓库,负责存储镜像文件。
·Log:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。
三.Harbor和Registry的比较
Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。
1.提供分层传输机制,优化网络传输:Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。
2.提供WEB界面,优化用户体验:只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。
3.支持水平扩展集群:当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。
4.良好的安全机制:企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。
5.Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。
四.Harbor简单部署
1.安装docker并运行
[root@docker1 ~]#yum -y install docker [root@docker1 ~]#systemctl restart docker [root@docker1 ~]#systemctl enable docker
2.需要安装docker-compose
A.在线安装
打开官方网站http://get.daocloud.io/#install-compose,找到docker compose,根据下面命令快速安装(能连外网)。
B.离线安装
访问 https://github.com/docker/compose/releases,下载 docker-compose-Linux-x86_64,下载后,将docker-compose-Linux-x86_64移动并改名到/usr/local/bin/docker-compose下。
安装好后命令docker-compose -v 查看
[root@docker1 ~]# docker-compose -v docker-compose version 1.7.1, build 0a9ab35
3.下载并安装harbor
在https://github.com/goharbor/harbor 下载 harbor-offline-installer-v1.5.1.tgz 到 /root/下
1).解压 tar -zxvf harbor-offline-installer-v1.5.1.tgz
2).查看ls
[root@docker1 ~]# ls harbor-offline-installer-v1.5.1.tgz [root@docker1 ~]# tar -xf harbor-offline-installer-v1.5.1.tgz [root@docker1 ~]# ls harbor harbor-offline-installer-v1.5.1.tgz [root@docker1 ~]# cd harbor [root@docker1 ~]# vim harbor.cfg
4.修改配置文件
[root@docker1 harbor]# vim harbor.cfg A.修改hostname: 为主机IP或者公网地址 hostname = 119.3.212.242 B.支持HTTP访问: customize_crt = false
5. 运行
[root@docker1 harbor]# ./install.sh //安装出现下面则成功 ✔ ----Harbor has been installed and started successfully.----
6.访问验证
查看服务进程:
[root@docker1 harbor]#docker ps
客户端访问公网IP:
http://119.3.212.242
五.上传镜像
1.输入配置文件设置的密码登陆界面,创建项目yan123
2.给镜像打包tag
查看本地仓库
[root@docker1 harbor]#docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/redis latest f9b990972689 3 days ago 104 MB vmware/redis-photon v1.5.1 19245c7a4f51 23 months ago 207 MB
给redis打标签
[root@docker1 harbor]#docker tag vmware/redis-photon:v1.5.1 119.3.212.242/yan123/redis-photon:latest
查看本地仓库
[root@docker1 harbor]#docker images REPOSITORY TAG IMAGE ID CREATED SIZE 119.3.212.242/yan123/redis-photon latest 19245c7a4f51 23 months ago 207 MB
3.上传push到仓库
修改docker配置:docker 默认是按 https 请求的,由于搭建的私有库是 http 的,所以需要修改 docker 配置,将信任的库的地址写上。
[root@docker1 harbor]# vim /etc/docker/daemon.json { "registry-mirrors": ["http://f1361db2.m.daocloud.io"], "insecure-registries": [ "119.3.212.242" ] }
重启服务
[root@docker1 harbor]#systemctl restart docker
验证, 成功登陆
[root@docker1 harbor]#docker login 119.3.212.242 Username (admin): admin Password: Login Succeeded
上传到仓库:
[root@docker1 harbor]#docker push 119.3.212.242/yan123/redis-photon:latest 1c02f801c2e8: Layer already exists 3f79efb720fd: Layer already exists de0fd8aae388: Layer already exists 7844feb13ef3: Pushing [===========================> ] 74.14 MB/76.93 MB 52ef9064d2e4: Pushing [======================> ] 107.3 MB/130 MB
4.浏览器查看:
略
5.下载到本地
登陆另一台主机,验证是否能下载。
安装软件:
[root@docker2 ]# yum -y install docker
修改客户端的仓库地址:
[root@docker2 ]# vim /etc/sysconfig/docker ADD_REGISTRY='--add-registry 119.3.212.242' //harbor默认80端口,默认不写 INSECURE_REGISTRY='--insecure-registry 119.3.212.242'
验证:
[root@docker2 ]#docker login 119.3.212.242
开启服务:
[root@docker2 ]#systemctl start docker
查看仓库
[root@docker2 ]# docker images
下载到本地
[root@docker2 ]# docker pull 119.3.212.242/yan123/redis-photon:latest Trying to pull repository 119.3.212.242/yan123/redis-photon ... latest: Pulling from 119.3.212.242/yan123/redis-photon Digest: sha256:8cb3c7824dabe8fc101ee61387312f50fc2acdb4664f5241cbc0e63f5027db6f Status: Downloaded newer image for 119.3.212.242/yan123/redis-photon:latest
最后查看仓库:
[root@docker2 ]# docker images
测试1