一、参考
二、环境
参考以下三篇安装docker和docker-compose
docker版本:20.10.*
docker-compose版本:2.2.2
Harbor版本:2.4.1
系统:Centos7.9
三、配置Harbor
下载离线包harbor-offline-installer-v2.4.1.tgz并上传至服务器/opt目录
# 进入opt目录
cd /opt
# 解压harbor离线包
tar -zxvf harbor-offline-installer-v2.4.1.tgz
# 进入harbor目录
cd harbor
# 复制配置示例至harbor.yml
cp harbor.yml.tmpl harbor.yml
# 编辑配置文件
vi harbor.yml
harbor.yml 主要修改项目
# 主机名(IP或者域名)
hostname: 10.10.10.220
# HTTP配置
http:
# HTTP端口
port: 80
# 注释HTTPS端口和证书
#https:
#port: 443
#certificate: /your/certificate/path
#private_key: /your/private/key/path
# Web管理端密码
harbor_admin_password: Admin123
# 数据库配置
database:
# 数据库root密码
password: root@mysql
# 数据卷位置
data_volume: /opt/data
# 执行安装
./install.sh
# 配置防火墙放行 harbor.yml 配置的端口
firewall-cmd --permanent --zone=public --add-port=80/tcp
# 重载防火墙
四、创建项目
-
浏览器访问harbor.yml配置的端口和协议并使用harbor.yml配置的密码登录
-
项目 - 新建项目
-
配置项目名 和 容量
五、配置docker
# 编辑docker配置文件
vi /etc/docker/daemon.json
增加以下配置项(数组内第一个成员为harbor配置的主机名)
{
......
"insecure-registries" : ["10.10.10.220", "0.0.0.0"]
......
}
# 重载配置
systemctl redaemon
# 重启docker
systemctl restart docker
六、测试
# 登录
docker login 10.10.10.220
#Login Succeeded
# 拉取测试镜像
docker pull hello-world
# 打Tag
docker tag docker.io/library/hello-world:latest 10.10.10.220/myproject/hello-world:latest
# 推送至仓库
docker push 10.10.10.220/myproject/hello-world:latest
在Web页查看刚推送的镜像
# 删除镜像
docker rmi 10.10.10.220/myproject/hello-world:latest
docker rmi hello-world:latest
# 查看镜像列表
docker images
# 拉取私有仓库镜像
docker pull 10.10.10.220/myproject/hello-world
# 运行
docker run 10.10.10.220/myproject/hello-world
七、配置HTTPS
7.1 配置证书
使用OpenSSL创建CA
并使用CA对服务器证书和客户端证书进行签名
mkdir -p /opt/harbor/certs
cd /opt/harbor/certs
# 生成CA证书私钥
openssl genrsa -out ca.key 4096
# 生成CA证书
# C=国家 ST=省份 L=城市 O=组织 OU=组织单位 CN=域名或IP(重要)
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=HeNan/L=LuoYang/O=lyyc/OU=lyyc/CN=10.10.10.220" \
-key ca.key \
-out ca.crt
# 生成服务器证书私钥
openssl genrsa -out 10.10.10.220.key 4096
# 生成服务器证书请求
# C=国家 ST=省份 L=城市 O=组织 OU=组织单位 CN=域名或IP(重要)
openssl req -sha512 -new \
-subj "/C=CN/ST=HeNan/L=LuoYang/O=lyyc/OU=lyyc/CN=10.10.10.220" \
-key 10.10.10.220.key \
-out 10.10.10.220.csr
# 生成x509v3扩展文件
# alt_names节配置IP或域名
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
IP.1=10.10.10.220
DNS.2=harbor.local
EOF
# 使用CA、服务器证书请求文件、x509v3扩展文件生成服务器证书
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in 10.10.10.220.csr \
-out 10.10.10.220.crt
# 转换为Docker使用的cert证书
openssl x509 -inform PEM -in 10.10.10.220.crt -out 10.10.10.220.cert
7.2 配置harbor
# 修改harbor配置文件
vi /opt/harbor/harbor.yml
/opt/harbor/harbor.yml配置文件
# 取消HTTPS注释
https:
# 取消端口注释
port: 443
# 证书和Key路径
certificate: /opt/harbor/certs/10.10.10.220.crt
private_key: /opt/harbor/certs/10.10.10.220.key
cd /opt/harbor
# 执行脚本启用HTTPS
./prepare
# 停止并删除现有实例(不会丢失数据)
docker-compose down -v
# 启动
docker-compose up -d
7.3 测试https访问
7.3.1 消除https不安全告警
- 复制ca.crt证书至客户端电脑
- 双击安装证书至“受信任的根证书颁发机构”
- 再次测试
7.4 测试docker访问
# 创建docker证书目录 如果不是默认端口使用 IP:端口 或 域名:端口
mkdir -p /etc/docker/certs.d/10.10.10.220
# 复制CA证书至docker证书目录
cp /opt/harbor/certs/ca.crt /etc/docker/certs.d/10.10.10.220/
# 复制服务器证书至docker证书目录
cp /opt/harbor/certs/10.10.10.220.cert /etc/docker/certs.d/10.10.10.220/
# 复制服务器密钥至docker证书目录
cp /opt/harbor/certs/10.10.10.220.key /etc/docker/certs.d/10.10.10.220/
# 如果之前配置了insecure-registries则删除此配置
vi /etc/docker/daemon.json
# 重启docker
systemctl restart docker
# 登录
docker login 10.10.10.220
登录成功