目录

一、什么是docker harbor

1.1 harbor的概述

1.2 harbor 的核心组件

1.3 docker私有仓库架构

二、harbor去构建docker私有仓库

2.1 环境

 2.2 部署

2.2.1 上传docker-compose

 2.2.2 安装harbor

2.2.3 配置harbor参数文件

 2.2.4 启动harbor

 2.3 查看harbor启动镜像和容器

2.3.1 查看镜像

2.3.2 查看服务容器是否开启

 2.4 在网站中创建项目

2.5 在本地测试仓库的功能

 2.6 维护管理harbor

2.7 创建harbor用户

2.8 移除Harbor中的镜像


一、什么是docker harbor

1.1 harbor的概述

harbor是VMware公司开源的企业级docker registry项目。主要是为了实现为用户去迅速搭建一个docker registry服务。

Harbor以Docker 公司开源的Registry 为基础,提供了图形管理UI、基于角色的访问控制(Role Based AccessControl)、AD/LDAP集成、以及审计日志(Auditlogging)等企业用户需求的功能,同时还原生支持中文。

Harbor的每个组件都是以Docker 容器的形式构建的,使用docker - compose来对它进行部署。用于部署Harbor 的docker- compose模板位于harbor/ docker-compose.yml。

1.2 harbor 的核心组件

①Proxy: Harbor 的Registry、UI、Token 服务等组件,都处在nginx 反向代理后边。

该代理将来自浏览器、docker clients .的请求转发到后端不同的服务上。

②Registry:负责储存Docker 镜像,并处理Docker push/pull 命令。

由于要对用户进行访问控制,即不同用户对Docker镜像有不同的读写权限,Registry 会指向一个Token 服务,强制用户的每次Docker pull/push 请求都要携带一个合法的Token,Registry会通过公钥对Token 进行解密验证。

③core services: Harbor的核心功能,主要提供以下3个服务:

UI (harbor-ui) :提供图形化界面,帮助用户管理Registry. 上的镜像(image) ,并对用户进行授权。
WebHook: 为了及时获取Registry.上 image状态变化的情况,在Registry上配置Webhook, 把状态变化传递给UI模块。
Token 服务:负责根据用户权限给每个Docker push/pull 命令签发Token。 Docker 客户端向Registry 服务发起的请求,如果不包含Token, 会被重定向到Token 服务,获得Token 后再重新向Registry 进行请求。

④Database (harbor-db) :为core services提 供数据库服务,负责储存用户权限、审计日志、Docker镜像分组信息等数据。

⑤Job services:主要用于镜像复制,本地镜像可以被同步到远程Harbor实例上。

⑥Log collector (harbor-log) :负责收集其他组件的日志到一个地方。
 

1.3 docker私有仓库架构

宝塔 docker里面连接redis docker连接harbor_Docker

 所有的请求都经过proxy代理,proxy代理转发给Core services和Registry,其中Core services包括UI界面、token令牌和webhook网页服务功能,Registry主要提供镜像存储功能。如果要进行下载上传镜像,要经过token令牌验证然后从Registry获取或上传镜像,每一次下载或上传都会生成日志记录,会记入Log collector,而用户身份权限及一些镜像语言信息会被存储在Database中。
 

二、harbor去构建docker私有仓库

2.1 环境

主机

操作系统

IP地址

软件

server

CentOS7.6

192.168.58.88

docker、docker-compose、harbor-offline-v1.1.2

 2.2 部署

2.2.1 上传docker-compose

cd /usr/local
rz docker-compose
chmod +x docker-compose
mv docker-compose /usr/bin             移动到路径环境下,便于系统识别

宝塔 docker里面连接redis docker连接harbor_宝塔 docker里面连接redis_02

 2.2.2 安装harbor

rz harbor-offline-installer-v1.2.2.tgz
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/

宝塔 docker里面连接redis docker连接harbor_容器_03

2.2.3 配置harbor参数文件

 [root@harbor local]# vim /usr/local/harbor/harbor.cfg 
 
#修改第五行
hostname = 192.168.58.88

 2.2.4 启动harbor

sh /usr/local/harbor/install.sh

宝塔 docker里面连接redis docker连接harbor_docker_04

 2.3 查看harbor启动镜像和容器

2.3.1 查看镜像

宝塔 docker里面连接redis docker连接harbor_运维_05

2.3.2 查看服务容器是否开启

cd /usr/local/harbor/
docker-compose ps

宝塔 docker里面连接redis docker连接harbor_容器_06

 2.4 在网站中创建项目

浏览器访问访问http://192.168.58.88,默认的管理员用户名和密码是 admin/Harbor12345。

192.168.111.20
用户名:admin
密码:Harbor12345

宝塔 docker里面连接redis docker连接harbor_docker_07

2.5 在本地测试仓库的功能

#登陆
docker login -u admin -p Harbor12345 http://127.0.0.1
 
#下载镜像进行测试
docker pull tomcat
 
#镜像打标签
docker tag tomcat 127.0.0.1/public/tomcat:v1
 
#上传镜像到Harbor
docker push 127.0.0.1/public/tomcat:v1

宝塔 docker里面连接redis docker连接harbor_容器_08

宝塔 docker里面连接redis docker连接harbor_宝塔 docker里面连接redis_09

 

如果登录不上解决办法:

vim /usr/lib/systemd/system/docker.service
#修改内容地方
......
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.111.20 --containerd=/run/containerd/containerd.sock
......
 
#重启服务
systemctl daemon-reload
systemctl restart docker
 
#再次登录
docker login -u admin -p Harbor12345 http://192.168.111.20

 

宝塔 docker里面连接redis docker连接harbor_容器_10

 2.6 维护管理harbor

可以使用 docker-compose 来管理 Harbor。一些有用的命令如下所示,必须在与
docker-compose.yml 相同的目录中运行。

修改 Harbor.cfg 配置文件
要更改 Harbour 的配置文件时,请先停止现有的 Harbour 实例并更新 Harbor.cfg;然
后运行 prepare 脚本来填充配置;最后重新创建并启动 Harbour 的实例。
 

#卸载
docker-compose down -v
 
#编辑配置文件 
vim harbor.cfg
 
#填充配置
./prepare
 
#启动Harbor
docker-compose up -d
 
#如果报错
解决思路
关闭防火墙、重启docker
systemctl stop firewalld
setenfore 0
systemctl restart docker

2.7 创建harbor用户

宝塔 docker里面连接redis docker连接harbor_运维_11

宝塔 docker里面连接redis docker连接harbor_宝塔 docker里面连接redis_12

 在客户机上操作  192.168.58.99 

宝塔 docker里面连接redis docker连接harbor_运维_13

 

宝塔 docker里面连接redis docker连接harbor_运维_14

宝塔 docker里面连接redis docker连接harbor_运维_15

访客的操作

宝塔 docker里面连接redis docker连接harbor_容器_16

 

宝塔 docker里面连接redis docker连接harbor_docker_17

2.8 移除Harbor中的镜像

 cd /data/registry/docker/registry/v2/repositories/ 
ls

宝塔 docker里面连接redis docker连接harbor_宝塔 docker里面连接redis_18

docker-compose down -v
  
 #如果需要重新部署,需要移除Harbor服务容器全部数据
 #持久数据,如镜像,数据库等在宿主机的/data目录下,日志在宿主机的/var/log/Harbor目录下
 rm -rf /data/database
 rm -rf /data/registry