Harbor是用于存储和分发Docker镜像的镜像仓库服务,Harbor在安全、标识、管理等方面比Registry都要略胜一筹
一、环境介绍:
- centos7(vmware创建的虚拟机)
- docker 18.06.0-ce
- docker-compose 1.28.4
- harbor2.5.5 离线安装包
192.168.1.15(harbor所在机器)
192.168.1.11(拉取harbor镜像的机器)
以下2、 3步都在192.168.1.15机器上操作
二、安装docker/docker-compose
在安装Harbor之前,docker和docker-compose需要提前安装好。具体的安装过程在此处忽略,详见 这个链接 yum安装升级docker和docker-compose_change the door-CSDN博客
三、安装Harbor
1、下载
Harbor部署https访问、域名访问。在这里我们采用离线安装包的方式来安装Harbor,可以避免在线安装时网络的影响。
在页面 Releases · goharbor/harbor · GitHub ,选择最新版本 并下载:harbor-offline-installer-v2.2.0.tgz
将下载好的包上传的我们的linux机器后解压:
tar -zxvf harbor-offline-installer-v2.2.0.tgz
解压完成后进入目录harbor,可以看到有如下内容:
生成yml文件:
cp harbor.yml.tmpl harbor.yml
【 重要】配置harbor.yml下的postgresql参数
volumes需要改为: /data/database:/home/postgresql/data:z,不然可能导致postgresql启动失败!
如下示例:
postgresql:
image: goharbor/harbor-db:v2.5.5
container_name: harbor-db
restart: always
cap_drop:
- ALL
cap_add:
- CHOWN
- DAC_OVERRIDE
- SETGID
- SETUID
volumes:
- /data/database:/home/postgresql/data:z
2、需要配置https的相关配置,并配置hostname。
更新服务器时间,不然生成的证书会有问题。
ntpdate time1.aliyun.com
hwclock -w
harbor_admin_password:管理员初始密码,在这里我们就使用默认的,不用修改。
如下图:
3、创建ca证书私钥
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=lch-harbor.com" \
-key ca.key \
-out ca.crt
4、创建服务的私钥
openssl genrsa -out lch-harbor.com.key 4096
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=lch-harbor.com" \
-key lch-harbor.com.key \
-out lch-harbor.com.csr
5、配置dns相关参数
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=lch-harbor.com
DNS.2=lch-harbor
DNS.3=hostname
EOF
6、配置harbor域名证书
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in lch-harbor.com.csr \
-out lch-harbor.com.crt
7、把证书配置到harbor和docker
cp lch-harbor.com.crt /data/cert/
cp lch-harbor.com.key /data/cert/
校验证书是否正常:
openssl x509 -inform PEM -in lch-harbor.com.crt -out lch-harbor.com.cert
cp lch-harbor.com.cert /etc/docker/certs.d/lch-harbor.com/
cp lch-harbor.com.key /etc/docker/certs.d/lch-harbor.com/
cp ca.crt /etc/docker/certs.d/lch-harbor.com/
8、重启docker服务
systemctl restart docker
9、安装
./prepare
在install.sh文件所在目录执行命令./install.sh即可安装Harbor,顺带安装chartmuseum以便支持chart上传:
./install.sh --with-notary --with-trivy --with-chartmuseum
如果安装失败,则可去掉--with-notary参数:
ERROR:root:Error: the protocol must be https when Harbor is deployed with Notary
上条指令执行完成后,通过docker ps 命令可以看到有9个容器启动
停掉harbor
docker-compose down -v
再启动
docker-compose up -d
4、验证和使用
Harbor的web服务使用了宿主机的80端口,主机的IP地址即可访问Harbor的web管理页面,
在这里我们的账号是admin,密码是默认的Harbor12345
有可能登录提示:核心组件异常
请查看/var/log/harbor下的postgresql等组件的日志
排查过程可以参考下面两个链接:
https://blog.csdn.net/Xin_101/article/details/127702186
https://www.jianshu.com/p/a25be68e7eb4
登录成功后会看到有一个默认的项目 library 但是下面一个镜像都没有,接下来我们推送镜像到harbor上。
以下操作在 192.168.1.11机器上执行
5、推送镜像
5.1配置
要从192.168.1.11机器上连接Harbor服务器,需要配置11这台机器上的docker镜像地址:
编辑192.168.1.11的/etc/docker/daemon.json文件,增加以下内容
{
"insecure-registries":["192.168.1.15"]
}
192.168.1.15是Harbor服务器的IP地址
5.2重启docker:
systemctl daemon-reload
systemctl restart docker
5.3推送本地镜像
执行docker images发现1.11这台机器本地有一个镜像busybox:
docker tag 8c811b4aec35 192.168.1.15/library/docker.io/busybox:1.28.4
8c811b4aec35 是镜像ID
登录harbor:
docker login 192.168.1.15 -u admin -p Harbor12345
推送镜像:
docker push 192.168.1.15/library/docker.io/busybox:1.28.4
上传完毕后,登录Harbor网页,可以看到新上传的镜像:
至此,我们的harbor部署成功,
如果在192.168.1.15、192.168.1.11以外的机器上拉取我们刚刚上传的镜像,则同样设置机器上的docker镜像地址,可以参考上面的5.1和5.2两个步骤,然后拉取:
docker pull 192.168.1.15/library/docker.io/busybox:1.28.4