linux运维、架构之路-企业级镜像仓库Harbor

一、Harbor介绍

     Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。

     Harbor主要组件包括proxy,它是一个nginx前端代理,主要是分发前端页面ui访问和镜像上传和下载流量,Ui提供了一个Web管理界面,当然还包括了一个前端页面和后端API,底层使用mysql数据库;Registry是镜像仓库,负责存储镜像文件,当镜像上传完毕后通过ui创建Registry。 当然registry的token认证也是通过ui组件完成;adminserver是系统的配置管理中心附带检查存储用量,ui和Jobserver启动时候会需要加载adminserver的配置;jobservice是负载镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry并记录job_log,log是日志汇总组件,通过docker的log-driver把日志汇总到一起。

        Harbor 的每个组件都是以 Docker 容器的形式构建的,我们使用 Docker Compose 来对它进行部署。

  • proxy:由 Nginx 服务器构成的反向代理。
  • registry:由 Docker 官方的开源 registry 镜像构成的容器实例。
  • ui:即架构中的 core services, 构成此容器的代码是 Harbor 项目的主体。
  • mysql:由官方 MySql 镜像构成的数据库容器。
  • log: 运行着 rsyslogd 的容器,通过 log-driver 的形式收集其他容器的日志。

二、Harbor原理图

 三、Harbor部署

1、服务器规划

系统

IP地址

主机名

CPU

内存

CentOS  7.5

192.168.56.100

docker

2C

2G

CentOS  7.5

192.168.56.101

harbor

2C

2G

2、docker主机部署docker服务

①下载软件

wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm

②安装软件

yum install docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm -y
yum install docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm -y

③启动Docker服务

systemctl enable docker 
systemctl start docker

3、Harbor部署

①安装Docker-compose

curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

常用命令:

docker-compose up -d             #后台启动,如果容器不存在根据镜像自动创建
docker-compose down   -v         #停止容器并删除容器
docker-compose start             #启动容器,容器不存在就无法启动,不会自动创建镜像
docker-compose stop              #停止容器

②安装Harbor

wget https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.5.0.tgz
tar xf harbor-online-installer-v1.5.0.tgz -C /app

③修改配置

[root@harbor ~]# cd /app/harbor/
[root@harbor harbor]# ll
总用量 854960
drwxr-xr-x 4 root root        37 1月   4 17:06 common
-rw-r--r-- 1 root root      1185 5月   2 2018 docker-compose.clair.yml
-rw-r--r-- 1 root root      1725 5月   2 2018 docker-compose.notary.yml
-rw-r--r-- 1 root root      3596 5月   2 2018 docker-compose.yml
drwxr-xr-x 3 root root       156 5月   2 2018 ha
-rw-r--r-- 1 root root      6685 1月   4 17:02 harbor.cfg
-rw-r--r-- 1 root root 875401338 5月   2 2018 harbor.v1.5.0.tar.gz
-rwxr-xr-x 1 root root      5773 5月   2 2018 install.sh
-rw-r--r-- 1 root root     10771 5月   2 2018 LICENSE
-rw-r--r-- 1 root root       482 5月   2 2018 NOTICE
-rwxr-xr-x 1 root root     27379 5月   2 2018 prepare

修改harbor.cfg文件:

hostname = 192.168.56.101

安装

/app/harbor/install.sh

 ④Web页面访问

地址:  http://192.168.56.101

默认端口为80,需要修改端口请修改docker-compose.yaml对应服务的映射

还需修改common/templates/registry/config.yml文件加入要修改的端口

auth:
  token:
    issuer: registry-token-issuer
    realm: $ui_url:8080/service/token
    rootcertbundle: /etc/registry/root.crt
    service: token-service

 默认用户:admin 密码:Harbor12345

⑤新建项目

 ⑥修改Harbor日志路径

docker-compose.yml

services:
  log:
    image: goharbor/harbor-log:v1.7.0
    container_name: harbor-log 
    restart: always
    dns_search: .
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - DAC_OVERRIDE
      - SETGID
      - SETUID
    volumes:
      - /data/harbor/log/:/var/log/docker/:z
      - ./common/config/log/:/etc/logrotate.d/:z
docker-compose up -d             #后台启动,如果容器不存在根据镜像自动创建
docker-compose down   -v         #使用此命令停止容器并删除容器更改路径才生效

4、修改docker的配置文件

vim /usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd --insecure-registry 192.168.56.101

 重启Docker服务

systemctl daemon-reload
systemctl restart docker

5、测试Docker推送镜像到Harbor仓库

①登录

[root@docker tools]# docker login -u admin -p Harbor12345 192.168.56.101
Login Succeeded

②Pull镜像

[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[root@docker ~]# docker pull daocloud.io/library/nginx:latest
latest: Pulling from library/nginx
0a4690c5d889: Pull complete 
9719afee3eb7: Pull complete 
44446b456159: Pull complete 
Digest: sha256:f83b2ffd963ac911f9e638184c8d580cc1f3139d5c8c33c87c3fb90aebdebf76
Status: Downloaded newer image for daocloud.io/library/nginx:latest

③给镜像打Tag

[root@docker ~]# docker tag daocloud.io/library/nginx:latest 192.168.56.101/demon/nginx:v1

④推送镜像到Harbor仓库

[root@docker ~]# docker push 192.168.56.101/demon/nginx:v1
The push refers to a repository [192.168.56.101/demon/nginx]
589561a3ffb4: Pushed 
ef7dbb0cfc81: Pushed 
d56055da3352: Pushed 
v1: digest: sha256:0069dbf31a3ca8921b9ca112dead0ca95072af04c571c99974a65883bf8ca135 size: 948

⑤登录Harbor仓库验证

 

posted @ 2020-01-04 21:04  闫新江  阅读(449)  评论(0编辑  收藏  举报