docker harbor
前提须知:安装docker环境和docker-compose环境。
创建Harbor
1.访问github上的harbor项目
https://github.com/goharbor/harbor
2.下载版本,比如1.10.0
https://github.com/goharbor/harbor/releases
3.上传并解压
tar -zxvf harbor-offline-installer-v1.10.0.tgz
4.修改harbor.yml文件
**vim harbor.yml**
注意:yml必须在冒号后面加空格
hostname: 192.168.1.14
ui_url_protocol: https
# https related config
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /data/cert/ca.crt(你自己的证书地址)
private_key: /data/cert/ca.key(你自己的私钥地址)
5.执行./prepare
6.执行./install.sh
7.浏览器访问,比如192.168.1.14,输入用户名和密码即可(admin/Harbor12345)
生成证书方式:
1.创建证书存放目录
mkdir -p /data/cert && cd /data/cert
2.创建自己的CA证书(不使用第三方权威机构的CA来认证,自己充当CA的角色)
openssl genrsa -out ca.key 2048 #生成根证书私钥(无加密)
3.生成自签名证书(使用已有私钥ca.key自行签发根证书)
openssl req -x509 -new -nodes -key ca.key -days 10000 -out ca.crt -subj "/CN=Harbor-ca"
req 产生证书签发申请命令
-x509 签发X.509格式证书命令。X.509是最通用的一种签名证书格式。
-new 生成证书请求
-key 指定私钥文件
-nodes 表示私钥不加密
-out 输出
-subj 指定用户信息
-days 有效期
4.生成服务器端私钥和CSR签名请求
openssl req -newkey rsa:4096 -nodes -sha256 -keyout server.key -out server.csr
一路回车。。。
5.签发服务器证书
echo subjectAltName = IP:192.168.1.14 > extfile.cnf
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 365 -extfile extfile.cnf -out server.crt
x509 签发X.509格式证书命令。
-req 表示证书输入请求。
-days 表示有效天数
-extensions 表示按OpenSSL配置文件v3_req项添加扩展。
-CA 表示CA证书,这里为ca.crt
-CAkey 表示CA证书密钥,这里为ca.key
-CAcreateserial表示创建CA证书序列号
-extfile 指定文件
6.设置docker证书
# 如果如下目录不存在,请创建,如果有域名请按此格式依次创建
mkdir -p /etc/docker/certs.d/192.168.1.14
# mkdir -p /etc/docker/certs.d/[IP2]
# mkdir -p /etc/docker/certs.d/[example1.com]
# 如果端口为443,则不需要指定。如果为自定义端口,请指定端口
# /etc/docker/certs.d/yourdomain.com:port
# 将ca根证书依次复制到上述创建的目录中
cp ca.crt /etc/docker/certs.d/192.168.1.14
PS:设置证书的方式解决https的ssl证书问题
最终效果:
扩展(上传docker镜像)
1、登录
docker login http://192.168.1.14:80
2、登录私有hub创建项目
例如项目叫:test
3、给镜像打tag(这里以mysql镜像为例)
docker tag mysql 192.168.1.14:80/test/mysql:1.0
mysql: 镜像名称,可以用docker images 查看
192.168.1.14:80:私有hub域名
test:项目名称
mysql:镜像名称
1.0:镜像版本号
4、推送
docker push 192.168.1.14:80/test/mysql:1.0