一.简介
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.安装包下载
下载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
2.配置https访问
自定义证书存放位置,后面所有操作都在此目录下 mkdir -p /home/harbor/ssl
2.1生成证书颁发机构证书
生成CA证书私钥
mkdir -p /home/harbor/ssl
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=MyPersonal Root CA" \
-key ca.key \
-out ca.crt
2.2生成服务器证书,主要是生成.crt和.key的文件
根据自己公司的情况所有yourdomain.com统一替换为alibaby007.com
生成私钥
openssl genrsa -out alibaby007.com.key 4096
生成证书签名请求 (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
生成 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
使用该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
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
4.安装和启动
cd /home/harbor/
#这一步是生成配置文件和生成证书文件,可以忽略,直接./install.sh
./ prepare
#安装 这一步也会生成配置文件和生成证书文件
./install.sh
5.测试
浏览器访问https://alibaby007.com 另外这个证书是私签的不影响,数据还是加密的,不影响。
本地电脑增加hosts解析
192.168.77.133 alibaby007.com
输入用户名和口令登录 admin/Harbor123456
四.使用
1.创建项目
项目---新建项目
2.创建用户
系统管理---用户管理---创建用户
3.添加人员到项目
项目---选择项目lnmp---成员---添加用户
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 .
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
harbor查看已推送上来
查看推送命令
项目---选择项目---推送命令
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
报错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 .