使用 Harbor 搭建私有仓库

Harbor 是一个开源的容器镜像仓库,主要用于安全地存储、管理和分发 Docker 镜像。‌它支持高效的镜像托管和分发,特别适用于跨云原生计算平台(如 Kubernetes 和 Docker)的环境。Harbor 提供了高安全性和高性能的解决方案,包括权限管理、日志审核、镜像复制等功能,能够满足企业级的应用需求。‌

Harbor 官网:https://goharbor.io/

1.安装前提

  • docker-ce 20.10.10+
  • docker-compose(v1.18.0+)或 docker compose v2

2.下载安装程序

前往 Harbor releases 页面,下载在线(online)或离线(offline)安装程序。下载完成后,使用 tar 命令提取安装程序包。

$ tar xzvf harbor-online-installer-v2.6.2.tgz

3.配置 HTTPS

3.1 生成证书颁发机构证书

  • 生成CA证书私钥
$ openssl genrsa -out ca.key 4096
  • 生成 CA 证书
$ openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=hub.gtdq.com Root CA" \
 -key ca.key \
 -out ca.crt

以上命令中 -subj 参数里的 /C 表示国家,如:CN;/ST 表示省;/L 表示城市或者地区;/O 表示组织名;/CN 表示通用名称。
{: .prompt-info }

3.2 生成服务器证书

  • 生成私钥
$ openssl genrsa -out hub.gtdq.com.key 4096
  • 生成证书签名请求
$ openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=hub.gtdq.com" \
    -key hub.gtdq.com.key \
    -out hub.gtdq.com.csr
  • 生成 x509 v3 扩展文件
$ cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=hub.gtdq.com
EOF
  • 使用 v3.ext 文件为 Harbor 主机生成证书
$ openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in hub.gtdq.com.csr \
    -out hub.gtdq.com.crt

完成后将得到如下文件:

/data/harbor/ssl/
├── ca.crt
├── ca.key
├── ca.srl
├── hub.gtdq.com.crt
├── hub.gtdq.com.csr
├── hub.gtdq.com.key
└── v3.ext

完成后将 hub.gtdq.com.crt 和 hub.gtdq.com.key 文件复制到 /home/harbor/ssl 目录下。

4.安装 Harbor

进入 Harbor 安装程序目录,复制 harbor.yml.tmplharbor.yml 文件,修改以下内容:

hostname: hub.gtdq.com  
certificate: /data/harbor/ssl/hub.gtdq.com.crt
private_key: /data/harbor/ssl/hub.gtdq.com.key
harbor_admin_password: Harbor123456

修改完成后使用 install.sh 脚本安装并启动 Harbor。

$ ./prepare
$ ./install.sh

Harbor 安装完成之后可以通过 docker-compose 来管理,执行docker-compose ps 则可以查看到对应的容器状态。

如果没有 dns 需要手动配置 hosts。

$ echo '192.168.33.181 hub.gtdq.com' >> /etc/hosts

5.向 Docker 提供证书

由于自行签发的 CA 根证书不被系统信任,会出现如下错误:

$ docker login hub.gtdq.com
Username: admin
Password:
Error response from daemon: Get "https://hub.gtdq.com/v2/": context deadline exceeded

转换 hub.gtdq.com.crt 为 hub.gtdq.com.cert,供 Docker 使用

$ openssl x509 -inform PEM -in hub.gtdq.com.crt -out hub.gtdq.com.cert

再将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中。

$ mkdir -p /etc/docker/certs.d/hub.gtdq.com
$ cp hub.gtdq.com.cert /etc/docker/certs.d/hub.gtdq.com
$ cp hub.gtdq.com.key /etc/docker/certs.d/hub.gtdq.com
$ cp ca.crt /etc/docker/certs.d/hub.gtdq.com

最后停止 Harbor 再重新启动 Docker。

$ docker-compose down
$ systemctl restart docker
$ docker-compose up -d

再次验证:

$ docker login hub.gtdq.com
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

6.通过 HTTP 连接到 Harbor

如果安装 Harbor 时使用 HTTP 而不是 HTTPS,则必须将 --insecure-registry 选项添加到 Docker 的 /etc/docker/daemon.json 文件中。

{
"insecure-registries" : ["harbor.gt.com:5000", "0.0.0.0"]
}

更新 daemon.json 后,重新启动 Docker。

$ systemctl daemon-reload
$ systemctl restart docker
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值