目录
一. 环境准备
二. 部署安装
三. 修改网段的方法
四. 设置开机与伴随docker启动
五. 基础使用
1. 创建一个用户
2. docker登任命户
3. 创建项目
4. 推送镜像
六. 自制证书设置HTTPS
一. 环境准备
Harbor 是一个开源的企业级 Docker 镜像堆栈,提供了很多功能,包罗用户管理、访问控制、镜像复制和安全扫描。
官方文档部署手册:Harbor docs | Harbor Installation Prerequisites
下载地址:Releases · goharbor/harbor (github.com)
官方给出的最低设置和保举设置如下图:
本文使用假造机设置:
主机名 | IP | 体系 | 软件版本 | 设置信息 | harbor | 192.168.226.28 | Rocky_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,请使用离线安装程序。离线安装程序包含预先构建的映像,因此它比在线安装程序大
- 在线和离线安装程序的安装过程几乎相同。
- 这里我主要使用离线安装,因为在线安装因为墙、内部网络等原因,很多时候会下载很慢,而离线安装包都包含了预先构建的镜像,所以直接现在离线安装包最好!
复制代码
二. 部署安装
上传至假造机,这里我已经上传好了。
- [root@harbor ~]# ll
- total 637052
- -rw-------. 1 root root 815 Jun 6 14:00 anaconda-ks.cfg
- -rw-r--r-- 1 root root 652334970 Aug 1 00:15 harbor-offline-installer-v2.10.3.tgz
复制代码 解压
- [root@harbor ~]# tar -xf harbor-offline-installer-v2.10.3.tgz
- [root@harbor ~]# ll
- total 637052
- -rw-------. 1 root root 815 Jun 6 14:00 anaconda-ks.cfg
- drwxr-xr-x 2 root root 123 Aug 1 00:45 harbor
- -rw-r--r-- 1 root root 652334970 Aug 1 00:15 harbor-offline-installer-v2.10.3.tgz
- [root@harbor ~]# ll harbor
- total 641820
- -rw-r--r-- 1 root root 11347 Jul 2 15:42 LICENSE
- -rw-r--r-- 1 root root 3643 Jul 2 15:42 common.sh
- -rw-r--r-- 1 root root 657181693 Jul 2 15:42 harbor.v2.10.3.tar.gz
- -rw-r--r-- 1 root root 13972 Jul 2 15:42 harbor.yml.tmpl
- -rwxr-xr-x 1 root root 1975 Jul 2 15:42 install.sh
- -rwxr-xr-x 1 root root 1882 Jul 2 15:42 prepare
复制代码 这是离线安装包,其中在解压后的harbor目录中harbor.v2.10.3.tar.gz是打包好的所需镜像压缩包
最重要的是 harbor.yml.tmpl和 install.sh ,他们分别是设置文件和安装执行文件。
以.tmpl末端的文件多为模板文件,将harbor.yml.tmpl拷贝一份并命名为harbor.yml去掉.tmpl
- [root@harbor ~]# cd harbor
- [root@harbor harbor]# cp harbor.yml.tmpl harbor.yml
- [root@harbor harbor]# ll
- total 641836
- -rw-r--r-- 1 root root 11347 Jul 2 15:42 LICENSE
- -rw-r--r-- 1 root root 3643 Jul 2 15:42 common.sh
- -rw-r--r-- 1 root root 657181693 Jul 2 15:42 harbor.v2.10.3.tar.gz
- -rw-r--r-- 1 root root 13972 Aug 1 00:58 harbor.yml
- -rw-r--r-- 1 root root 13972 Jul 2 15:42 harbor.yml.tmpl
- -rwxr-xr-x 1 root root 1975 Jul 2 15:42 install.sh
- -rwxr-xr-x 1 root root 1882 Jul 2 15:42 prepare
复制代码
简化后的 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用不到,为避免学习麻烦先注释,有需要再加,修改见图:
然后继续用命令执行安装
- [root@harbor harbor]# ./install.sh
复制代码
看到图中箭头所指的successfully就部署乐成了。
浏览器访问IP即可,比方我这里就访问http://192.168.226.28/
如果设置文件中自己没有修改,默认用户名:admin 默认密码:Harbor12345
三. 修改网段的方法
在使用中,如果需要自界说网段,可进行如下步骤。
在运行安装步骤时,会自动的新文件表明
- docker-compose.yml:
- 作用: 这个文件是 docker-compose 的设置文件,界说了 Harbor 各个服务的 Docker 容器设置。它包罗了各个容器的镜像、环境变量、卷、网络设置等信息。
- 内容: 包罗了 Harbor 核心服务、数据库、Redis、Nginx 等服务的设置,用于启动和管理整个 Harbor 应用。
- common 目录:
- 作用: 这个目录包罗一些公共的设置和脚本,供 Harbor 在启动和运行过程中使用。
- 内容: 可能包罗一些如证书、设置模板、脚本等文件,这些文件是 Harbor 运行所必需的。
其中docker-compose.yml它是一个关键的设置文件,它用于界说构成 Harbor 平台的服务及其容器设置。
- [root@harbor harbor]# ll
- total 641832
- -rw-r--r-- 1 root root 11347 Jul 2 15:42 LICENSE
- drwxr-xr-x 3 root root 20 Aug 1 03:02 common
- -rw-r--r-- 1 root root 3643 Jul 2 15:42 common.sh
- -rw-r--r-- 1 root root 5843 Aug 1 03:02 docker-compose.yml
- -rw-r--r-- 1 root root 657181693 Jul 2 15:42 harbor.v2.10.3.tar.gz
- -rw-r--r-- 1 root root 1003 Aug 1 03:01 harbor.yml
- -rw-r--r-- 1 root root 13972 Jul 2 15:42 harbor.yml.tmpl
- -rwxr-xr-x 1 root root 1975 Jul 2 15:42 install.sh
- -rwxr-xr-x 1 root root 1882 Jul 2 15:42 prepare
复制代码 关闭harbor
- [root@harbor harbor]# docker compose down
复制代码 注:如果没有删除的话 需要使用 docker network rm harbor_harbor 的方式删除
然后查看下网络确保已经删除harbor
- [root@harbor harbor]# docker network ls
- NETWORK ID NAME DRIVER SCOPE
- 6cb7a2d44eb7 bridge bridge local
- 5ef4b87494b0 host host local
- 1855e2156e9b none null local
复制代码 创建网络,并根据需要自界说网段
- [root@harbor harbor]# docker network create --driver=bridge --subnet=10.110.0.0/16 harbor
复制代码 查抄
- [root@harbor 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 这个设置文件
- [root@harbor harbor]# vim docker-compose.yml
- #将最后面的 是否使用外部网络设置为true
- networks:
- harbor:
- external: true
复制代码 重新运行docker-compose.yml文件
- [root@harbor harbor]# docker compose up -d --force-recreate
- #该命令若不在docker-compose.yml需指定位置docker compose -f /root/harbor/docker-compose.yml up -d --force-recreate
复制代码 重新验证查看
- [root@harbor harbor]# docker network ls && docker network inspect harbor
复制代码
四. 设置开机与伴随docker启动
Docker compose 不会伴随docker的启动而启动,需要进行一下设置
执行下述代码即可,如果你的docker-compose.yml目录位置和我不一样,你需要对下面这段代码路径进行自主修改。
- cat >/usr/lib/systemd/system/harbor.service <<EOF
- [Unit]
- Description=Harbor service with docker-compose
- Requires=docker.service
- After=docker.service
- [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
- [Install]
- WantedBy=multi-user.target
- EOF
复制代码 重新加载 systemd 的设置并设置自启动。
- systemctl daemon-reload && systemctl enable harbor.service
复制代码 如今可以重启docker测试harbor会不会正常运行了。
- [root@harbor ~]# systemctl restart docker
复制代码 需等候一会验证,下面这样就是ok了。
- [root@harbor ~]# 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. 创建一个用户
2. docker登任命户
直接在docker登岸是须要用443端口的https,那么如果我们想用80端口的http,需要额外设置
- [root@harbor ~]# 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也会重启。
- [root@harbor ~]# systemctl restart docker
复制代码 登录
- [root@harbor ~]# docker login 192.168.226.28
复制代码
查看登录信息
- [root@harbor ~]# cat .docker/config.json
复制代码 3. 创建项目
给这个项目添加使用用户
4. 推送镜像
- [root@harbor ~]# 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
- [root@harbor ~]# docker tag goharbor/harbor-db:v2.10.3 192.168.226.28/namespace/ceshi:1.0
- [root@harbor ~]# docker push 192.168.226.28/namespace/ceshi:1.0
复制代码
六. 自制证书设置HTTPS
删除上面在docker设置的 "insecure-registries": ["http://192.168.226.28"]
- [root@harbor harbor]# vim /etc/docker/daemon.json
- #删除这行 "insecure-registries": ["http://192.168.226.28"]
复制代码 删除后见下图样式
创建脚本文件
- [root@harbor ~]# cd harbor
- [root@harbor 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
复制代码 执行脚本
- [root@harbor harbor]# sh generate_cert.sh mataki4.org 365 ./certs
复制代码 此命令将在 ./certs 目录中生成以下文件:
- mataki4.org.key:私钥
- mataki4.org.crt:自签名证书
- mataki4.org.csr:证书签名哀求
编辑Harbor设置https
- [root@harbor harbor]# vim harbor.yml
- https:
- port: 443
- certificate: /root/harbor/certs/mataki4.org.crt
- private_key: /root/harbor/certs/mataki4.org.key
复制代码
初始化设置
- [root@harbor harbor]# ./prepare
复制代码 设置本地域名解析
- [root@harbor harbor]# vim /etc/hosts
- # 加入下述配置ip 域名
- 192.168.226.28 mataki4.org
复制代码 重启docker,因为前面设置了harbor启动方式,重启docker,harbor也会重启。
- [root@harbor harbor]# systemctl daemon-reload
- [root@harbor harbor]# systemctl restart docker
复制代码 windows设置域名解析,在C:\Windows\System32\drivers\etc\hosts
需要使用记事本的管理员模式打开编辑或者Notepad++编辑也可
使用域名访问mataki4.org
见图可以看到,新访问的链接上有了https协议
由于是自制的证书,会有这种不安全提示,如果不喜欢可进行下述设置办理。
- [root@harbor harbor]# cd certs/
- [root@harbor certs]# ll
- total 12
- -rw-r--r-- 1 root root 997 Aug 3 01:12 mataki4.org.crt
- -rw-r--r-- 1 root root 895 Aug 3 01:12 mataki4.org.csr
- -rw------- 1 root root 1704 Aug 3 01:12 mataki4.org.key
复制代码 需要将mataki4.org.crt自签名证书文件导入到浏览器中,先从服务器下载到桌面,然后打开浏览器设置证书导入。
到这就乐成了。
重新刷新网页查看
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |