Harbor介绍
- Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。2. 镜像的存储harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。
- harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。
- harbor以docker-compose的规范形式组织各个组件,并通过docker-compose工具进行启停。
- docker的registry是用本地存储或者s3都是可以的
- Harbor的镜像拷贝功能是通过docker registry的API去拷贝,这种做法屏蔽了繁琐的底层文件操作
Harbor主要组件
harbor-adminserver
配置管理中心
harbor-db
Mysql数据库
harbor-jobservice
负责镜像复制
harbor-log
记录操作日志
nginx
前端代理,负责前端页面和镜像上传/下载转发
redis
回话
registry
镜像存储
Harbor安装
1、参考文档及安装步骤梳理下载v1.4.0版本harbor:https://github.com/goharbor/harbor/releases?after=v1.5.0-rc5
安装参考文档:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md
配置证书:https://github.com/goharbor/harbor/blob/master/docs/configure_https.md
1、 下载离线安装包
2、 安装docker
3、 安装docker-compose
4、 自签TLS证书
5、 Harbor安装与配置
6、 Docker主机访问Harbor
2、安装docker和docker-compose
docker已经安装,可参考其他笔记Docker介绍与安装
安装docker composecurl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-uname -s
-uname -m
-o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version # 测试docker-compose是否安装好
docker-compose version 1.24.1, build 4667896b
或者
wget -c https://github.com/docker/compose/releases/download/1.25.5/docker-compose-Linux-x86_64mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
chmod a+x /usr/local/bin/docker-compose
docker-compose --version
docker-compose version 1.25.5, build 8a1c60f6
3、安装Harbor
wget -c https://github.com/goharbor/harbor/releases/download/v2.4.1/harbor-offline-installer-v2.4.1.tgz
tar xf harbor-offline-installer-v2.4.1.tgz -C /usr/local/
cd /usr/local/harbor/
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
hostname: 10.20.19.102
#主机名修改为自己的ip地址
# https related config
# https:
# https port for harbor, default is 443 #因为未做https,所以将https全部注释
# port: 443
# The path of cert and key files for nginx
# certificate: /your/certificate/path
# private_key: /your/private/key/path
harbor_admin_password: 12345
#web界面登录密码:12345
#保存退出后,执行安装脚本
./install.sh
4.登录
admin/12345
查看容器状态
docker-compose ps
5.为Harbor配置https
1、简介
- 配置ssl证书https://github.com/goharbor/harbor/blob/master/docs/configure_https.md
- 由于Harbor没有附带任何证书,所以它默认使用HTTP来服务注册表请求,但是,强烈建议为任何生产环境启用安全性。
- 在测试或开发环境中,您可以选择使用自签名证书,而不是来自受信任的第三方CA的证书。
2、获得CA证书颁发机构(CN为域名)
#创建一个ssl目录存放创建的证书
mkdir /apps/harbor/ssl
cd /apps/harbor/ssl
获得CA证书颁发机构(CN为域名,最好为主机名)
openssl genrsa -out ca.key 4096openssl req -x509 -new -nodes -sha512 -days 3650
-subj “/C=CN/ST=Shanghai/L=Shanghai/O=example/OU=Personal/CN=node02.harbor.com”
-key ca.key
-out ca.crt
3、获取服务器证书
- 假设注册表的主机名是node02.harbor.com,其DNS记录指向运行Harbor的主机。2. 在生产环境中,您首先应该从CA获得证书,在测试或开发环境中,您可以使用自己的CA。
- 证书通常包含一个.crt文件和一个.key文件,例如node02.harbor.com.crt和node02.harbor.com.key。
创建自己的私钥
openssl genrsa -out node02.harbor.com.key 4096
生成部署请求认证
如果使用像node02.harbor.com这样的FQDN连接注册表主机,则必须使用node02.harbor.com作为CN(通用名称)。
openssl req -sha512 -new
-subj “/C=CN/ST=Shanghai/L=Shanghai/O=example/OU=Personal/CN=node02.harbor.com”
-key node02.harbor.com.key
-out node02.harbor.com.csr
4、为注册的主机生成证书
- 无论您使用的是像node02.harbor.com这样的FQDN还是IP来连接注册表主机2. 都可以运行这个命令来生成符合Subject Alternative Name (SAN)和x509 v3扩展要求的注册表主机证书
生成v3.ext文件
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=node02.harbor.com
DNS.2=node02.harbor
DNS.3=harbor
EOF
生成证书
openssl x509 -req -sha512 -days 3650
-extfile v3.ext
-CA ca.crt -CAkey ca.key -CAcreateserial
-in node02.harbor.com.csr
-out node02.harbor.com.crt
5、为Harbor配置服务器证书和密钥
在获得node02.harbor.com.crt和node02.harbor.com.key文件之后,可以将它们放入/data/cert/这样的目录中
mkdir -p /data/cert
cp node02.harbor.com.crt /data/cert/
cp node02.harbor.com.key /data/cert/
6、为Docker配置服务器证书、密钥和CA
Docker守护进程将.crt文件解释为CA证书,将.cert文件解释为客户机证书# 将服务器node02.harbor.com.crt转换为node02.harbor.com.cert
openssl x509 -inform PEM -in node02.harbor.com.crt -out node02.harbor.com.cert
为docker部署 node02.harbor.com.cert、node02.harbor.com.key和ca.crt
mkdir -p /etc/docker/certs.d/node02.harbor.com/
cp node02.harbor.com.cert /etc/docker/certs.d/node02.harbor.com/
cp node02.harbor.com.key /etc/docker/certs.d/node02.harbor.com/
cp ca.crt /etc/docker/certs.d/node02.harbor.com/
7、配置Harbor
编辑文件端口,更新主机名并取消对https块的注释,更新属性证书和private_key
vim /usr/local/harbor/harbor.y#set hostname
hostname: node02.harbor.com
harbor_admin_password: 12345
http:
port: 80
https:
https port for harbor, default is 443
port: 443
The path of cert and key files for nginx
certificate: /data/cert/node02.harbor.com.crt
private_key: /data/cert/node02.harbor.com.key
8、为Harbor重新生成配置文件
#1、为Harbor重新生成配置文件./prepare
#2、如果Harbor已经运行,则停止并删除现有实例,镜像数据仍然保存在文件系统中
docker-compose down -v
#3、重启harbor
docker-compose up -d
#4、此时可以通过浏览器访问https: https://10.20.19.102/harbor/projects
#5、可以在node02.harbor.com本机上测试docker登录
docker login node02.harbor.com
9、在其他docker机器中配置登录harbor(10.20.19.101)
mkdir -p /etc/docker/certs.d/node02.harbor.comscp -r root@10.20.19.102:/etc/docker/certs.d/node02.harbor.com/* /etc/docker/certs.d/node02.harbor.com/
vi /usr/lib/systemd/system/docker.service # 添加–insecure-registry
‘’’
ExecStart=/usr/bin/dockerd --insecure-registry 10.20.19.102
‘’’
systemctl daemon-reload
systemctl restart docker.service # 重启docker
docker login node02.harbor.com
连接后就可以pull harbor上的镜像了
推送新镜像至Harbor配置docker配置文件
[root@node02 system]# cat /etc/docker/daemon.json{
“registry-mirrors”: [“https://ygne5xlj.mirror.aliyuncs.com”],
“insecure-registries”: [“https://node02.harbor.com”]
}
本地镜像打标签后推送在harbor中寻求资料
docker push https://node02.harbor.com/test/ubuntu:1.0
docker push node02.harbor.com/test/ubuntu:1.0
推送成功
拉取harbor上的镜像
docker pull
node02.harbor.com/test/ubuntu@sha256:4c775d71fbff6002ec05b60254e9642f26145bd18062e6341c389ca4483e8960
以上都是我亲测可行的步骤,是我自己学习中的笔记,如有不清晰的地方,欢迎指正和提问,谢谢~