harbor ['hɑ:bə ə] (海湾) 是一个用于存储和分发Docker镜像的企业级Registry服务器。
Docker 容器应用的开发和运行离不开可靠的镜像管理,虽然 Docker 官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的 Registry 也是非常必要的。Harbor 是由 VMware 公司开源的企业级的Docker Registry 管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。
官网地址:https://github.com/goharbor/harbor
除了Harbor这个私有镜像仓库之外,还有Docker官方提供的Registry。相对Registry,Harbor具有很多优势:
1. 提供分层传输机制,优化网络传输 Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。
2. 提供WEB界面,优化用户体验 只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。
3. 支持水平扩展集群 当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。
4. 良好的安全机制 企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。
实验环境:
CentOS7.9,机器需要的内存至少要 2G 。虚拟机IP为192.168.157.104
注:安装 harbor,系统根分区的可用空间需要大于 6G,否则安装时会报空间不足。
二、安装docker 和docker compose1、docker的安装请看这篇
《Docker实战 一文搞定docker的所有操作》
安装Linux的基础软件包,这个操作,我们都会在每台机器上操作一遍。
yum install -y wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate
2、安装docker compose
注意:最好是安装1.x版本,别安装2.x,因为差距有点大。
2.1 执行如下命令,下载docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/bin/docker-compose
其中 /usr/bin/docker-compose 是表示本地路径。若路径找不到,则说明 这个本地路径错了,修改一下就可以了。
2.2 对命令进行一个授权
chmod +x /usr/bin/docker-compose
验证:
docker-compose --version三、 安装 harbor的详细步骤
1、下载最新的版本。
我们可以下载当前最新的稳定版本,今天下载的是2.4.0版本的离线安装版harbor-offline-installer-v2.4.0.tgz,具体的网址如下:
https://github.com/goharbor/harbor/releases/tag/v2.4.0
2、 创建安装目录
mkdir /data/install -p
cd /data/install/
(也可以在当前目录里直接wget下载)
wget https://github.com/goharbor/harbor/releases/download/v2.4.0/harbor-offline-installer-v2.4.0.tgz
(若下载慢,可以使用github的加速器,比如https://d.serctl.com 这个网站,将下载地址贴进去,就有国内的下载地址了。)
将下载的离线包上传到该目录,并且解压:
tar zxvf harbor-harbor-offline-installer-v2.4.0.tgz
查看目录:
3 进入harbor目录,将harbor.yml.tmpl 改名为harbor.yml
cd harbor mv harbor.yml.tmpl harbor.yml
4 修改 harbor.yml
[root@muxue104 harbor]# vim harbor.yml
修改几处地方:
(1)hostname:改为本机的ip,以及端口号
hostname: 192.168.157.104
port: 85
(2)将https相关代码注释掉
(3)修改数据卷
data_volume: /data/harbordata
这个目录是本机的一个目录。
修改配置文件完毕,保存退出。
5、 本机创建数据卷,这个目录就是镜像持久化。
[root@muxue104 harbor]# mkdir /data/harbordata
6、执行安装命令
[root@muxue104 harbor]# ./install.sh
7、验证
docker-compose ps
8、访问UI
本地浏览器访问:http://192.168.157.104:85/
登录账号默认admin,密码Harbor12345
(该默认密码可以在harbor.yml里修改)
进入就说明安装成功了。
成功安装完毕!
9、补充一些常用的命令
启动Harbor的一些命令,需要在安装目录/data/install/harbor 里面执行。
docker-compose up -d 启动docker-compose stop 停止docker-compose restart 重新启动四、UI界面的常见操作
1、创建项目
Harbor的项目分为公开和私有的。
公开项目:所有用户都可以访问,通常存放公共的镜像,默认有一个library公开项目。
私有项目:只有授权用户才可以访问,通常存放项目本身的镜像。
我们可以为微服务项目创建一个新的项目:
访问级别,勾选则为公开。
注意:一般来说,一个项目可以存放一组镜像,比如ServA、ServB和ServC的所有版本的镜像。
2、创建用户
3、给私有项目分配用户
角色的权限说明
(1) 访客: 对于指定项目拥有只读权限
(2) 开发人员: 对于指定项目拥有读写权限
(3) 维护人员: 对于指定项目拥有读写权限,创建 Webhooks
(4) 项目管理员: 除了读写权限,同时拥有用户管理/镜像扫描等管理权限
4、新用户就可以登录了。
四、镜像的上传和下载
与该机器网络联通的任何一台机器,都可以通过docker命令上传和下载镜像。找一台服务器(比如IP为192.168.157.103机器)准备操作,再操作之前需将Harbor机器的地址(192.168.157.104::85)加入到信任列表中。操作方法如下:
vi /etc/docker/daemon.json
添加一句话:
"insecure-registries": ["192.168.157.104:85"]
完成的代码如下,是json格式,注意格式:
{"registry-mirrors":["https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com","http://28usf5ts.mirror.aliyuncs.com"],"insecure-registries": ["192.168.157.104:85"]}
wq保存完,需要重启docker服务。
[root@muxue103 ~]# systemctl daemon-reload[root@muxue103 ~]# systemctl restart docker
准备工作完成了,开始操作吧!
1、镜像上传Harbor
(1)先给镜像打标签
[root@muxue103 test-api]# docker images
我们给testapii镜像打标签,代码如下:
docker tag testapii:latest 192.168.157.104:85/saas_api/testapii:v1
结构为 docker tag 原镜像名:标签TAG Harbor服务地址/Harbor项目名/新镜像名:新标签TAG名。
(2)登录Harbor
因为我们在Harbor里创建的项目是私有项目,则需要登录,若公开的项目,则无需登录。
docker login -u 用户名 -p 密码 Harbor服务地址
比如;
docker login -u muxue -p Admin123 192.168.157.104:85
说明登录成功了。
(3)上传镜像
也就是将镜像推送给Harbor服务里。
docker push 192.168.157.104:85/saas_api/testapii:v1
上传成功,我们可以到Harbor的UI界面看下是否已经有该镜像了。
说明已经成功了。
2、从Harbor里下载镜像
操作之前也需要登录Harbor,然后才可以下载,下载的地址,可以通过UI界面里找,入上图红粗框那里可以复制地址。
docker pull 192.168.157.104:85/saas_api/testapii:v1



