Harbor管理docker镜像(1.7.5版本-主从复制)

harbor简介html

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,经过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。做为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提高用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像所有保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。前端


harbor组件java

Harbor在架构上主要由6个组件构成:node

Proxy:Harbor的registry, UI, token等服务,经过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不一样的服务。
Registry: 负责储存Docker镜像,并处理docker push/pull 命令。因为咱们要对用户进行访问控制,即不一样用户对Docker image有不一样的读写权限,Registry会指向一个token服务,强制用户的每次docker 
pull/push请求都要携带一个合法的token, Registry会经过公钥对token 进行解密验证。
Core services: 这是Harbor的核心功能,主要提供如下服务:
UI:提供图形化界面,帮助用户管理registry上的镜像(image), 并对用户进行受权。
webhook:为了及时获取registry 上image状态变化的状况, 在Registry上配置webhook,把状态变化传递给UI模块。
token 服务:负责根据用户权限给每一个docker push/pull命令签发token. Docker 客户端向Regiøstry服务发起的请求,若是不包含token,会被重定向到这里,得到token后再从新向Registry进行请求。
Database:为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据。
Job Services:提供镜像远程复制功能,能够把本地镜像同步到其余Harbor实例中。
Log collector:为了帮助监控Harbor运行,负责收集其余组件的log,供往后进行分析

Harbor实现组成python

[root@localhost harbor]# docker-compose ps
       Name                     Command                  State                                    Ports                              
-------------------------------------------------------------------------------------------------------------------------------------
harbor-adminserver   /harbor/start.sh                 Up (healthy)                                                                   
harbor-core          /harbor/start.sh                 Up (healthy)                                                                   
harbor-db            /entrypoint.sh postgres          Up (healthy)   5432/tcp                                                        
harbor-jobservice    /harbor/start.sh                 Up                                                                             
harbor-log           /bin/sh -c /usr/local/bin/ ...   Up (healthy)   127.0.0.1:1514->10514/tcp                                       
harbor-portal        nginx -g daemon off;             Up (healthy)   80/tcp                                                          
nginx                nginx -g daemon off;             Up (healthy)   0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
redis                docker-entrypoint.sh redis ...   Up             6379/tcp                                                        
registry             /entrypoint.sh /etc/regist ...   Up (healthy)   5000/tcp                                                        
registryctl          /harbor/start.sh                 Up (healthy)

每一个组件都是以Docker容器的形式构建的,官方也是使用Docker Compose来对它进行部署。用于部署Harbor的Docker Compose模板位于 harbor/docker-compose.yml,这个模板文件写明,Harbor是由7个容器组成的;linux

nginx:nginx负责流量转发和安全验证,对外提供的流量都是从nginx中转,因此开放https的443端口,它将流量分发到后端的ui和正在docker镜像存储的docker registry。
harbor-jobservice:harbor-jobservice 是harbor的job管理模块,job在harbor里面主要是为了镜像仓库以前同步使用的;
harbor-ui:harbor-ui是web管理页面,主要是前端的页面和后端CURD的接口;
registry:registry就是docker原生的仓库,负责保存镜像。
harbor-adminserver:harbor-adminserver是harbor系统管理接口,能够修改系统配置以及获取系统信息。
这几个容器经过Docker link的形式链接在一块儿,在容器之间经过容器名字互相访问。对终端用户而言,只须要暴露proxy (即Nginx)的服务端口。
harbor-db:harbor-db是harbor的数据库,这里保存了系统的job以及项目、人员权限管理。因为本harbor的认证也是经过数据,在生产环节大多对接到企业的ldap中;
harbor-log:harbor-log是harbor的日志服务,统一管理harbor的日志。经过inspect能够看出容器统一将日志输出的syslog。


服务器准备
nginx


主机
系统及配置
docker版本
docker-compose版本
harbor版本
192.168.0.201(主)
centos7.2   2核2G 30G盘
18.09.5
1.24.0 1.7.5
192.168.0.202(从)
centos7.2   2核2G 30G盘
18.09.5 1.24.0 1.7.5

安装centos7.2系统,最小化安装git

设置好网络和防火墙  网络须要能访问外网,github

ip 192.168.0.201(主)  192.168.0.202(从)
web

下面关闭防火墙

setenforce 0

systemctl stop firewalld

systemctl disable firewalld

sed -i 's/enforcing/disabled/g' /etc/sysconfig/selinux


设置yum源

cd /etc/yum.repos.d/

yum install vim unzip lrzsz wget net-tools -y

wget http://mirrors.aliyun.com/repo/Centos-7.repo

wget http://mirrors.aliyun.com/repo/epel-7.repo

yum -y install epel-release


安装docker

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -P /etc/yum.repos.d/
yum clean all  && yum makecache fast
yum install docker-ce -y
systemctl enable docker && systemctl restart docker

修改docker启动文件并重启docker
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.0.201    #修改此处增长橙色内容(后面ip可换成域名)
systemctl daemon-reload
systemctl restart docker
[root@localhost harbor]# docker version
Client:
 Version:           18.09.5
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        e8ff056
 Built:             Thu Apr 11 04:43:34 2019
 OS/Arch:           linux/amd64
 Experimental:      false

安装docker-compose

yum install python-pip -y
pip install --upgrade pip
pip install docker-compose #默认最新版本,可使用 docker-compose==version指定安装版本
docker-compose -version

[root@localhost harbor]# docker-compose -v
docker-compose version 1.24.0, build 0aa5906


安装Harbor

harbor有offline和online两种,这里选offline,下载地址https://github.com/goharbor/harbor/releases

图片.png


wget方式没法正常下载或者速度超慢,建议先用浏览器下载  而后上传到两个机器,

wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.5.tgz

cd /home

tar xf harbor-offline-installer-v1.7.5.tgz.tar

cd harbor/


修改配置文件

多数信息无需更改,把hostname变成本身的域名或者ip便可,其余能够保持不变,/data/cert 目录自行须要建立。

mkdir -p /data/cert

vim harbor.cfg

[root@localhost harbor]# cat harbor.cfg |grep -v "^#"|grep -v "^$"

_version = 1.7.0
hostname = 192.168.0.201
ui_url_protocol = http
max_job_workers = 10 
customize_crt = on
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
secretkey_path = /data
admiral_url = NA
log_rotate_count = 50
log_rotate_size = 200M
http_proxy =
https_proxy =
no_proxy = 127.0.0.1,localhost,core,registry
email_identity = 
email_server = smtp.mydomain.com
email_server_port = 25
email_username = sample_admin@mydomain.com
email_password = abc
email_from = admin <sample_admin@mydomain.com>
email_ssl = false
email_insecure = false
harbor_admin_password = Harbor12345
auth_mode = db_auth
ldap_url = ldaps://ldap.mydomain.com
ldap_basedn = ou=people,dc=mydomain,dc=com
ldap_uid = uid 
ldap_scope = 2 
ldap_timeout = 5
ldap_verify_cert = true
ldap_group_basedn = ou=group,dc=mydomain,dc=com
ldap_group_filter = objectclass=group
ldap_group_gid = cn
ldap_group_scope = 2
self_registration = on
token_expiration = 30
project_creation_restriction = everyone
db_host = postgresql
db_password = root123
db_port = 5432
db_user = postgres
redis_host = redis
redis_port = 6379
redis_password = 
redis_db_index = 1,2,3
clair_db_host = postgresql
clair_db_password = root123
clair_db_port = 5432
clair_db_username = postgres
clair_db = postgres
clair_updaters_interval = 12
uaa_endpoint = uaa.mydomain.org
uaa_clientid = id
uaa_clientsecret = secret
uaa_verify_cert = true
uaa_ca_cert = /path/to/ca.pem
registry_storage_provider_name = filesystem
registry_storage_provider_config =
registry_custom_ca_bundle =

执行安装

./install

执行命令,Harbor服务就会根据当期目录下的docker-compose.yml开始下载依赖的镜像,检测并按照顺序依次启动各个服务

用docker-compose ps 命令查看

[root@localhost harbor]# docker-compose ps
       Name                     Command                  State                                    Ports                              
-------------------------------------------------------------------------------------------------------------------------------------
harbor-adminserver   /harbor/start.sh                 Up (healthy)                                                                   
harbor-core          /harbor/start.sh                 Up (healthy)                                                                   
harbor-db            /entrypoint.sh postgres          Up (healthy)   5432/tcp                                                        
harbor-jobservice    /harbor/start.sh                 Up                                                                             
harbor-log           /bin/sh -c /usr/local/bin/ ...   Up (healthy)   127.0.0.1:1514->10514/tcp                                       
harbor-portal        nginx -g daemon off;             Up (healthy)   80/tcp                                                          
nginx                nginx -g daemon off;             Up (healthy)   0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
redis                docker-entrypoint.sh redis ...   Up             6379/tcp                                                        
registry             /entrypoint.sh /etc/regist ...   Up (healthy)   5000/tcp                                                        
registryctl          /harbor/start.sh                 Up (healthy)


Harbor的启动和中止命令:

启动Harbor
# docker-compose start
中止Harbor
# docker-comose stop
重启Harbor
# docker-compose restart

================================

以上步骤两个机器都作

================================


而后浏览器登录http://192.168.0.201/

帐户密码是默认admin / Harbor12345

QQ截图20190430161245.jpg

QQ截图20190430161314.jpg

建立test01项目,非公开

若是是非公开模式,要使用docker login 192.168.0.201 登录  才能上传下载镜像;

若是想其余机器直接访问拉取,能够设置为公开,docker pull 192.168.0.201/test01/busybox:latest  命令才不会出login的错误。

QQ截图20190430161824.jpg

QQ截图20190430161838.jpg


项目建立完成后,回到201服务器上,用命令操做镜像

下载nginx和busybox原始镜像

docker pull nginx
docker pull busybox

给镜像打test01项目标签

docker tag busybox:latest 192.168.0.201/test01/busybox:latest
docker tag nginx:latest 192.168.0.201/test01/nginx:latest

接着登陆    docker login 192.168.0.201

用admin,密码Harbor12345
Username (admin): admin
Password: 
Login Succeeded

登录后将镜像push到仓库

docker push 192.168.0.201/test01/nginx
docker push 192.168.0.201/test01/busybox


测试本地仓库中拉取镜像

docker pull 192.168.0.201/test01/nginx:latest

本机能够直接拉取

其余机器须要修改docker的配置 ,增长 --insecure-registry 192.168.0.201  而后重启docker才行

而且要求test01项目是设置为公开的,才能直接拉取,不然必须用docker login 192.168.0.201登陆后才能拉取


下面设置主从复制

从机器启动后,无需配置界面

主要在主机界面进行配置

仓库管理--新建目标--设置从仓库

QQ截图20190430165246.jpg


而后 复制管理--新建规则

源项目是指主机器上要同步的项目,好比以前建立的test01

目标指的是 从机器

QQ截图20190430165914.jpg


设置完成后 能够看到同步状态

QQ截图20190430165947.jpg


而后打开从机器的web界面查看是否成功,这里看到已经成功同步

图片.png


可参考文章:

https://www.cnblogs.com/panwenbin-logs/p/10218099.html

https://www.jianshu.com/p/4f9474081c8a

http://www.javashuo.com/article/p-vmfddcqg-mg.html

http://www.javashuo.com/article/p-xejarjer-hx.html


 

Harbor配置TLS证书

上面对Harbor的配置都是使用的http协议访问,可是咱们工做中通常都是配置https访问。

下面演示一下怎么配置Harbor可使用https访问,以及配置TLS证书都须要作哪些工做。

下面是简要步骤,详细请结合本身项目调整。


1 修改harbor配置

hostname = docker-hub.vonechain.com
ui_url_protocol = https
customize_crt = on
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key

2 增长hosts解析

 cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.201  docker-hub.vonechain.com

3 生成自签名证书

mkdir -p /data/cert

cd /data/cert/

生成key文件

openssl genrsa -out /data/cert/server.key 2048

生成crt文件   ##注意CN

openssl req -x509 -new -nodes -key /data/cert/server.key -subj "/CN=docker-hub.vonechain.com" -days 5000 -out /data/cert/server.crt

[root@localhost cert]# ll
总用量 8
-rw-r--r-- 1 root root 1135 4月  30 21:01 server.crt
-rw-r--r-- 1 root root 1679 4月  30 21:00 server.key

4 执行安装harbor  

cd /home/harbor

./install     ##就会生成 https 链接了,https://docker-hub.vonechain.com.

Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-db          ... done
Creating harbor-adminserver ... done
Creating redis              ... done
Creating registryctl        ... done
Creating registry           ... done
Creating harbor-core        ... done
Creating harbor-portal      ... done
Creating harbor-jobservice  ... done
Creating nginx              ... done
✔ ----Harbor has been installed and started successfully.----

Now you should be able to visit the admin portal at https://docker-hub.vonechain.com. 
For more details, please visit https://github.com/goharbor/harbor .

而后,windows访问https://docker-hub.vonechain.com
须要添加本地hosts,界面配置test01项目并设置公开    而后在本机上做一些镜像上传  

docker pull busybox

docker tag busybox:latest docker-hub.vonechain.com/test01/busybox:latest

docker login -u admin -p 'Harbor12345' docker-hub.vonechain.com

docker push docker-hub.vonechain.com/test01/busybox:latest


5 配置客户端 192.168.0.88

安装docker

yum install docker -y

增长hosts解析

192.168.0.201  docker-hub.vonechain.com

建立证书目录

mkdir -p /etc/docker/certs.d/docker-hub.vonechain.com

回到harbor主机上把crt文件复制过去

scp server.crt root@192.168.0.88:/etc/docker/certs.d/docker-hub.vonechain.com/

重启客户端docker

vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry docker-hub.vonechain.com

systemctl restart docker

执行拉取镜像

docker pull docker-hub.vonechain.com/test01/busybox:latest

[root@localhost ~]# docker pull docker-hub.vonechain.com/test01/busybox:latest
Trying to pull repository docker-hub.vonechain.com/test01/busybox ... 
latest: Pulling from docker-hub.vonechain.com/test01/busybox
fc1a6b909f82: Pull complete 
Digest: sha256:f79f7a10302c402c052973e3fa42be0344ae6453245669783a9e16da3d56d5b4
Status: Downloaded newer image for docker-hub.vonechain.com/test01/busybox:latest
[root@localhost ~]# docker images
REPOSITORY        TAG     IMAGE ID       CREATED             SIZE
docker-hub.vonechain.com/test01/busybox   latest     af2f74c517aa     3 weeks ago     1.2 MB

到此https模式可用了,全部客户端机器必须用ssl证书才能访问harbor

可参考:http://www.javashuo.com/article/p-vmfddcqg-mg.html

相关文章
相关标签/搜索