操作环境
Harbor主机系统类型:Centos7
Harbor版本:v2.8.3
Docker-compose版本:1.29.2
Docker版本:
一.Docker及Docker-compose环境安装
官方对Docker及Docker-compose版本有要求,目前我这个主机的版本不适用,那么本章会添加一个对docker升级的操作。如果是没有安装过docker的,可以直接从第2步开始。
1.查看docker版本及安装的软件包,卸载docker。
执行命令:
docker -v
yum list installed | grep docker
yum -y remove docker*
2.使用官方一键安装命令进行docker重新安装,发现有报错。
执行命令:
curl -sSL https://get.docker.com/ | sh
报错信息:
Package yum-utils-1.1.31-54.el7_8.noarch already installed and latest version
+ sh -c 'yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo'
File "/usr/bin/yum-config-manager", line 135
except yum.Errors.RepoError, e:
^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: multiple exception types must be parenthesized
报错原因:我这台主机的python环境是升级到了python3,使用python的时候默认就使用版本3的,而yum-config-manager这个文件头的Python没有改成Python2,所以导致了报错,修改一下。
执行命令:
vim /usr/bin/yum-config-manager
vi模式下输入i,修改完成后输入:wq 退出保存
再次执行安装docker命令,安装完成并检查版本
curl -sSL https://get.docker.com/ | sh
docker -v
3.配置docker-compose
执行命令:
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.27.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
先用的国内源的docker-compose,发现部署下来有问题,然后改用GitHub的了
报错信息:
/usr/local/bin/docker-compose: line 1: html: No such file or directory
/usr/local/bin/docker-compose: line 2: syntax error near unexpected token `<'
'usr/local/bin/docker-compose: line 2: `<head><title>502 Bad Gateway</title></head>
新的执行命令:
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v
二.下载及部署Harbor
在本次实操,Harbor的安装包需要从官网下载,下载地址:
自行选择版本:https://github.com/goharbor/harbor/releases
手动下载的话,在下载页面下拉到最底部,下载第一个文件,我这里使用github镜像加速网站wget下载。
1.安装包下载及证书文件创建
执行命令:
cd /
mkdir harbor
wget https://ghproxy.com/https://github.com/goharbor/harbor/releases/download/v2.8.3/harbor-offline-installer-v2.8.3.tgz
解压文件, 并生成证书,将证书移到指定位置
执行命令:
解压安装包
pwd
tar -zxvf harbor-offline-installer-v2.8.3.tgz
创建证书文件
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Hubei/L=Wuhan/O=example/OU=Personal/CN=192.168.1.1" \
-key ca.key \
-out ca.crt
创建证书目录及移动证书文件
mkdir -p /harbor/data/cert
mv ca* /harbor/data/cert
2.配置Harbor及安装
进入harbor的目录,拷贝Harbor YML原始文件到新文件
执行命令:
cd harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
执行prepare脚本启用https服务
cd harbor
./prepare
执行安装脚本
./install.sh
可以看到各容器正常运行
docker ps
3.Harbor配置文件详解
因为后面需要通过默认配置的密码登录,我们通过命令过滤出harbor.yml的有效配置,然后给大家注释看看都是什么意思。
执行命令:
cd /harbor/harbor
grep -vE '^\s*(#|$)' harbor.yml
配置文件有效配置信息,可以自行修改
hostname: 192.168.1.1 # Harbor的主机名或IP地址
http:
port: 80 # HTTP端口
https:
port: 443 # HTTPS端口
certificate: /harbor/data/cert/ca.crt # HTTPS证书路径
private_key: /harbor/data/cert/ca.key # 证书私钥路径
harbor_admin_password: Harbor12345 # Harbor管理员密码
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 # 是否跳过Trivy更新
offline_scan: false # 是否离线扫描
security_check: vuln # 安全检查类型
insecure: false # 是否允许不安全的连接
jobservice:
max_job_workers: 10 # 最大作业工作线程数
logger_sweeper_duration: 1 # 日志清理时间(单位:天)
notification:
webhook_job_max_retry: 3 # Webhook作业最大重试次数
webhook_job_http_client_timeout: 3 # Webhook作业HTTP客户端超时时间(单位:秒)
log:
level: info # 日志级别
local:
rotate_count: 50 # 本地日志轮转数量
rotate_size: 200M # 本地日志轮转大小(单位:兆字节)
location: /var/log/harbor # 本地日志存储路径
_version: 2.8.0 # Harbor的版本号
proxy:
http_proxy: # HTTP代理
https_proxy: # HTTPS代理
no_proxy: # 不需要代理的主机列表
components:
- core
- jobservice
- trivy # 需要代理的组件列表
upload_purging:
enabled: true # 是否启用上传清理
age: 168h # 清理上传文件的最大年龄(单位:小时)
interval: 24h # 清理任务运行间隔(单位:小时)
dryrun: false # 是否仅模拟运行清理任务
cache:
enabled: false # 是否启用缓存
expire_hours: 24 # 缓存过期时间(单位:小时)
Harbor启动和停止命令:
在他的docker-compose.yml所在目录执行如下命令:
关闭服务
docker-compose down
启动服务
docker-compose up -d
三.登录及验证Harbor可用性
在网络可达的其他主机上直接输入他的IP地址即可访问
登录,账号是admin,密码是配置文件中的harbor_admin_password参数,默认是Harbor12345,登录成功
创建用户
登录测试,有报错
执行命令:
docker login 192.168.1.1
报错信息:
Error response from daemon: Get "https://192.168.1.1/v2/": tls: failed to verify certificate: x509: certificate relies on legacy Common Name field, use SANs instead
故障原因是自生成的证书被Docker认为不可靠的,我做了2个操作,把自生成的证书放入Docker配置文件中,然后将自己的IP或域名加入Docker允许的不安全连接中。
执行命令:
命令解释:切换到docker-compose文件所在目录,关闭harbor服务,再切换到docker配置目录,创建放置证书的目录,把自建证书拷贝过去,然后在docker配置目录中编辑json文件
cd /harbor/harbor
docker-compose down
cd /etc/docker/
mkdir -p cert.d/192.168.1.1
cp /harbor/data/cert/* /etc/docker/cert.d/192.168.1.1/
vi daemon.json
daemon.json配置信息:
{
"registry-mirrors": ["https://192.168.1.1"],
"insecure-registries":["https://192.168.1.1"]
}
再执行命令,启动服务链接测试,输入刚刚创建的新用户
systemctl restart docker
cd /harbor/harbor
docker-compose up -d
docker login 192.168.1.1
登录成功!
上传镜像测试
命令格式:
docker tag 镜像名 <Harbor服务器地址>/<仓库名称>/<镜像标签>
docker push <Harbor服务器地址>/<仓库名称>/<镜像标签>
上传成功~!
下载镜像测试
登录harbor网页,找到镜像,复制拉取命令(注意这里显示的大小不一致是因为有压缩)
在终端粘贴下载命令执行
下载成功~!