前提
三台已安装docker、docker-compose的主机
192.168.56.29 (harbor)
192.168.56.27 (harbor)
192.168.56.26
1. 安装docker、docker-compose
步骤略过,未安装的可按照末尾参考资料二安装
2. 下载解压harbor
步骤略过,可查看末尾参考资料一步骤
3. 修改harbor配置文件
mv /home/harbor/harbor.yml.tmpl /home/harbor/harbor.yml
vi /home/harbor/harbor.yml
...
#192.168.56.29、192.168.56.27两个主机各自配置本身地址
hostname: 192.168.56.29
http:
port: 80
#这里不配置https访问
#https:
#port: 443
#certificate: /home/harbor/certs/harbor.k8smaster1.com.crt #需要自己生成的证书文件
#private_key: /home/harbor/certs/harbor.k8smaster1.com.key #需要自己生成的证书文件
#admin用户的登录密码
harbor_admin_password: Harbor12345
database:
password: root123
max_idle_conns: 50
max_open_conns: 1000
#数据存放的目录
data_volume: /home/harbor/data
...
mkdir -p /home/harbor/data
4. 安装harbor
./install.sh
5. 配置docker仓库
#三台主机都做同样的配置
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries":["192.168.56.29","192.168.56.29"]
}
6. 重启docker服务
systemctl daemon-reload
systemctl restart docker
#重启后一般harbor服务会挂掉,需要再重启harbor
cd /home/harbor/
docker-compose down -v
docker-compose up -d
7. 登录harbor管理界面配置双主复制
在192.168.56.29添加192.168.56.27仓库以及复制规则
在192.168.56.27添加192.168.56.29仓库以及复制规则
再在192.168.56.29新建一个仓库
9. 配置nginx实现高可用
以下操作在192.168.56.26主机上进行
首先编写nginx配置文件
vi harbor-nginx.conf
user nginx;
worker_processes 1;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log warn;
events {
worker_connections 1024;
multi_accept on;
use epoll;
}
http {
#日志输出,可以不用
log_format access_json '{ "@timestamp": "$time_iso8601", '
'"time": "$time_iso8601", '
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"body_bytes_sent": "$body_bytes_sent", '
'"request_time": "$request_time", '
'"status": "$status", '
'"host": "$host", '
'"request": "$request", '
'"request_method": "$request_method", '
'"uri": "$uri", '
'"http_referrer": "$http_referer", '
'"body_bytes_sent":"$body_bytes_sent", '
'"http_x_forwarded_for": "$http_x_forwarded_for", '
'"http_user_agent": "$http_user_agent" '
'}';
access_log /var/log/nginx/access.log access_json;
error_log /var/log/nginx/error.log;
upstream harbor {
ip_hash; #必须使用ip_hash的方式
server 192.168.56.29:80 weight=1 max_fails=3 fail_timeout=5s;
server 192.168.56.27:80 weight=1 max_fails=3 fail_timeout=5s;
}
server {
listen 80;
server_name localhost;
location / {
proxy_next_upstream http_500 http_502 http_503 http_504; #自动重试
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://harbor;
}
}
}
编写nginx的docker脚本
vi harbor-nginx.sh
#!/bin/bash
docker stop harbor-nginx
docker rm harbor-nginx
#路径自己看着设置 -v 本机位置:容器内部位置
docker run -itd -p 8090:80 --name harbor-nginx -v /usr/tmp/harbor-nginx.conf:/etc/nginx/nginx.conf -v /usr/tmp/access.log:/var/log/nginx/access.log -v /usr/tmp/error.log:/var/log/nginx/error.log nginx:1.14.0
配置仓库
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries":["192.168.56.29","192.168.56.29","192.168.56.26:8090"]
}
重启docker,并运行nginx脚本
systemctl daemon-reload
systemctl restart docker
sh harbor-nginx.sh
访问192.168.56.26:8090的harbor界面
10. 推送镜像,测试复制是否成功
在192.168.56.26主机上操作
docker login 192.168.56.26:8090 -u admin -p Harbor12345
docker pull nginx
docker tag nginx:latest 192.168.56.26:8090/local-repository/mynginx:v1
docker push 192.168.56.26:8090/local-repository/mynginx:v1
查看192.168.56.27仓库是否已复制镜像过来
至此,完成。
后记
- 一般harbor常用在自己内网,所以只使用http方式问题不大。
- 有些是搭建在阿里云服务器上面的,像这种有域名的服务地址全部使用域名,然后改主机hosts,不使用域名的用公网IP,不要使用私网IP,不然管理界面添加远程仓库访问不到也就不能继续往下配置复制了,虽然推拉镜像没问题。
- 使用https方式配置+自签证书,本人尝试过后一直不能成功添加另一台主机的仓库,还没搞明白什么情况,因此不得已使用http的方式来搭建。
参考资料:
k8s搭建安装 Harbor 私有镜像仓库(详细)
Docker使用Harbor本地仓库
centos7安装harbor并使用nginx的proxy_next_upstream提高可用性