您的位置:首页 > 运维架构 > Docker

企业级Docker镜像仓库harbor的部署和使用

2018-02-09 13:20 1636 查看
部署企业私有仓库往往是很有必要的, 他可以帮助你管理企业的一些敏感镜像, 同时由于Docker Hub的下载速度和GFW的原因, 往往需要将一些无法直接下载的镜像导入本地私有仓库. 而Harbor就是部署企业私有仓库的一个不二之选。

Harbar简介

Harbor是VMware公司开源了企业级Registry项目, 其的目标是帮助用户迅速搭建一个企业级的Docker registry服务。它以Docker公司开源的registry为基础,额外提供了如下功能:

基于角色的访问控制(Role Based Access Control)

基于策略的镜像复制(Policy based image replication)

镜像的漏洞扫描(Vulnerability Scanning)

AD/LDAP集成(LDAP/AD support)

镜像的删除和空间清理(Image deletion & garbage collection)

友好的管理UI(Graphical user portal)

审计日志(Audit logging)

RESTful API

部署简单(Easy deployment)

架构介绍

这里借用别人一张图:



Harbor依赖的外部组件:

Nginx(Proxy): Harbor的registry,UI,token等服务,通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务。

Registry v2: Docker官方镜像仓库, 负责储存Docker镜像,并处理docker push/pull命令。由于我们要对用户进行访问控制,即不同用户对Docker image有不同的读写权限,Registry会指向一个token服务,强制用户的每次docker pull/push请求都要携带一个合法的token, Registry会通过公钥对token进行解密验证。

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

Harbor自己组件:

Core services(Admin Server): 这是Harbor的核心功能,主要提供以下服务:

UI:提供图形化界面,帮助用户管理registry上的镜像(image), 并对用户进行授权。

webhook:为了及时获取registry 上image状态变化的情况, 在Registry上配置webhook,把状态变化传递给UI模块。

Auth服务:负责根据用户权限给每个docker push/pull命令签发token. Docker 客户端向Regiøstry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求。

API: 提供Harbor RESTful API

Replication Job Service:提供多个 Harbor 实例之间的镜像同步功能。

Log collector:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。

部署

这里不使用kubernetes来部署, 原因是镜像仓库非常重要, 尽量保证部署和维护的简洁性, 因此这里直接使用compose的方式进行部署。

官方提供3种部署Harbor的方式:

在线安装: 从Docker Hub下载Harbor的镜像来安装, 由于Docker Hub比较慢, 建议Docker配置好加速器。

离线安装: 这种方式应对与部署主机没联网的情况使用。需要提前下载离线安装包: harbor-offline-installer-.tgz 到本地

OVA安装: 这个主要用vCentor环境是使用

后面部署时会为Docker配置镜像加速器, 因此会采用在线部署的方式, 部署步骤如下:

下载Harbor最新的在线安装包

配置Harbor(harbor.cfg)

运行install.sh来安装和启动Harbor

环境要求与准备

Harbor以容器的形式进行部署, 因此可以被部署到任何支持Docker的Linux发行版, 并且具备如下环境:

Python2.7+

Docker Engine 1.10+

Docker Compose 1.6.0+

这里使用CentOS7.3的系统, Python2.7系统自带了, 剩下的就是安装Docker和Compose:

[root@harbor01 ~]# yum install docker -y
[root@harbor01 ~]# yum -y install epel-release
[root@harbor01 ~]# yum install python-pip -y
[root@harbor01 ~]# pip install docker-compose
# 查看安装完成的Docker和Compose的版本
[root@harbor01 ~]# docker version
Client:
Version:         1.12.6
API version:     1.24
Package version: docker-1.12.6-68.gitec8512b.el7.centos.x86_64
Go version:      go1.8.3
Git commit:      ec8512b/1.12.6
Built:           Mon Dec 11 16:08:42 2017
OS/Arch:         linux/amd64
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
[root@harbor01 ~]# pip freeze | grep compose
docker-compose==1.18.0


为Docker配置加速器, 方便通过国内镜像服务器快速拉取Docker Hub提供的镜像

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://v5d7kh0f.mirror.aliyuncs.com"]
}
EOF
systemctl enable docker
systemctl start  docker
systemctl status  docker


下载安装包

到Harbor的GitHub仓库的Release页面, 下载最新的在线安装包(如果下载不了, 请从这里下载百度网盘Harbor安装包:

[root@harbor01 ~]# wget https://storage.googleapis.com/harbor-releases/harbor-online-installer-v1.3.0.tgz [root@harbor01 ~]# tar vxf harbor-online-installer-v1.3.0.tgz


配置Harbor

在刚才解压完的目录下有harbor配置文件: harbor.cfg, 这里有几处必要配置需要修改:

hostname: 修改成你本机的ip地址

db_password: 数据库root密码

harbor_admin_password
: harbor初始管理员密码为Harbor12345, 这里最好修改成自己的

其他详细的参数请查看Harbor官方文档(见参考)

启动Harbor

解压完过后再harbor目录下有一个install.sh, 执行它来进行安装

[root@harbor01 harbor]# ./install.sh
[root@harbor01 harbor]# docker-compose ps
Name                     Command               State                                Po
9c4a
rts
------------------------------------------------------------------------------------------------------------------------------
harbor-adminserver   /harbor/start.sh                 Up
harbor-db            /usr/local/bin/docker-entr ...   Up      3306/tcp
harbor-jobservice    /harbor/start.sh                 Up
harbor-log           /bin/sh -c /usr/local/bin/ ...   Up      127.0.0.1:1514->10514/tcp
harbor-ui            /harbor/start.sh                 Up
nginx                nginx -g daemon off;             Up      0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
registry             /entrypoint.sh serve /etc/ ...   Up      5000/tcp


然后访问:



使用

服务安装好了过后, 下面介绍如何通过Docker Client使用Harbor

配置docker客户端使用Harbor

因为Harbor开启的是HTTP服务, 而不是HTTPS, 所以要修改下Docker的配置:/etc/docker/daemon.json, 添加参数insecure-registries:

[root@harbor01 ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://v5d7kh0f.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.204.15"]
}


修改过后重启docker, 然后重启Harbor服务:

[root@harbor01 harbor]# systemctl restart docker
[root@harbor01 harbor]# docker-compose stop
Stopping harbor-jobservice  ... done
Stopping harbor-ui          ... done
Stopping harbor-db          ... done
Stopping registry           ... done
Stopping harbor-adminserver ... done
Stopping harbor-log         ... done
[root@harbor01 harbor]# docker-compose start
Starting log         ... done
Starting adminserver ... done
Starting registry    ... done
Starting ui          ... done
Starting mysql       ... done
Starting jobservice  ... done
Starting proxy       ... done


镜像的Push和Pull

为了使用Harbor我们需要在Harbor上建立一个项目:kubernetes



注意: 一定要先有项目 然后按照192.168.204.15/{project-name}/{image-name}[:Tag] 的方式打Tag

(a). 建好项目后, 我们先测试下能否Login Harbor

[root@harbor01 harbor]# docker login 192.168.204.15
Username: admin
Password:
Login Succeeded


(b). 然后为我们的镜像打上相应的标签, 注意标签格式: 192.168.204.15/{project-name}/{image-name}[:Tag]

[root@harbor01 ~]# docker tag docker.io/nginx:latest 192.168.204.15/kubernetes/nginx:v1.10
[root@harbor01 ~]# docker push 192.168.204.15/kubernetes/nginx:v1.10
The push refers to a repository [192.168.204.15/kubernetes/nginx]
a103d141fc98: Pushed
73e2bd445514: Pushed
2ec5c0a4cb57: Pushed
v1.10: digest: sha256:926b086e1234b6ae9a11589c4cece66b267890d24d1da388c96dd8795b2ffcfb size: 948


(c). 最后在另一台机器上面拉取镜像(记得配置Docker客户端insecure-registries参数, 参考上面):

~/Blogs » docker pull 192.168.204.15/kubernetes/nginx:v1.10
v1.10: Pulling from kubernetes/nginx
e7bb522d92ff: Pull complete
6edc05228666: Pull complete
cd866a17e81f: Pull complete
Digest: sha256:926b086e1234b6ae9a11589c4cece66b267890d24d1da388c96dd8795b2ffcfb
Status: Downloaded newer image for 192.168.204.15/kubernetes/nginx:v1.10


参考

Harbor GitHub

Harbor 安装手册

Harbor 用户手册

用 Harbor 和 Kubernetes 构建高可用企业级镜像仓库
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: