一.简介

Harbor是vmware公司开源的项目,可用于企业搭建自己的docker镜像管理仓库。项目地址 https://github.com/goharbor/harbor

二.环境准备

硬件最低要求:CPU*2    内存4G    硬盘40G

软件环境:docker 20.10.10-ce+     docker-compose v1.18.0+       opssl优先最新

harbor下载  https://github.com/vmware/harbor/releases

安装配置指南 https://goharbor.io/docs/latest/install-config/

自签TLS证书 https://goharbor.io/docs/2.11.0/install-config/configure-https/

三.安装

0.基础环境

[root@dockerfile ~]# docker-compose version
docker-compose version 1.28.5, build c4eb3a1f
docker-py version: 4.4.4
CPython version: 3.7.10
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019
[root@dockerfile ~]# docker version
Client:
Version:           20.10.24
[root@dockerfile ~]# hostname
dockerfile
[root@dockerfile ~]# ifconfig ens33 | grep mask | awk '{print $2}'
192.168.77.133
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

1.安装包下载

下载Harbor安装包harbor-offline-installer-v2.10.3.tgz

cd /home
wget wget https://github.com/goharbor/harbor/releases/download/v2.10.3/harbor-offline-installer-v2.10.3.tgz
tar xf harbor-offline-installer-v2.10.3.tgz
  • 1.
  • 2.
  • 3.

2.配置https访问     

自定义证书存放位置,后面所有操作都在此目录下 mkdir -p /home/harbor/ssl

2.1生成证书颁发机构证书

生成CA证书私钥

mkdir -p /home/harbor/ssl
openssl genrsa -out ca.key 4096
  • 1.
  • 2.

生成 CA 证书

openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=MyPersonal Root CA" \
 -key ca.key \
 -out ca.crt
  • 1.
  • 2.
  • 3.
  • 4.

2.2生成服务器证书,主要是生成.crt和.key的文件

 根据自己公司的情况所有yourdomain.com统一替换为alibaby007.com

生成私钥 

openssl genrsa -out alibaby007.com.key 4096
  • 1.

生成证书签名请求 (CSR)

openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=alibaby007.com" \
    -key alibaby007.com.key \
    -out alibaby007.com.csr
  • 1.
  • 2.
  • 3.
  • 4.

生成 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=yourdomain.com
#DNS.2=yourdomain
#DNS.3=hostname

DNS.1=alibaby007.com
DNS.2=alibaby007
DNS.3=dockerfile
EOF
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

使用该v3.ext文件为您的 Harbor 主机生成证书

openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in alibaby007.com.csr \
    -out alibaby007.com.crt
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

3.修改配置文件

cd /home/harbor
#配置harbor.yml
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
改第5行
5 hostname: reg.mydomain.com
为
5 hostname: alibaby007.com
改第17-18行
 17   certificate: /your/certificate/path
 18   private_key: /your/private/key/path
为
 17   certificate: /home/harbor/ssl/alibaby007.com.crt
 18   private_key: /home/harbor/ssl/alibaby007.com.key
改第37行 默认密码Harbor12345,可改可不改
 37 harbor_admin_password: Harbor12345
为
 37 harbor_admin_password: Harbor123456
 改第56行 数据在宿主机上存放的位置,可以改可不改
  56 data_volume: /data
为
   56 data_volume: /data/harbor
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.

4.安装和启动

cd /home/harbor/
#这一步是生成配置文件和生成证书文件,可以忽略,直接./install.sh
./ prepare
#安装 这一步也会生成配置文件和生成证书文件
./install.sh
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

5.测试

浏览器访问https://alibaby007.com   另外这个证书是私签的不影响,数据还是加密的,不影响。

本地电脑增加hosts解析

192.168.77.133 alibaby007.com
  • 1.

输入用户名和口令登录  admin/Harbor123456

私有镜像仓库带自签https证书harbor搭建与使用_docker

私有镜像仓库带自签https证书harbor搭建与使用_docker_02

四.使用

1.创建项目

项目---新建项目

私有镜像仓库带自签https证书harbor搭建与使用_harbor_03

2.创建用户

系统管理---用户管理---创建用户

私有镜像仓库带自签https证书harbor搭建与使用_harbor_04

3.添加人员到项目

项目---选择项目lnmp---成员---添加用户

私有镜像仓库带自签https证书harbor搭建与使用_docker_05

4.docker客户端下载推送镜像

添加hosts解析拷贝证书

#docker客户端192.168.77.130
#添加hosts解析
echo "192.168.77.133 alibaby007.com" >>/etc/hosts
#将harbor上的生成的证书拷贝这个目录下
mkdir -p /etc/docker/certs.d/alibaby007.com/
cd /etc/docker/certs.d/alibaby007.com/
scp root@192.168.77.133:/home/harbor/ssl/alibaby007.com.crt .
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

docker客户端登录harbor     输入上面创建的用户alibaby和口令

#登录到harbor
docker login alibaby007.com
#查看有哪些镜像
docker images
#推送前先打标签 其实重命名了一份
docker tag mysql:latest  alibaby007.com/lnmp/mysql:latest
#push推送到harbor
docker push alibaby007.com/lnmp/mysql:latest
#若只换了标签第二次推会很快,因为他们sha256校验是一样的
docker tag mysql:latest  alibaby007.com/lnmp/mysql:v1
docker push alibaby007.com/lnmp/mysql:v1
#拉取
docker pull  alibaby007.com/lnmp/mysql:v1
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

harbor查看已推送上来

私有镜像仓库带自签https证书harbor搭建与使用_harbor_06

私有镜像仓库带自签https证书harbor搭建与使用_docker_07

查看推送命令

项目---选择项目---推送命令

私有镜像仓库带自签https证书harbor搭建与使用_docker_08

5.排错

报错1:

Error response from daemon: Get "https://alibaby007.com/v2/": dial tcp: lookup alibaby007.com on 223.5.5.5:53: no such host

#添加hosts解析
echo "192.168.77.133 alibaby007.com" >>/etc/hosts
  • 1.
  • 2.

报错2:

docker客户端没有证书,docker login alibaby007.com登录会报错

Error response from daemon: Get "https://alibaby007.com/v2/": x509: certificate signed by unknown authority

#将harbor上的生成的证书拷贝这个目录下

mkdir -p /etc/docker/certs.d/alibaby007.com/
cd /etc/docker/certs.d/alibaby007.com/
scp root@192.168.77.133:/home/harbor/ssl/alibaby007.com.crt .
  • 1.
  • 2.
  • 3.