好小伙潇潇洒洒

小小的天,有大大的梦想,我有属于我的天!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、介绍

  1. Harbor,是一个英文单词,意思是港湾,港湾是干什么的呢,就是停放货物的,而货物呢,是装在集装箱中的,说到集装箱,就不得不提到Docker容器,因为docker容器的技术正是借鉴了集装箱的原理。所以,Harbor正是一个用于存储Docker镜像的企业级Registry服务。
  2. Registry是Dcoker官方的一个私有仓库镜像,可以将本地的镜像打标签进行标记然后push到以Registry起的容器的私有仓库中。企业可以根据自己的需求,使用Dokcerfile生成自己的镜像,并推到私有仓库中,这样可以大大提高拉取镜像的效率。

二、Harbor核心组件解释

  • Proxy:他是一个nginx的前端代理,代理Harbor的registry,UI, token等服务。
  • db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。
  • UI:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。
  • jobsevice:jobsevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。
  • Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。
  • Registry:镜像仓库,负责存储镜像文件。
  • Log:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。

 

三:Harbor和Registry的比较

Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。


1.提供分层传输机制,优化网络传输
Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。
2.提供WEB界面,优化用户体验
只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。
3.支持水平扩展集群
当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。
4.良好的安全机制
企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。
5.Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。

 

四:Harbor简单部署

官方最小配置

    • 2个cpu
    • 4g内存
    • 40g硬盘,因为是存储镜像的所以推荐硬盘大点  

安装前配置

在真正安装之前,我们还要安装下面这几个组件

  • docker
  • docker-compose
  • python
  • openssl

安装docker

安装步骤请见:https://www.cnblogs.com/maowenqiang/articles/13396098.html

安装docker-compose

参考官方链接:https://docs.docker.com/compose/install/

 

运行此命令下载docker compose的当前稳定版本:

版本号可以支持修改

# curl -L https://get.daocloud.io/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose

  

下载Harbor离线包

https://github.com/goharbor/harbor/releases
安装有两种方式,一种是off-line ,一种是on-line,即离线和在线安装,离线安装需要下载的安装包较大,在线安装下载的安装包很小,可根据自己的情况选择

 

下载离线安装包

# wget  https://github.com/goharbor/harbor/releases/download/v2.0.2/harbor-offline-installer-v2.0.2.tgz

安装Harbor

解压安装包

tar zxvf harbor-offline-installer-v2.0.2.tgz -C /usr/src/ 
cd /usr/src/harbor

 

编辑配置文件

vim harbor.yml

修改hostname为本机ip地址

hostname: 192.168.254.50

其它参数,可以根据实际情况修改,去除多余的注释和空行,配置文件如下:

hostname: 192.168.254.50
http:
  port: 7780
 # port: 443
 # certificate: /your/certificate/path
harbor_admin_password: 12345678
database:
  password: 12345678
  max_idle_conns: 50
  max_open_conns: 1000
data_volume: /data
clair:
  updaters_interval: 12
trivy:
  ignore_unfixed: false
  skip_update: false
  insecure: false
jobservice:
  max_job_workers: 10
notification:
  webhook_job_max_retry: 10
chart:
  absolute_url: disabled
log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /var/log/harbor
_version: 2.0.0
proxy:
  http_proxy:
  https_proxy:
  no_proxy:
  components:
    - core
    - jobservice
    - clair
    - trivy

之后直接执行

./install.sh

出现以下提示,表示安装成功

Creating harbor-jobservice ... 
✔ ----Harbor has been installed and started successfully.----

访问页面

浏览器输入url

http://192.168.254.50:7780

  

 

五、测试推送镜像

登录到另外一台服务器,确保docker已经安装好了。

本地配置仓库地址

由于默认的harbor,已经创建了一个公开项目 libary。

vim /etc/docker/daemon.json

内容如下:

{
"registry-mirrors": ["http://hub-mirror.c.163.com"],
"insecure-registries": ["192.168.254.50:7780"]
}

 

接着重启服务

systemctl restart docker

 

设置Harbor开机启动

使用vim编辑器编辑配置文件vim /lib/systemd/system/harbor.service并向文件中写入

[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor

[Service]
Type=simple
Restart=on-failure
RestartSec=5
#需要注意harbor的安装位置
ExecStart=/usr/local/bin/docker-compose -f  /usr/src/harbor/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f /usr/src/harbor/docker-compose.yml down    

[Install]
WantedBy=multi-user.target
systemctl enable harbor #设置harbor开机自启
systemctl start harbor #启动harbor

 

推送镜像

登录仓库,admin密码还是Harbor12345

复制代码
root@local:~# docker login 192.168.254.50:7780
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
复制代码

 

现在下载一个镜像mysql

docker pull mysql

 

给镜像打tag

docker tag mysql:latest 192.168.254.50:7780/library/mysql

 

推送镜像

root@localost:~# docker push 192.168.254.50:7780/library/mysql
latest: digest: sha256:b589f11ab39a852fd13090aeb56314978c73a16d615e28ec148306889b67889f size: 2828 

pull一次仓库上镜像的pulls就会加一次,可以在web界面上看的

 

posted on 2020-09-11 17:02  Mr.毛小毛  阅读(321)  评论(0)    收藏  举报