Harbor(港口,港湾)是一个用于存储和分发Docker镜像的企业级Registry服务器。除了Harbor这个私有镜像仓库之外,还有Docker官方提供的Registry。相对Registry,Harbor具有很多优势:
1. 提供分层传输机制,优化网络传输 Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。
2. 提供WEB界面,优化用户体验 只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。
3. 支持水平扩展集群 当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。
4. 良好的安全机制 企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。

一、Harbor的安装

1.先安装docker并启动docker,如果对docker的安装不了解的可以看一下我的这篇文章


2.安装docker-compose

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/dockercompose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

3.添加docker-compose执行权限

sudo chmod +x /usr/local/bin/docker-compose

4.查看docker-compose是否安装成功

docker-compose -version

5.下载Harbor的压缩包,下载地址为https://github.com/goharbor/harbor/releases,这里下载的版本为1.9.2

harbor镜像仓库使用 镜像仓库的作用_Docker

6.上传压缩包到服务器,解压,并移动到/opt/harbor目录下

tar -xzf harbor-offline-installer-v1.9.2.tgz
mkdir /opt/harbor
mv harbor/* /opt/harbor

7.修改Harbor的配置

vi harbor.yml

修改hostname和port

hostname: 192.168.142.131
port: 85

8.安装Harbor

./prepare
./install.sh

9.启动Harbor

docker-compose up -d 启动
docker-compose stop 停止
docker-compose restart 重新启动

10.访问Harbor

http://192.168.142.131:85/

输入用户名密码 admi/Harbor12345(这是默认的用户名和密码,可以在harbor.yml中设置)

harbor镜像仓库使用 镜像仓库的作用_harbor镜像仓库使用_02

二、在Harbor中创建用户和项目

1.创建项目

Harbor的项目分为公开和私有的:
公开项目:所有用户都可以访问,通常存放公共的镜像,默认有一个library公开项目。
私有项目:只有授权用户才可以访问,通常存放项目本身的镜像。

创建一个csii的项目

harbor镜像仓库使用 镜像仓库的作用_harbor镜像仓库使用_03

2.创建用户,在用户管理下新建一个用户

harbor镜像仓库使用 镜像仓库的作用_java_04

3.将私有项目分配给用户,点击项目,选择需要添加的项目,点击成员,输入成员姓名,并分配角色,这里分配为开发人员。

harbor镜像仓库使用 镜像仓库的作用_java_05

角色权限说明
访客:对于指定项目拥有只读权限
开发人员:对于指定项目拥有读写权限
维护人员:对于指定项目拥有读写权限,创建 Webhooks
项目管理员:除了读写权限,同时拥有用户管理/镜像扫描等管理权限

三、把镜像上传到Harbor

1.给镜像打上标签

docker tag redis 192.168.142.131:85/csii/redis:v1

打完标签之后的镜像如下

harbor镜像仓库使用 镜像仓库的作用_java_06

2.推送镜像

docker push 192.168.142.131:85/csii/redis:v1

这样就表示推送成功了

harbor镜像仓库使用 镜像仓库的作用_推送_07

可以在Harbor服务器上看到推送的镜像

harbor镜像仓库使用 镜像仓库的作用_harbor镜像仓库使用_08

如果看到以下错误,则需要将Harbor服务添加到Docker信任列表

The push refers to repository [192.168.142.131:85/csii/redis]
Get https://192.168.142.131:85/v2/: http: server gave HTTP response to HTTPS
client

3.把Harbor地址加入到Docker信任列表中,并重启Docker

vi /etc/docker/daemon.json
#添加insecure-registries
{
  "registry-mirrors": ["https://zydiol88.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.142.131:85"]
}

4.再次执行推送命令,会提示权限不足

denied: requested access to the resource is denied

5.登录Harbor

docker login -u 用户名 -p 密码 192.168.142.131:85

6.再次推送就可以成功推送。

四、从Harbor下载镜像

Harbor服务器在192.168.142.131上,我们在192.168.142.128上完成从Harbor下载镜像

1.安装Docker,并启动Docker

2.修改Docker配置,并重启Docker

vi /etc/docker/daemon.json
{
    "registry-mirrors": ["https://zydiol88.mirror.aliyuncs.com"],
    "insecure-registries": ["192.168.142.131:85"]
}

3.先登录,再从Harbor下载镜像

docker login -u 用户名 -p 密码 192.168.142.131:85

4.拉取镜像

docker pull 192.168.142.131:85/csii/redis:v1

拉取结果使用docker images 命令可以看到

harbor镜像仓库使用 镜像仓库的作用_docker_09

harbor镜像仓库使用 镜像仓库的作用_java_10

到此,Harbor的简单使用就结束了。