Harbor

HarborVMware 公司开源了企业级 Registry 项目, 其的目标是帮助用户迅速搭建一个企业级的 Docker registry 服务。

由于 Harbor 是基于 Docker Registry V2 版本,所以 docker 版本必须 >=1.10.0 docker-compose >=1.6.0

Github: goharbor/harbor,官方预览示例

对硬件需求

CPU => 最小 2CPU/4CPU(首选)
Mem => 最小 4GB/8GB(首选)
Disk => 最小 40GB/160G(首选)

下载安装包

CentOS中通过 docker-compose 安装部署。

# 下载最新版 `Docker Compose`
sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 对二进制文件应用可执行权限:
sudo chmod +x /usr/local/bin/docker-compose
# 测试是否安装成功
docker-compose --version
# docker-compose version 1.22.0, build f46880fe

可以从发布页面下载安装程序的二进制文件,选择在线或离线安装程序,使用tar命令解压缩包,天朝人民下面这种方式安装可能要翻墙,推荐这种方式,因为上面也不见得能下载下来。

# 下载离线安装包
wget https://storage.googleapis.com/harbor-releases/release-1.6.0/harbor-offline-installer-v1.6.0.tgz
# 解压缩包
tar xvf harbor-offline-installer-v1.6.0.tgz

修改配置

进去 vim harbor/harbor.cfg 修改文件相关配置。

# hostname 设置访问地址,支持IP,域名,主机名,禁止设置127.0.0.1
hostname = reg.mydomain.com
# 访问协议,可设置 http,https
ui_url_protocol = http

# 邮件通知, 配置邮件通知。
email_identity =
email_server = smtp.mydomain.com
email_server_port = 25
email_username = sample_admin@mydomain.com
email_password = abc
email_from = admin <sample_admin@mydomain.com>
email_ssl = false
email_insecure = false

# harbor WEB UI登陆使用的密码
harbor_admin_password = Harbor12345

# 认证方式,这里支持多种认证方式,默认是 db_auth ,既mysql数据库存储认证。
# 这里还支持 ldap 以及 本地文件存储方式。
auth_mode = db_auth
# ldap 服务器访问地址。
ldap_url = ldaps://ldap.mydomain.com
ldap_basedn = uid=%s,ou=people,dc=mydomain,dc=com

# mysql root 账户的 密码
db_password = root123
self_registration = on
use_compressed_js = on
max_job_workers = 3 
verify_remote_cert = on
customize_crt = on

运行安装脚本

配置设置完成运行安装脚本,⚠️ 注意如果你事先部署了 nginx 需要停掉,避免端口冲突

sudo ./install.sh

要更改 Harbour 的配置,请先停止现有的 Harbor 实例并更新 harbour.cfg。 然后运行 prepare 脚本来填充配置,最后重新创建并启动Harbor的实例:

$ docker-compose down -v
# 注:其实上面是停止 docker-compose.yml 中定义的所有容器
$ vim harbor.cfg
$ prepare
$ docker-compose up -d

通过 http://192.168.188.222 就可以访问 Harbour 服务了

配置修改

因为 harbor 默认端口为 80,而大多数时候是不希望使用 80 端口的,修改端口方法如下

# vim docker-compose.yml

proxy:
  image: vmware/nginx-photon:v1.5.1
  container_name: nginx
  restart: always
  volumes:
    - ./common/config/nginx:/etc/nginx:z
  networks:
    - harbor
  ports:
    - 8070:80
    - 443:443

修改 common/templates/registry/config.yml 文件

# vim common/templates/registry/config.yml
auth:
  token:
    issuer: harbor-token-issuer
    realm: $public_url:8070/service/token
    rootcertbundle: /etc/registry/root.crt
service: harbor-registry

使用 harbor

# 镜像推送
docker login 192.168.188.222:8070
# 查看 cat ~/.docker/config.json
# 镜像打包时候需要按一定规则 tag
docker pull nginx
docker tag nginx 192.168.188.222:8070/library/nginx:latest
docker push 192.168.188.222:8070/library/nginx
docker rmi -f 192.168.188.222:8070/library/nginx:latest

若推送镜像报以下错误:

Error response from daemon: Get https://192.168.188.222:8070/v1/users/: http: server gave HTTP response to HTTPS client

原因为,docker 默认使用的是 https 协议,而搭建的 Harborhttp 提供服务的,所以要配置可信任。PS:如果 Harborhttps 的就不会报该错误。

方法1

# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry=192.168.188.222:8070
# 修改完毕后按安装步骤走一遍即可。

方法2

# vim /etc/docker/daemon.json

{
 "registry-mirrors": ["http://xxx.m.daocloud.io"],
 "insecure-registries":["192.168.100.127:8070"]
}
{
  "insecure-registries" : [
    "docker.google.com"
  ],
  "debug" : true,
  "experimental" : true
}

客户机docker启动时候带上 --insecure-registry=docker.xxx.com 强制 docker loginhttp80 端口,就可以正常 push