Docker 企业级镜像仓库 Harbor 的搭建与维护

1、什么是 Harbor

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

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

  • 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 相对于以前的版本仍是有比较多的更新的。github

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

2、Harbor 安装

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

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

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

2.一、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.二、Harbor安装

Harbor 有两种安装方法:

  • 在线安装,在线安装须要网络,安装包很是小。
  • 离线安装,离线安装,本地主机能够没有网络,安装包会比较大。

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

安装 docker-compose ,版本须要1.18.0+centos

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  仓库域名

3、Harbor 的使用

3.一、登陆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.二、注意事项

在进行登陆的过程当中咱们会遇到如下的问题,咱们也给出了解决办法。

# 登陆
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

4、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
相关文章
相关标签/搜索