一、什么是 Harbor

Harbor 是一个开源的云本地 registry 仓库,可以用于管理和储存 Docker 镜像。Harbor 支持在多个仓库直接进行复制镜像,提供用户管理和访问控制和活动审计。

Harbor 由以下服务组成(每个服务都由一个容器运行):

  • nginx
  • harbor-jobservice
  • harbor-portal
  • harbor-core
  • registryctl
  • harbor-db
  • redis
  • registry
  • harbor-log

本文搭建的 Harbor 是基于 1.8.0,因为我最近准备写这个文档的时候,就发现 Harbor 最新版本为 1.8.0 了,本着追寻潮流,引领时尚的做人原则,就选择基于 1.8.0 来书写这篇文档,1.8.0 相对于之前的版本还是有比较多的更新的。

  • 支持 OpenID Connect
  • 支持机器人账户,可以将机器人账户设置只具有推送和拉取镜像的权限。
  • 复制改进,扩展 Harbor-to-Harbor 的复制功能,增加了 Harbor --> Docker Hub 、Harbor---> Docker Registry 、Harbor---> Huawei Registry 的功能。
  • 支持定时清理任务,支持状态检查 API,增加了新的项目角色,不仅仅是开发人员和管理员,还有维护人员、访客。
  • 引入 harbor.yml 替代 harbor.cfg,Docker Registry 升级到 2.7.1。

二、Harbor 安装

官方安装文档(2019.0514): https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

官方文档的安装方法主要还是针对于 1.8.0 之前的版本,后续官方应该会对 1.8.0 版本进行更新文档。暂时没有针对新的版本的文档。

Harbor 的安装是基于 docker-compose ,通过构建多个容器来组成一个服务。

2.1、Harbor 安装环境

Harbor 的硬件需求

Resource Capacity Description
CPU minimal 2 CPU 4 CPU is preferred
Mem minimal 4GB 8GB is preferred
Disk minimal 40GB 160GB is preferred

软件需求

Software Version Description
Python version 2.7 or higher Note that you may have to install Python on Linux distributions (Gentoo, Arch) that do not come with a Python interpreter installed by default
Docker engine version 17.03.0-ce+ or higher For installation instructions, please refer to: https://docs.docker.com/engine/installation/
Docker Compose version 1.18.0 or higher For installation instructions, please refer to: https://docs.docker.com/compose/install/
Openssl latest is preferred Generate certificate and keys for Harbor

端口需求

Port Protocol Description
443 HTTPS Harbor portal and core API will accept requests on this port for https protocol
4443 HTTPS Connections to the Docker Content Trust service for Harbor, only needed when Notary is enabled
80 HTTP Harbor portal and core API will accept requests on this port for http protocol

目前,Harbor 使用的数据库仅支持 PostgreSQL 数据库。

2.2、Harbor安装

Harbor 有两种安装方法:

  • 在线安装,在线安装需要网络,安装包非常小。
  • 离线安装,离线安装,本地主机可以没有网络,安装包会比较大。

我们这里选择的是离线安装,避免因国内网络问题导致安装耗时比较久。

安装 docker-compose ,版本需要1.18.0+

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

安装 Harbor

# 获取需要安装的版本
https://github.com/goharbor/harbor/releases
# 下载
cd /opt/ && wget 下载版本链接
tar -xzf harbor-offline-installer*
cd harbor
# 编辑配置文件 harbor.yml
vim harbor.yml
# 需要更改的参数
hostname: 192.168.15.170 # 绑定ip,不能使用127.0.0.1和localhost
http: # 监听端口,默认80,也就是我们 管理ui访问的端口
port: 80
harbor_admin_password: Harbor12345 # 设置管理员密码
## 还可以设置启动 https,并指定证书,和指定数据目录 # 安装
./install.sh

默认安装是不包含 Notary 和 Clair (用于漏洞扫描)。但是已经与他们集成了。我们可以使用

默认是使用 HTTP 协议,我们可以配置证书并使用 HTTPS 来访问 Harbor。

2.3 配置HTTPS

说实话我开始是抵触的,我不想去使用它,但是当我考虑到,我不可能暂停我所有已经运行的容器来修改配置,来解决 docker login的问题,所有我只能老老实实的来配置 HTTPS ,这个烦人的 HTTPS。

官方配置文档: https://github.com/goharbor/harbor/blob/master/docs/configure_https.md

我们这里演示的是创建自己的 证书,实际生产环境中我们可以去阿里云或者其他云服务器厂商申请免费的 证书。

创建证书

# 创建存放证书的目录
mkdir -p /data/cert/
cd /data/cert/
# 创建自签名证书key文件
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=TW/ST=Taipei/L=Taipei/O=example/OU=Personal/CN=192.168.15.170" \
-key ca.key \
-out ca.crt #CN 替换为你的仓库域名

修改配置

#配置 HTTPS 配置
https:
# # https port for harbor, default is 443
port: 443
# # The path of cert and key files for nginx
certificate: /data/cert/ca.crt
private_key: /data/cert/ca.key

重新初始化 Harbor

# 暂停
docker-compose down -v
prepare # 生成配置文件,根据 harbor.yml 配置生成docker-compose文件。
docker-compose up -d # 后台启动

客户端配置

将 Harbor 生成的证书 /data/cert/ca.crt 复制到 客户端的 /etc/docker/certs.d/仓库域名/

然后重启docker 。

docker  login  仓库域名

三、Harbor 的使用

3.1、登录Harbor并使用

登录网址 : ip,http://192.168.15.170

默认的用户名和密码是:

用户名:admin

密码: Harbor12345

登录 Harbor 并创建一个私有项目 test 。

1.8.0版本使用界面图

1.7.5版本使用界面图

(不知道为啥上面有一坨绿色,难道是……,不可能的)。

本地登录 并且上传镜像

docker  login 192.168.15.170

docker  tag  centos:latest   192.168.15.170/test/centos:latest  # tag 名称= 仓库地址/项目名称/镜像名称:标记(版本号)
docker push 192.168.15.170/test/centos:latest

下载镜像

docker pull 192.168.15.170/test/centos:latest

3.2、注意事项

在进行登录的过程中我们会遇到以下的问题,我们也给出了解决办法。

# 登录
docker login 192.168.15.170
# 登录报错
[root@localhost harbor]# docker login 192.168.15.170
Username: admin
Password:
Error response from daemon: Get https://192.168.15.170/v2/: dial tcp 192.168.15.170:443: connect: connection refused # 解决办法 ,官方的安装文档也是有写到这个问题
在 dockerd 启动参数中加上 --insecure-registry=192.168.15.170
编辑配置文件 /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry=192.168.15.170

四、Harbor 管理

4.1 启动暂停

我们可以使用 docker-compose 来管理 Harbor 的生命周期,以下命令的运行环境目录需要与 docker-compose.yml 是同一个目录。

# 暂停 Harbor
docker-compose stop
# 启动 Harbor
docker-compose start # 更改 harbor.yml,1.8.0之前的版本配置文件是 harbor.cfg
docker-compose down -v
vim harbor.yml # 更改配置
prepare # 生成配置文件,根据 harbor.yml 配置生成docker-compose文件。
docker-compose up -d # 删除 Harbor 的容器,将镜像数据和 Harbor的数据库文件保存在文件系统上。
docker-compose down -v # 彻底地删除 Harbor 的数据和镜像
rm -r /data/database
rm -r /data/registry

默认情况下,Harbor 的数据保存在 /data/ 下,即使我们删除或者重建 Harbor 数据不会发生改变。并且 Harbor 使用了 rsyslog 来进行收集每个容器的日志,默认情况下,这些日志文件储存在主机的 /var/loh/harbor/

更改配置文件

Harbor 默认的监听端口是 80(HTTP)和 443(HTTPS).

对于1.8.0版本

方法一 : 更改 harbor.yml 配置文件

在配置文件中有配置 监听端口 和使用具体协议的位置,我们根据各自需求进行设置。

注意,我们这边进行更改 docker-compose.yml 配置文件 来更改配置是无效的,因为当我们运行了 prepare docker-compose文件就会被重写,所以更改 docker-compose.yml 是无效的。

对于1.8.0之前的版本

对于 HTTP 协议。

方法一 :更改 docker-compose.yml 配置文件

  proxy:
image: goharbor/nginx-photon:v1.7.5
container_name: nginx
restart: always
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
- NET_BIND_SERVICE
volumes:
- ./common/config/nginx:/etc/nginx:z
networks:
- harbor
dns_search: .
ports:
- 80:80
- 443:443
- 4443:4443
depends_on:
- postgresql
- registry
- core
- portal
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "proxy"
# 将原有的内部监听80端口替换为 8888
proxy:
image: goharbor/nginx-photon:v1.7.5
container_name: nginx
restart: always
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
- NET_BIND_SERVICE
volumes:
- ./common/config/nginx:/etc/nginx:z
networks:
- harbor
dns_search: .
ports:
- 8888:80
- 443:443
- 4443:4443
depends_on:
- postgresql
- registry
- core
- portal
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "proxy"

方法二 更改 harbor.cfg ,将端口添加到参数 hostname上。

hostname = 192.168.15.170:8888

对于HTTPS 协议

跟配置 HTTP 协议一致。

更改了配置之后,我们需要重新部署 Harbor.

#  以下命令在 docker-compose.yml 文件所在目录中运行
./prepare
docker-compose up -d

2020年3月14号

最近一个群友反馈的一问题,就是 docker 在push 镜像到 harbor 的时候, 有报错:

blob upload unknown

了解到这个哥们在 harbor 前面加了 Nginx.

他在 Nginx 配置里有 proxy_set_header Host $http_host 这个,我们把这个注释后,reload 了一下 Nginx,就可以了。

这个问题初步判断,是不是 harbor 会对 Host 的值进行验证。这个后续再去探究。

Docker 企业级镜像仓库 Harbor 的搭建与维护的更多相关文章

  1. Docker: 企业级镜像仓库Harbor的使用

    上一节,演示了Harbor的安装部署 这次我们来讲解 Harbor的使用. 我们需要了解到: 1. 如何推镜像到镜像仓库 2. 如何从镜像仓库拉取镜像 3. 如何运行从私有仓库拉取的镜像 # 查看 h ...

  2. 【Docker】企业级镜像仓库harbor的搭建(http/https)及使用

    一:用途 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器. 二:安装docker-ce 环境:阿里云轻量应用服务器CentOS 7.3 这里通过yum Docker源仓 ...

  3. 企业级Docker容器镜像仓库Harbor的搭建

    Harbor简述 Habor是由VMWare公司开源的容器镜像仓库.事实上,Habor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理 ...

  4. docker企业级镜像仓库Harbor管理

    Harbor概述 Harbor是由VMWare公司开源的容器镜像仓库.事实上,Harbor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括: ...

  5. Docker: 企业级镜像仓库Harbor部署(http)

    Harbor离线安装包下载地址:https://github.com/goharbor/harbor Docker compose(安装harbor需要用到docker compose)下载地址:ht ...

  6. Docker企业级镜像仓库harbor(vmware 中国团队)

    第一步:安装docker和docker-compose 第二步:下载harbor-offline-installer-v1.3.0.tgz 第三步:上传到/opt,并解压 第四步:修改harbor.c ...

  7. docker企业级镜像仓库harbor

    第一步:安装docker和docker-compose 第二步:下载harbor-offine-installer-v1.5.1.tgz 第三步:上传到/opt,并解压 第四步:修改harbor.cf ...

  8. 企业级镜像仓库harbor搭建

    企业级镜像仓库harbor搭建 一.    Harbor概述 VMware公司最近开源了企业级Registry项目Harbor,其的目标是帮助用户迅速搭建一个企业级的Docker registry 服 ...

  9. 企业级镜像仓库 harbor

    企业级镜像仓库 harbor 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 CentOS 7.0 云服务器 c. 上一篇:跨 Docker 宿主机网络 overlay 类型 h ...

随机推荐

  1. linux shell编程(二) 条件测试

    bash中常用的条件测试有三种 条件测试的表达式:[ expression ]  [[ expression]] 第一种:整数测试: -eq 测试两个整数是否相等,比如[ $A -eq $B ] -n ...

  2. java:eclipse安装tomcat插件及配置tomcat

    我们都知道myeclipse自带tomat图标,而eclipse却没有,若想eclipse实现带有tomcat图标可以下载tomcat插件 tomcat插件下载地址:http://www.eclips ...

  3. C#实现文件拖放并打开文件(使用ListBox)

    1.C#实现文件拖放并打开文件 (http://www.cnblogs.com/GaoHuhu/archive/2012/10/10/2717954.html)

  4. Linux学习过程中的简单命令

    1.su su- 与 sudo     (1) 普通用户和root转换:su 用户名或root              不知道root密码的情况下:普通 -> root:sudo su roo ...

  5. Java微信开发_Exception_02_"errcode":40164,"errmsg":"invalid ip 61.172.68.219, not in whitelist hint

    ip查询网址: http://www.ip.cn/ 一.异常现象 今天开始做微信开发,在办公室时能正常获取access_token,晚上回家之后获取access_token时却报出下列错误信息: {& ...

  6. (转)C协程实现的效率对比

    前段时间实现的C协程依赖栈传递参数,在开启优化时会导致错误,于是实现了一个ucontext的版本,但ucontext的切换效率太差了, 在我的机器上执行4000W次切换需要11秒左右,这达不到我的要求 ...

  7. log4j报错ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

    ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only err ...

  8. mfc设置鼠标状态OnSetCursor响应函数

    参考文章:1.https://bbs.csdn.net/topics/70084486 2.https://blog.csdn.net/wang15061955806/article/details/ ...

  9. Statement

    题目大意 给定一棵基环外向树,和若干组询问,对于每次独立的询问都指定一些起点和一些终点,你删去一些边,使得从任意起点出发都无法到达终点,并让删去的边的编号的最小值最大,求这个最大的最小值. 题解 不难 ...

  10. c#迭代遍历带数组的json格式数据

    [1]首先我们先创建一个带数组形式的json格式的数组 1)我们按照结构定义一个类,如下: using System;using System.Collections.Generic;using Sy ...