Harbor镜像堆栈(v2.10.3)附相干自界说设置
目录一. 环境准备
二. 部署安装
三. 修改网段的方法
四. 设置开机与伴随docker启动
五. 基础使用
1. 创建一个用户
2. docker登任命户
3. 创建项目
4. 推送镜像
六. 自制证书设置HTTPS
一. 环境准备
Harbor 是一个开源的企业级 Docker 镜像堆栈,提供了很多功能,包罗用户管理、访问控制、镜像复制和安全扫描。
官方文档部署手册:Harbor docs | Harbor Installation Prerequisites
下载地址:Releases · goharbor/harbor (github.com)
官方给出的最低设置和保举设置如下图:
https://i-blog.csdnimg.cn/direct/37d1914e034e4b09b5e921e9e42f92f4.png
本文使用假造机设置:
主机名IP体系软件版本设置信息harbor192.168.226.28Rocky_linux9.4 Docker version 27.1.1
Docker Compose version v2.29.1
2核4G,磁盘48G Harbor:v2.10.3
可以从官方发布页面下载 Harbor 安装程序。下载在线安装程序或离线安装程序。
在线安装程序:在线安装程序从 Docker 中心下载 Harbor 镜像。因此,安装程序的尺寸非常小。
离线安装程序:如果要部署 Harbor 的主机没有连接到 Internet,请使用离线安装程序。离线安装程序包含预先构建的映像,因此它比在线安装程序大
在线和离线安装程序的安装过程几乎相同。
这里我主要使用离线安装,因为在线安装因为墙、内部网络等原因,很多时候会下载很慢,而离线安装包都包含了预先构建的镜像,所以直接现在离线安装包最好! https://i-blog.csdnimg.cn/direct/b0c30cc287994dcdae2e0278c423676c.pnghttps://i-blog.csdnimg.cn/direct/da55cf36d3ee40fab672982bdce52c2f.png
二. 部署安装
上传至假造机,这里我已经上传好了。
# ll
total 637052
-rw-------. 1 root root 815 Jun6 14:00 anaconda-ks.cfg
-rw-r--r--1 root root 652334970 Aug1 00:15 harbor-offline-installer-v2.10.3.tgz 解压
# tar -xf harbor-offline-installer-v2.10.3.tgz
# ll
total 637052
-rw-------. 1 root root 815 Jun6 14:00 anaconda-ks.cfg
drwxr-xr-x2 root root 123 Aug1 00:45 harbor
-rw-r--r--1 root root 652334970 Aug1 00:15 harbor-offline-installer-v2.10.3.tgz
# ll harbor
total 641820
-rw-r--r-- 1 root root 11347 Jul2 15:42 LICENSE
-rw-r--r-- 1 root root 3643 Jul2 15:42 common.sh
-rw-r--r-- 1 root root 657181693 Jul2 15:42 harbor.v2.10.3.tar.gz
-rw-r--r-- 1 root root 13972 Jul2 15:42 harbor.yml.tmpl
-rwxr-xr-x 1 root root 1975 Jul2 15:42 install.sh
-rwxr-xr-x 1 root root 1882 Jul2 15:42 prepare 这是离线安装包,其中在解压后的harbor目录中harbor.v2.10.3.tar.gz是打包好的所需镜像压缩包
最重要的是 harbor.yml.tmpl和 install.sh ,他们分别是设置文件和安装执行文件。
以.tmpl末端的文件多为模板文件,将harbor.yml.tmpl拷贝一份并命名为harbor.yml去掉.tmpl
# cd harbor
# cp harbor.yml.tmpl harbor.yml
# ll
total 641836
-rw-r--r-- 1 root root 11347 Jul2 15:42 LICENSE
-rw-r--r-- 1 root root 3643 Jul2 15:42 common.sh
-rw-r--r-- 1 root root 657181693 Jul2 15:42 harbor.v2.10.3.tar.gz
-rw-r--r-- 1 root root 13972 Aug1 00:58 harbor.yml
-rw-r--r-- 1 root root 13972 Jul2 15:42 harbor.yml.tmpl
-rwxr-xr-x 1 root root 1975 Jul2 15:42 install.sh
-rwxr-xr-x 1 root root 1882 Jul2 15:42 prepare https://i-blog.csdnimg.cn/direct/426b5948f70946bdb7e2243bc38ac5f9.png
简化后的 harbor.yml 文件模板:
hostname: reg.mydomain.com
http:
port: 80
https:
port: 443
certificate: /your/certificate/path
private_key: /your/private/key/path
harbor_admin_password: Harbor12345
database:
password: root123
max_idle_conns: 100
max_open_conns: 900
conn_max_lifetime: 5m
conn_max_idle_time: 0
data_volume: /data
trivy:
ignore_unfixed: false
skip_update: false
skip_java_db_update: false
offline_scan: false
security_check: vuln
insecure: false
jobservice:
max_job_workers: 10
job_loggers:
- STD_OUTPUT
- FILE
logger_sweeper_duration: 1 #days
notification:
webhook_job_max_retry: 3
webhook_job_http_client_timeout: 3 #seconds
log:
level: info
local:
rotate_count: 50
rotate_size: 200M
location: /var/log/harbor
_version: 2.10.0
proxy:
http_proxy:
https_proxy:
no_proxy:
components:
- core
- jobservice
- trivy
upload_purging:
enabled: true
age: 168h
interval: 24h
dryrun: false
cache:
enabled: false
expire_hours: 24
如今我根据需要对该文件进行设定修改,hostname参数直接使用IP;这里因为https用不到,为避免学习麻烦先注释,有需要再加,修改见图:
https://i-blog.csdnimg.cn/direct/4f4f3a3fef8047349a822dc423c40a6a.png
然后继续用命令执行安装
# ./install.sh https://i-blog.csdnimg.cn/direct/e92cea9de01d483c8d83e50dc9d8e540.png
看到图中箭头所指的successfully就部署乐成了。
浏览器访问IP即可,比方我这里就访问http://192.168.226.28/
如果设置文件中自己没有修改,默认用户名:admin 默认密码:Harbor12345 https://i-blog.csdnimg.cn/direct/7bf96403154c47199877008c1a8e1365.pnghttps://i-blog.csdnimg.cn/direct/f222dffe38a547868e79a4fd06259e36.png
三. 修改网段的方法
在使用中,如果需要自界说网段,可进行如下步骤。
在运行安装步骤时,会自动的新文件表明
[*] docker-compose.yml:
[*]作用: 这个文件是 docker-compose 的设置文件,界说了 Harbor 各个服务的 Docker 容器设置。它包罗了各个容器的镜像、环境变量、卷、网络设置等信息。
[*]内容: 包罗了 Harbor 核心服务、数据库、Redis、Nginx 等服务的设置,用于启动和管理整个 Harbor 应用。
[*] common 目录:
[*]作用: 这个目录包罗一些公共的设置和脚本,供 Harbor 在启动和运行过程中使用。
[*]内容: 可能包罗一些如证书、设置模板、脚本等文件,这些文件是 Harbor 运行所必需的。
其中docker-compose.yml它是一个关键的设置文件,它用于界说构成 Harbor 平台的服务及其容器设置。
# ll
total 641832
-rw-r--r-- 1 root root 11347 Jul2 15:42 LICENSE
drwxr-xr-x 3 root root 20 Aug1 03:02 common
-rw-r--r-- 1 root root 3643 Jul2 15:42 common.sh
-rw-r--r-- 1 root root 5843 Aug1 03:02 docker-compose.yml
-rw-r--r-- 1 root root 657181693 Jul2 15:42 harbor.v2.10.3.tar.gz
-rw-r--r-- 1 root root 1003 Aug1 03:01 harbor.yml
-rw-r--r-- 1 root root 13972 Jul2 15:42 harbor.yml.tmpl
-rwxr-xr-x 1 root root 1975 Jul2 15:42 install.sh
-rwxr-xr-x 1 root root 1882 Jul2 15:42 prepare
关闭harbor
# docker compose down 注:如果没有删除的话 需要使用 docker network rm harbor_harbor 的方式删除
然后查看下网络确保已经删除harbor
# docker network ls
NETWORK ID NAME DRIVER SCOPE
6cb7a2d44eb7 bridge bridge local
5ef4b87494b0 host host local
1855e2156e9b none null local
创建网络,并根据需要自界说网段
# docker network create --driver=bridge --subnet=10.110.0.0/16 harbor 查抄
# docker network ls && docker network inspect harbor
NETWORK ID NAME DRIVER SCOPE
6cb7a2d44eb7 bridge bridge local
d009323768e3 harbor bridge local
5ef4b87494b0 host host local
1855e2156e9b none null local
[
{
"Name": "harbor",
"Id": "d009323768e31e0565d46324d629e408793f1577f919588819eadf09f2ab3629",
"Created": "2024-08-01T02:39:55.477662508+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "10.110.0.0/16"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
接下来修改 /root/harbor/docker-compose.yml 这个设置文件
# vim docker-compose.yml
#将最后面的 是否使用外部网络设置为true
networks:
harbor:
external: true
重新运行docker-compose.yml文件
# docker compose up -d --force-recreate
#该命令若不在docker-compose.yml需指定位置docker compose -f /root/harbor/docker-compose.yml up -d --force-recreate
重新验证查看
# docker network ls && docker network inspect harbor https://i-blog.csdnimg.cn/direct/be9a81272bce4da18b1a638a50b85cfd.png
四. 设置开机与伴随docker启动
Docker compose 不会伴随docker的启动而启动,需要进行一下设置
执行下述代码即可,如果你的docker-compose.yml目录位置和我不一样,你需要对下面这段代码路径进行自主修改。
cat >/usr/lib/systemd/system/harbor.service <<EOF
Description=Harbor service with docker-compose
Requires=docker.service
After=docker.service
Restart=always
RemainAfterExit=yes
StandardError=null
StandardOutput=null
WorkingDirectory=/root/harbor
ExecStartPre=/usr/bin/docker compose -f /root/harbor/docker-compose.yml down
ExecStart=/usr/bin/docker compose -f /root/harbor/docker-compose.yml up -d
ExecStop=/usr/bin/docker compose -f /root/harbor/docker-compose.yml down
WantedBy=multi-user.target
EOF
重新加载 systemd 的设置并设置自启动。
systemctl daemon-reload && systemctl enable harbor.service
如今可以重启docker测试harbor会不会正常运行了。
# systemctl restart docker 需等候一会验证,下面这样就是ok了。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
976d1adf7aba goharbor/nginx-photon:v2.10.3 "nginx -g 'daemon of…" About an hour ago Up 25 seconds (health: starting) 0.0.0.0:80->8080/tcp, :::80->8080/tcp nginx
666d1cbe5ec3 goharbor/harbor-jobservice:v2.10.3 "/harbor/entrypoint.…" About an hour ago Up 22 seconds (health: starting) harbor-jobservice
41b46a091552 goharbor/harbor-core:v2.10.3 "/harbor/entrypoint.…" About an hour ago Up 25 seconds (health: starting) harbor-core
04a9798038d4 goharbor/registry-photon:v2.10.3 "/home/harbor/entryp…" About an hour ago Up 25 seconds (health: starting) registry
fc68ec53a081 goharbor/harbor-registryctl:v2.10.3 "/home/harbor/start.…" About an hour ago Up 24 seconds (health: starting) registryctl
6b7cfd18ee75 goharbor/harbor-db:v2.10.3 "/docker-entrypoint.…" About an hour ago Up 24 seconds (health: starting) harbor-db
dbde85a2eacc goharbor/redis-photon:v2.10.3 "redis-server /etc/r…" About an hour ago Up 25 seconds (health: starting) redis
0856838ace4d goharbor/harbor-portal:v2.10.3 "nginx -g 'daemon of…" About an hour ago Up 25 seconds (health: starting) harbor-portal
8bbb45f72629 goharbor/harbor-log:v2.10.3 "/bin/sh -c /usr/loc…" About an hour ago Up 25 seconds (health: starting) 127.0.0.1:1514->10514/tcp harbor-log
五. 基础使用
1. 创建一个用户
https://i-blog.csdnimg.cn/direct/57b6696a6203431b926a2d709c41ead9.png
2. docker登任命户
直接在docker登岸是须要用443端口的https,那么如果我们想用80端口的http,需要额外设置
# vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://pilvpemn.mirror.aliyuncs.com",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"insecure-registries": ["192.168.226.28"]
}
重启docker
# 前面配置systemd 的管理harbor,配置了对docker启动而启动,因此重启docker,harbor也会重启。
# systemctl restart docker 登录
# docker login 192.168.226.28 https://i-blog.csdnimg.cn/direct/c84ae30745b9459890d336b4f2868cee.png
查看登录信息
# cat .docker/config.json 3. 创建项目
https://i-blog.csdnimg.cn/direct/bf5f897e4bb649069a249e39a2ab5f74.png
给这个项目添加使用用户
https://i-blog.csdnimg.cn/direct/26a2d9f3827b450a8618e9bda054e1a1.png
4. 推送镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
goharbor/harbor-exporter v2.10.3 7aa694114453 4 weeks ago 107MB
goharbor/redis-photon v2.10.3 359683ebd59c 4 weeks ago 165MB
goharbor/trivy-adapter-photon v2.10.3 6d51017555d9 4 weeks ago 516MB
goharbor/harbor-registryctl v2.10.3 96efb27ac641 4 weeks ago 152MB
goharbor/registry-photon v2.10.3 f73ad548d874 4 weeks ago 84.7MB
goharbor/nginx-photon v2.10.3 0ae16f53f286 4 weeks ago 154MB
goharbor/harbor-log v2.10.3 9ee81cca16ce 4 weeks ago 163MB
goharbor/harbor-jobservice v2.10.3 053df0842d37 4 weeks ago 143MB
goharbor/harbor-core v2.10.3 ed909856be82 4 weeks ago 171MB
goharbor/harbor-portal v2.10.3 c8c29cea2ef3 4 weeks ago 162MB
goharbor/harbor-db v2.10.3 c623b46fd89d 4 weeks ago 269MB
goharbor/prepare v2.10.3 292e199c8873 4 weeks ago 210MB
# docker tag goharbor/harbor-db:v2.10.3 192.168.226.28/namespace/ceshi:1.0
# docker push 192.168.226.28/namespace/ceshi:1.0
https://i-blog.csdnimg.cn/direct/f6e3ca7999f44f5bbb9a5e1b656f1afd.png
六. 自制证书设置HTTPS
删除上面在docker设置的 "insecure-registries": ["http://192.168.226.28"]
# vim /etc/docker/daemon.json
#删除这行"insecure-registries": ["http://192.168.226.28"]
删除后见下图样式
https://i-blog.csdnimg.cn/direct/4533ab0e3d4940659533a47350b0643d.png
创建脚本文件
# cd harbor
# vim generate_cert.sh
#!/bin/bash
# **********************************************************
# * 文件名 : generate_cert.sh
# * 作者 : zzdict
# * 邮箱 : zzdict@gmail.com / elk_deer@foxmail.com
# * 创建时间 : 2024-08-23 01:14
# * 描述 : 制作证书脚本
# **********************************************************
# 使用该脚本生成自签名证书
# 使用方法: ./generate_cert.sh <域名> <证书有效天数> <输出目录>
# 示例: ./generate_cert.sh example.com 365 ./certs
# 检查是否提供了所有参数
if [ "$#" -ne 3 ]; then
echo "用法: $0 <域名> <证书有效天数> <输出目录>"
exit 1
fi
# 获取命令行参数
DOMAIN=$1
DAYS_VALID=$2
OUTPUT_DIR=$3
# 创建输出目录(如果不存在)
mkdir -p $OUTPUT_DIR
# 定义文件名
PRIVATE_KEY_FILE="$OUTPUT_DIR/$DOMAIN.key"
CERTIFICATE_FILE="$OUTPUT_DIR/$DOMAIN.crt"
CSR_FILE="$OUTPUT_DIR/$DOMAIN.csr"
CONFIG_FILE="$OUTPUT_DIR/openssl.cnf"
# 生成私钥
echo "生成私钥..."
openssl genrsa -out $PRIVATE_KEY_FILE 2048
# 生成 OpenSSL 配置文件,包含 SAN
echo "生成 OpenSSL 配置文件..."
cat > $CONFIG_FILE <<EOF
[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_ca
[ req_distinguished_name ]
countryName = 国家代码 (2 个字母)
stateOrProvinceName = 省份名称 (完整拼写)
localityName = 城市名称 (如,城市)
organizationName = 组织名称 (如,公司)
organizationalUnitName = 组织单位名称 (如,部门)
commonName = 通用名称 (如,完全限定域名)
emailAddress = 邮件地址
countryName_default = CN
stateOrProvinceName_default = State
localityName_default = City
organizationName_default = Organization
organizationalUnitName_default = OrgUnit
commonName_default = $DOMAIN
emailAddress_default = email@example.com
[ req_ext ]
subjectAltName = @alt_names
[ v3_ca ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = $DOMAIN
EOF
# 生成证书签名请求(CSR)
echo "生成证书签名请求..."
openssl req -new -key $PRIVATE_KEY_FILE -out $CSR_FILE -config $CONFIG_FILE -subj "/C=CN/ST=State/L=City/O=Organization/OU=OrgUnit/CN=$DOMAIN/emailAddress=email@example.com"
# 生成自签名证书
echo "生成自签名证书..."
openssl x509 -req -days $DAYS_VALID -in $CSR_FILE -signkey $PRIVATE_KEY_FILE -out $CERTIFICATE_FILE -extensions v3_ca -extfile $CONFIG_FILE
# 输出结果
echo "证书生成完毕:"
echo "私钥: $PRIVATE_KEY_FILE"
echo "证书: $CERTIFICATE_FILE"
echo "证书签名请求: $CSR_FILE"
# 删除临时的 OpenSSL 配置文件
rm -f $CONFIG_FILE
执行脚本
# sh generate_cert.sh mataki4.org 365 ./certs 此命令将在 ./certs 目录中生成以下文件:
[*]mataki4.org.key:私钥
[*]mataki4.org.crt:自签名证书
[*]mataki4.org.csr:证书签名哀求
编辑Harbor设置https
# vim harbor.yml
https:
port: 443
certificate: /root/harbor/certs/mataki4.org.crt
private_key: /root/harbor/certs/mataki4.org.key https://i-blog.csdnimg.cn/direct/625c8bf41f40440e8d266ea0b16f1100.png
初始化设置
# ./prepare 设置本地域名解析
# vim /etc/hosts
# 加入下述配置ip 域名
192.168.226.28 mataki4.org
重启docker,因为前面设置了harbor启动方式,重启docker,harbor也会重启。
# systemctl daemon-reload
# systemctl restart docker windows设置域名解析,在C:\Windows\System32\drivers\etc\hosts
需要使用记事本的管理员模式打开编辑或者Notepad++编辑也可
https://i-blog.csdnimg.cn/direct/116c17903b204f188d54a73a715aa0c5.png
使用域名访问mataki4.org
见图可以看到,新访问的链接上有了https协议
https://i-blog.csdnimg.cn/direct/fd9dcd671aa847b9ad292fc3fb34b672.pnghttps://i-blog.csdnimg.cn/direct/bc8d1267a9de4f93bc12d84857736425.png
https://i-blog.csdnimg.cn/direct/2c921a525fb54a76b3bd2390858e9e48.pnghttps://i-blog.csdnimg.cn/direct/85e5dfd076f74e929ea18db5c3bdd068.png
由于是自制的证书,会有这种不安全提示,如果不喜欢可进行下述设置办理。
# cd certs/
# ll
total 12
-rw-r--r-- 1 root root997 Aug3 01:12 mataki4.org.crt
-rw-r--r-- 1 root root895 Aug3 01:12 mataki4.org.csr
-rw------- 1 root root 1704 Aug3 01:12 mataki4.org.key
需要将mataki4.org.crt自签名证书文件导入到浏览器中,先从服务器下载到桌面,然后打开浏览器设置证书导入。
https://i-blog.csdnimg.cn/direct/b2f1d7e8728148ed85aa064c01bb92d0.pnghttps://i-blog.csdnimg.cn/direct/351fc5e1f9824b20811fc77b73789450.pnghttps://i-blog.csdnimg.cn/direct/7d759c6ff91f4290b5422875231a541a.pnghttps://i-blog.csdnimg.cn/direct/3f2141fff0e84146aeeac77826af770c.pnghttps://i-blog.csdnimg.cn/direct/130f1ff1312f4ed6ae33d61c0ec96979.pnghttps://i-blog.csdnimg.cn/direct/a475990244e54f9f95be4b7ce934b209.pnghttps://i-blog.csdnimg.cn/direct/8be9c397a4204c7aa237944455e03f0a.pnghttps://i-blog.csdnimg.cn/direct/75b0f5d80e3546eba9dcb7339caebb83.png
到这就乐成了。
重新刷新网页查看
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]