Centos7基于Harbor搭建企业级私有Docker仓库

Centos7基于Harbor搭建企业级私有Docker仓库(单节点安装)

一、Harbor简介

  • 1.Harbor介绍

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

  • 2.Harbor特性

    • 基于角色的访问控制 :用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
    • 镜像复制 : 镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
    • 图形化用户界面 : 用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
    • AD/LDAP 支持 : Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
    • 审计管理 : 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
    • 国际化 : 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
    • RESTful API : RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
    • 部署简单 : 提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。
  • 3.Harbor组件

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

    • 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,供日后进行分析。

    各个组件之间的关系如下图所示:

  • 4.Harbor实现

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

    [root@localhost harbor]# docker-compose ps
          Name                     Command                  State                 Ports          
    ---------------------------------------------------------------------------------------------
    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: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)           
    

    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。

    这几个容器通过Docker link的形式连接在一起,这样,在容器之间可以通过容器名字互相访问。对终端用户而言,只需要暴露proxy (即Nginx)的服务端口。

二、安装和配置Harbor

1.环境说明

环境名称版本
系统版本CentOS Linux release 7.6.1810 (Core)
docker-ceDocker version 18.06.3-ce, build d7080c1
docker-composedocker-compose version 1.24.1, build 4667896b
Harborv1.8.0
安装方式离线安装
安装位置/usr/local/bin/harbor

2.首先安装docker-ce

  • 2.1 Docker-ce安装

因为CentOS的安全限制,通过RKE安装K8S集群时候无法使用root账户。所以,建议CentOS用户使用非root用户来运行docker,不管是RKE还是custom安装k8s,详情查看无法为主机配置SSH隧道

# 定义用户名
NEW_USER=rancher
# 添加用户(可选)
sudo adduser $NEW_USER
# 为新用户设置密码
sudo passwd $NEW_USER
# 为新用户添加sudo权限
sudo echo "$NEW_USER ALL=(ALL) ALL" >> /etc/sudoers
# 卸载旧版本Docker软件
sudo yum remove docker \
              docker-client \
              docker-client-latest \
              docker-common \
              docker-latest \
              docker-latest-logrotate \
              docker-logrotate \
              docker-selinux \
              docker-engine-selinux \
              docker-engine \
              container*
# 定义安装版本
export docker_version=18.06.3
# step 1: 安装必要的一些系统工具
sudo yum update -y;
sudo yum install -y yum-utils device-mapper-persistent-data \
    lvm2 bash-completion;
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo;
# Step 3: 更新并安装 Docker-CE
sudo yum makecache all;
version=$(yum list docker-ce.x86_64 --showduplicates | sort -r|grep ${docker_version}|awk '{print $2}');
sudo yum -y install --setopt=obsoletes=0 docker-ce-${version} docker-ce-selinux-${version};
# 如果已经安装高版本Docker,可进行降级安装(可选)
yum downgrade --setopt=obsoletes=0 -y docker-ce-${version} docker-ce-selinux-${version};
# 把当前用户加入docker组
sudo usermod -aG docker $NEW_USER;

Docker-engine

Docker-Engine Docker官方已经不推荐使用,请安装Docker-CE。

  • 2.2 Docker配置

    对于通过systemd来管理服务的系统(比如CentOS7.X、Ubuntu16.X), Docker有两处可以配置参数: 一个是docker.service服务配置文件,一个是Docker daemon配置文件daemon.json。

    配置镜像下载和上传并发数

    从Docker1.12开始,支持自定义下载和上传镜像的并发数,默认值上传为3个并发,下载为5个并发。通过添加”max-concurrent-downloads”和”max-concurrent-uploads”参数对其修改:

    配置镜像加速地址

    Rancher从v1.6.15开始到v2.x.x,Rancher系统相关的所有镜像(包括1.6.x上的K8S镜像)都托管在Dockerhub仓库。Dockerhub节点在国外,国内直接拉取镜像会有些缓慢。为了加速镜像的下载,可以给Docker配置国内的镜像地址。

    可以设置多个registry-mirrors地址,以数组形式书写,地址需要添加协议头(https或者http)。

    配置insecure-registries私有仓库

    Docker默认只信任TLS加密的仓库地址(https),所有非https仓库默认无法登陆也无法拉取镜像。insecure-registries字面意思为不安全的仓库,通过添加这个参数对非https仓库进行授信。可以设置多个insecure-registries地址,以数组形式书写,地址不能添加协议头(http)。

    配置Docker存储驱动

    OverlayFS是一个新一代的联合文件系统,类似于AUFS,但速度更快,实现更简单。Docker为OverlayFS提供了两个存储驱动程序:旧版的overlay,新版的overlay2(更稳定)。

    先决条件:

    • overlay2: Linux内核版本4.0或更高版本,或使用内核版本3.10.0-514+的RHEL或CentOS。
    • overlay: 主机Linux内核版本3.18+
    • 支持的磁盘文件系统
    配置日志驱动

    容器在运行时会产生大量日志文件,很容易占满磁盘空间。通过配置日志驱动来限制文件大小与文件的数量。 >限制单个日志文件为100M,最多产生3个日志文件

    综合配置如下:
    # 修改daemon.json
    [root@localhost harbor]# vim /etc/docker/daemon.json
    {
        "log-driver": "json-file",
        "log-opts": {
        "max-size": "100m",
        "max-file": "3"
        },
        "insecure-registries":[ "172.16.218.145" ],
        "max-concurrent-downloads": 10,
        "max-concurrent-uploads": 10,
        "registry-mirrors": ["https://ryzw8bt9.mirror.aliyuncs.com"],
        "storage-driver": "overlay2",
        "storage-opts": [
        "overlay2.override_kernel_check=true"
        ]
    }
    
    

3.安装docker-compose

必须先安装docker

方法一:二进制安装
a.下载二进制文件
[root@localhost harbor]# curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

如果需要安装其他版本的话,请修改上面命令中的版本号。

b.赋予二进制文件可执行权限
[root@localhost harbor]# chmod +x /usr/local/bin/docker-composels
c.根据自己的情况决定是否安装命令补全功能
[root@localhost harbor]# yum install bash-completion 
[root@localhost harbor]# curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose

重新登陆后就生效了

[root@localhost harbor]# docker-compose 
build    config   down     exec     images   logs     port     pull     restart  run      start    top      up       
bundle   create   events   help     kill     pause    ps       push     rm       scale    stop     unpause  version  
d.测试是否安装成功
# docker-compose --version
[root@localhost harbor]# docker-compose version 1.24.1, build 4667896b

4.下载Harbor离线安装压缩包

安装方式分为在线安装和离线安装两种方式,我这里选择的是离线安装。

https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.0.tgz

安装:

[root@localhost harbor]# cd /usr/local/bin/
[root@localhost harbor]# tar zxf harbor-offline-installer-v1.8.0.tgz
[root@localhost harbor]# cd /usr/local/bin/harbor/
[root@localhost harbor]# ls
common  docker-compose.yml  harbor.v1.8.0.tar.gz  harbor.yml  install.sh  LICENSE  prepare

5.修改配置文件

说明:从 1.8.0 后,harbor配置文件由原先的 harbor.cfg 改为 harbor.yml

配置文件为:/usr/local/bin/harbor/harbor.yml

  • 比较重要的参数说明
    • hostname 目标主机的主机名,用于访问Portal和注册表服务。它应该是目标计算机的IP地址或完全限定的域名(FQDN),例如,192.168.1.10reg.yourdomain.com。不要使用localhost127.0.0.1作为主机名 - 外部客户端需要访问注册表服务

    ​ 这里修改为我们的主机ip即可 例如修改为 172.16.218.145

    • data_volume: 存储 harbor 数据的位置。

    • harbor_admin_password:管理员的初始密码。此密码仅在Harbor首次启动时生效。之后,将忽略此设置,并且应在Portal中设置管理员密码。请注意,默认用户名/密码为admin / Harbor12345。

  • 关于端口配置:
    • http:

      • port:你的http的端口号
    • https:用于访问Portal和令牌/通知服务的协议。如果启用了公证,则必须设置为https。请参阅使用HTTPS访问配置Harbor

      • port:https的端口号
      • certificate:SSL证书的路径,仅在协议设置为https时应用。
      • private_key:SSL密钥的路径,仅在协议设置为https时应用。

6.执行安装

# 执行  ./prepare
[root@localhost harbor]# ./prepare


# 执行 ./install.sh
[root@localhost harbor]# ./install.sh

# 查看启动情况
[root@localhost harbor]# docker-compose ps

四、使用Harbor

1.配置免Https

修改  /etc/docker/daemon.json
[root@localhost harbor]# vim /etc/docker/daemon.json

# 加上 允许的仓库
{
  "insecure-registries":[
    "172.16.218.145"
  ]
}

2.重启docker和harbor

# 重启docker 
[root@localhost harbor]# systemctl daemon-reload 
[root@localhost harbor]# systemctl restart docker.service

# 重启harbor仓库
# cd 到 harbor的安装目录
[root@localhost harbor]# cd /usr/local/bin/harbor

# 执行命令
[root@localhost harbor]# docker-compose stop
[root@localhost harbor]# docker-compose up -d


3.登录

4.上传镜像

# linux 上登录harbor仓库
# 172.16.xx.xx 表示 linux服务器地址,请换成自己的服务器ip
# 注意要说明自己登陆哪个ip,不然默认会登陆到docker hub,即docker官方仓库,这不是我们想要的
[root@localhost harbor]# docker login  172.16.xx.xx

# 修改待上传镜像的tag
[root@localhost harbor]# docker tag nginx:1.17.1 172.16.218.145/test/nginx:1.17.1

# 上传镜像
[root@localhost harbor]# docker push 172.16.218.145/test/nginx:1.17.1 

# 出现 类似下述信息  表示上传成功
1.17.1: digest: sha256:1e2ce8e6a852713d789c6315642d1483d1efdb4acee4699817810bef219ec93d size: 1366

5.查看镜像

6.如何pull镜像

[root@localhost bin]# docker pull 172.16.218.145/library/nginx:1.17.1
v.1.8.0: Pulling from library/nginx
4e360eca2e60: Pull complete 
b08cc3be5c43: Pull complete 
a750a309c85d: Pull complete 
49b2d8335a1a: Pull complete 
31e8f89dc042: Pull complete 
Digest: sha256:1e2ce8e6a852713d789c6315642d1483d1efdb4acee4699817810bef219ec93d
Status: Downloaded newer image for 172.16.218.145/library/redis-photon:1.17.1

参考:
https://goharbor.io/
https://www.cnrancher.com/docs/rancher/v2.x/cn/install-prepare/registry/
https://www.cnblogs.com/pangguoping/p/7650014.html
https://www.cnblogs.com/haoprogrammer/p/11023926.html
https://www.jianshu.com/p/1409967439d6
https://www.cnblogs.com/kevingrace/p/6547616.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值