文章目录
1.安装docker
2.安装docker-compose
yum install docker-compose -y
以上文件可以到此处下载:‘docker-compose.zip’
3.安装Harbor
cd /export/servers/harborrpm
-
harbor包
cd /export/servers/harborrpm
yum install -y harbor-1.10.2-1.p02.ky10.aarch64.rpm
以上文件可以到此处下载:harbor-1.10.2-1.p02.ky10.aarch64.rpm -
配置
cd /opt/harbor
vim harbor.yml
hostname: harbor01.io port: 80 harbor_admin_password: Harbor12345 data_volume: /data location: /var/log/harbor
-
安装harbor
cd /opt/harbor
./prepare
#配置Harbor
./install.sh
#安装Harbor -
修改docker配置文件,使docker支持harbor
vim /etc/docker/daemon.json
文件,其中环境变量harbor01.io配置:192.168.0.5 harbor01.io
{
“registry-mirrors”: [“https://oelq8zt4.mirror.aliyuncs.com”],
“insecure-registries”: [ “http://harbor01.io” ]}
systemctl restart docker
-
设置Harbor开机启动
vim /lib/systemd/system/harbor.service
,写入如下[Unit] Description=Harbor Requires=docker.service After=syslog.target network.target [Service] Type=oneshot ExecStartPre=/usr/bin/docker-compose -f /opt/harbor/docker-compose.yml down # #需要注意harbor的安装位置 ExecStart=/usr/bin/docker-compose -f /opt/harbor/docker-compose.yml up -d ExecStop=/usr/bin/docker-compose -f /opt/harbor/docker-compose.yml down # This service shall be considered active after start RemainAfterExit=yes [Install] # Components of this application should be started at boot time WantedBy=multi-user.target
systemctl enable harbor
#设置harbor开机自启
systemctl start harbor
#启动harbor -
测试:docker ps命令查看:有几个容器没起来,如图一直Restarting
分析:docker logs d1edfca48363
查看restaring的容器日志‘Error response from daemon: configured logging driver does not support reading’,其余已启动的容器也报此error。
尝试解决:(成功)
cd /var/log/harbor & tail -20f registryctl.log,看到报错:
Aug 12 10:17:37 172.18.0.1 registryctl[3559635]: ls: /harbor_cust_cert: No such file or directory
Aug 12 10:17:37 172.18.0.1 registryctl[3559635]: 2021-08-12T02:17:37Z [FATAL] [/registryctl/main.go:82]: Failed to load configurations with error: open /etc/registryctl/config.yml: permission denied
cd /var/log/harbor & tail -f proxy.log,看到报错:
Aug 12 10:21:44 172.18.0.1 proxy[3559635]: 2021/08/12 02:21:44 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (13: Permission denied)
Aug 12 10:21:44 172.18.0.1 proxy[3559635]: nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (13: Permission denied)
-------------------------
1. 安装nginx : yum install -y nginx(不做这步也可以)
2. 给/common/registryctl/config.yml赋权:chmod 777 -R /opt/harbor/common/
3. 检查端口是否被占用/检查80端口是否统一:检查的文件有
/opt/harbor/docker-compose.yml查看proxy.ports:- 80:8080
/opt/harbor/common/config/registry/config.yml查看auth.realm: http://192.168.0.15/service/token
/opt/harbor/harbor.yml查看port: 80
cat /etc/docker/daemon.json
4. 重启docker:systemctl daemon-reload 及 systemctl restart docker
5. 重启harbor:docker-compose down 及 docker-compose up -d
用docker-compose ps命令再次查看,如上图:所有容器都成功了! docker ps查看到端口为80:
访问http://192.168.0.5,页面出现了,admin/Harbor12345(默认账号/密码)
4.附:给harbor加CA认证
为了兼容ide安装,在192.168.0.15设置hosts:192.168.0.15 harbor01.io
默认情况下,Harbor不附带CA证书认证的。也就是说,Harbor 可以在没有安全性的情况下部署,以便可以快速通过HTTP连接到访问。但是,只有在没有外部互联网连接、局域网的测试或开发环境中,才适合使用HTTP。
不过,不考虑安全性,在私人使用的话也可以直接在互联网使用。当然,如果直接在互联网使用HTTP协议,就会有可能遭受中间人攻击。
要配置HTTPS,必须创建SSL证书。您可以使用由受信任的第三方CA签名的证书,也可以使用openssl进行自签名证书。本节介绍如何使用 OpenSSL创建CA,以及如何使用CA签署服务器证书和客户端证书。您可以使用其他CA工具进行自签名,例如 Let’s Encrypt。
不加CA认证会导致docker push 时出现“Get https://harbor01.io/v2/: dial tcp 192.168.0.15:443: connect: connection refused”问题
1. 生成证书颁发机构证书
1.1 生成CA证书:生成CA证书私钥 ca.key
在生产环境中,一般是应该从CA获得证书,例如:在阿里云购买域名之后就可以下载相关域名的CA证书了。但是在测试或开发环境中,对于这种自己定义的内网域名,就可以自己生成自己的CA证书。要生成CA证书,则运行以下命令。
mkdir /export/servers/ssl -p && cd /export/servers/ssl
openssl genrsa -out ca.key 4096
[root@cn01 ssl]# openssl genrsa -out ca.key 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
...............................................++++
....................................................................++++
e is 65537 (0x010001)
[root@cn01 ssl]# ls
ca.key
1.2 根据上面生成的CA证书私钥,再来生成CA证书 ca.crt
[root@cn01 ssl]# openssl req -x509 -new -nodes -sha512 -days 3650 \
> -subj "/C=CN/ST=Beijing/L=Beijing/O=Harbor/OU=Harbor/CN=harbor01.io" \
> -key ca.key \
> -out ca.crt
[root@cn01 ssl]# ls
ca.crt ca.key
# 参数说明:
-new 指生成证书请求
-x509 表示直接输出证书
-key 指定私钥文件
-days 指定证书过期时间为3650天
-out 导出结束后证书文件
-subj 输入证书拥有者信息
CN 可以填写harbor服务器的域名
2.生成服务器证书
2.1 上面生成了 ca 的证书,那么下面来继续生成服务器的证书。证书通常包含一个.crt
文件和一个.key
文件,例如yourdomain.com.crt
和yourdomain.com.key
。在这里,因为我上面设置的服务器域名为harbor01.io
openssl genrsa -out harbor01.io.key 4096
[root@cn01 ssl]# openssl genrsa -out harbor01.io.key 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
.............................................................................................................................................................++++
e is 65537 (0x010001)
[root@cn01 ssl]# ls
ca.crt ca.key harbor01.io.key
2.2 生成证书签名请求
[root@cn01 ssl]# openssl req -sha512 -new \
> -subj "/C=CN/ST=Beijing/L=Beijing/O=Harbor/OU=Harbor/CN=harbor01.io" \
> -key harbor01.io.key \
> -out harbor01.io.csr
[root@cn01 ssl]# ls
ca.crt ca.key harbor01.io.csr harbor01.io.key
2.3 生成一个x509 v3扩展文件
无论是使用FQDN还是IP地址连接到Harbor主机,都必须创建此文件。这样的话,Harbor主机才能够生成符合主题备用名称(SAN)和x509 v3的证书扩展要求。下面的配置中,DNS的部分需要替换为自己Harbor服务器的域名。
[root@cn01 ssl]# cat > v3.ext <<-EOF
> authorityKeyIdentifier=keyid,issuer
> basicConstraints=CA:FALSE
> keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
> extendedKeyUsage = serverAuth
> subjectAltName = @alt_names
>
> [alt_names]
> DNS.1=harbor01.io
> DNS.2=harbor01
> EOF
[root@cn01 ssl]# ls
ca.crt ca.key harbor01.io.csr harbor01.io.key v3.ext
2.4 使用该v3.ext
文件为您的Harbor主机生成证书 harbor01.io.crt
[root@cn01 ssl]# openssl x509 -req -sha512 -days 3650 \
> -extfile v3.ext \
> -CA ca.crt -CAkey ca.key -CAcreateserial \
> -in harbor01.io.csr \
> -out harbor01.io.crt
Signature ok
subject=C = CN, ST = Beijing, L = Beijing, O = Harbor, OU = Harbor, CN = harbor01.io
Getting CA Private Key
[root@cn01 ssl]# ls
ca.crt ca.key ca.srl harbor01.io.crt harbor01.io.csr harbor01.io.key v3.ext
3.提供证书给docker
## 将服务器证书harbor01.io.crt和密钥harbor01.io.key复制到Harbor主机上的certficates文件夹中
[root@cn01 ssl]# mkdir /data/cert/ -p
[root@cn01 ssl]# cp harbor01.io.crt harbor01.io.key /data/cert/
[root@cn01 ssl]# cd /data/cert/
## 将服务器证书harbor01.io.crt的编码格式转换为harbor01.io.cert,提供Docker使用
[root@cn01 cert]# openssl x509 -inform PEM -in harbor01.io.crt -out harbor01.io.cert
[root@cn01 cert]# ls
harbor01.io.cert harbor01.io.crt harbor01.io.key
## 将服务器证书,密钥和CA文件复制到Harbor主机上的Docker certificate文件夹中
[root@cn01 cert]# mkdir -p /etc/docker/certs.d/harbor01.io
[root@cn01 cert]# cp harbor01.io.cert harbor01.io.key /etc/docker/certs.d/harbor01.io/
[root@cn01 cert]# cp /export/servers/ssl/ca.crt .
[root@cn01 cert]# cp ca.crt /etc/docker/certs.d/harbor01.io/
[root@cn01 cert]# ls /etc/docker/certs.d/harbor01.io/
ca.crt harbor01.io.cert harbor01.io.key
# 重启docker
systemctl restart docker
[root@cn01 cert]# tree /etc/docker/certs.d/
/etc/docker/certs.d/
└── harbor01.io
├── ca.crt
├── harbor01.io.cert
└── harbor01.io.key
4.提供证书给harbor
cd /opt/harbor,修改harbor.yml文件,指定证书给harbor
重启harbor:
docker-compose down
docker-compose up
测试docker login是否可以
docker login harbor01.io
,结果还是不行,进行下面第8步操作
5.问题:docker push/login报443端口错误
修改daemon.json文件
[root@cn03 image]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://oelq8zt4.mirror.aliyuncs.com"],
"insecure-registries": [ "http://harbor01.io" ]
}
#重启docker
systemctl daemon-reload
systemctl restart docker
#测试docker login
[root@cn01 harbor]# docker login harbor01.io
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
成功了!!!
6.附命令
日志查看:docker logs -f harbor-log
容器查看:docker ps -a
harbor常用指令:
docker-compose start ## 启动 Harbor
docker-compose stop ## 停止 Harbor
docker-compose restart ## 重启 Harbor
docker-compose ps ## 列出容器
docker-compose create ## 创建服务
docker-compose down ## 停止并删除容器、network、images和volumes
docker-compose log ## 容器的视图输出
docker-compose up ## 创建和启动容器
docker-compose up -d ## 创建和启动容器(后台运行)