Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。
docker-compse -->编排工具,对启动服务优先级排序!
# Proxy : 由 Nginx 服务器构成的反向代理。
# Registry :由 Docker 官方的开源 registry 镜像构成的容器实例。
# UI : 即架构中的 core services , 构成此容器的代码是 Harbor 项目的主体。
# MySQL : 由官方 MySQL 镜像构成的数据库容器。
# Log : 运行着 rsyslogd 的容器,通过 log-driver 的形式收集其他容器的日志
# 说明:定义这几个服务的优先级!
docker-compose安装
curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# > 或O均可导入!
chmod +x /usr/local/bin/docker-compose # 执行权限,验证!
版本查看
由于RHEL7默认python版本就是python2.7符合要求!
文件
tar zxf harbor-offline-installer-v1.8.0.tgz # 下载的是离线包
-rw-r--r-- 1 root root 556153903 May 16 19:55 harbor.v1.8.0.tar.gz
-rw-r--r-- 1 root root 4839 May 16 19:54 harbor.yml # yml格式的编排文件!
-rwxr-xr-x 1 root root 5088 May 16 19:54 install.sh # 启动脚本
-rw-r--r-- 1 root root 11347 May 16 19:54 LICENSE
-rwxr-xr-x 1 root root 1654 May 16 19:54 prepare
说明:部分内容参考之前的私有仓库的搭建!
下载离线安装包,网络实在是太卡了!
两个不同的版本:online -->软件包小(需要联网);offline -->(比较大,包含镜像)
思路:这里跟着官方文档走!
注意:新版配置文件已经改成harbor.yml
(1)核心安装步骤
生成https证书,手动自签发的证书
############(1)创建CA密钥对############
# (1) openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/C=CN/ST=wzj/L=wzj/O=example/OU=Personal/CN=wzj.com" -key ca.key -out ca.crt
# (2) openssl genrsa -out reg.wzj.com.key 4096
###########(2)创建web服务器端秘钥对#####
# (3) openssl req -sha512 -new -subj "/C=CN/ST=wzj/L=wzj/O=example/OU=Personal/CN=reg.wzj.com" -key reg.wzj.com.key -out reg.wzj.com.csr
# (4) cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=reg.wzj.com
DNS.2=wzj
DNS.3=harbor
EOF
#(5) vim harbor.yml --->端口(https-->443,注意不要多个空格),主机名(hostname)
# vim /etc/hosts --->做好解析 -->IP reg.wzj.com -->基于https的harbor需要使用域名
#(6) openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in reg.wzj.com.csr -out reg.wzj.com.crt
# Docker守将.crt文件解释为CA证书,将.cert文件解释为客户端证书。所以需要将服务器转换yourdomain.com.crt为yourdomain.com.cert
###########(3)放置证书#################
#(7) mkdir /root/cert ## 创建证书的放置目录-->在配置文件中体现
#(8) cp reg.wzj.com.crt reg.wzj.com.key /root/cert/
#(9) vim harbor.yml -->指定这两个文件(证书和密钥-->校验)的位置 以及 hostname(reg.wzj.com)
#(10) docker load -i harbor.v1.8.0.tar.gz -->加载镜像(< -i均可)
#(11) ./prepare
#(12) ./install.sh # 注意在其位置执行 -->默认执行左边安装后会自动启动服务
docker ps # 查看后太状态!
几个容器通过Docker link的形式连接在一起,这样在容器之间可以通过容器名字互相访问。对终端用户而言,只需要暴露proxy(即Nginx)的服务端口!
页面测试
说明:此时打开网页访问reg.wzj.com时就会提示ssl不安全的连接,毕竟没有经过官方认证,说明ssl添加成功;
但是:在命令行登陆docker仓库时不成功的
Docker客户端测试
(1)用户身份的验证
docker login reg.wzj.com
# 用户 密码 登陆 -->生成 /etc/.docker/conf.json文件
认证配置:相关配置
# 私有仓库的指定,否则默认是Docker公共仓库hub!
# cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://xxxxxxx.mirror.aliyuncs.com" # 私库加速器(选择阿里云-->反向代理)
],
# 这个配置 可以避免私服仓库没有https访问导致无法使用的问题(写不写觉得都可以)
"insecure-registries": [
"https://reg.wzj.com" # 私库加速器私库的服务地址 [reg.wzj.com] 也可以!
# "insecure-registries":[""]
# Docker如果需要从非SSL源管理镜像,这里加上!
]
}
systemctl daemon-reload
sudo systemctl restart docker
说明:必须持有证书(CA)才能访问,经过TLS加密的!
#####habor做的###########
scp /root/cert/reg.wzj.com.crt [email protected]:/etc/docker/certs.d/reg.wzj.com/
#######client查看#####
ll /etc/docker/certs.d/reg.wzj.com
vim /etc/docker/daemon.json # 仓库的地址(不写默认就是远程仓库)
systemctl daemon-reload
systemctl restart docker
docker push reg.wzj.com/wzj/busybox:v1 # 格式:UI界面告诉我们的!
排错的依据:看此 /var/log/harbor/目录
443:默认走的端口
补充
# 需求:如果需要修改端口配置等信息
# 1)可以直接修改harbor.yml,然后在执行./prepare更新配置即可。
# 2)之后重新启动容器就行了,执行docker-compose down ,停止所有容器,然后执行docker-compose up -d就行了。
官方文档
安装底层需求
org.yaml.snakeyaml.parser.ParserException: while parsing a block mapping
原因:yml文件格式错误,此文件对语法要求很严格,多个空格都不行!
参说说明
#参数说明
nginx:nginx负责流量转发和安全验证,对外提供的流量都是从nginx中转,所以开放https的443端口,它将流量分发到后端的ui和正在docker镜像存储的docker registry。
harbor-jobservice:harbor-jobservice 是harbor的job管理模块,job在harbor里面主要是为了镜像仓库之前同步使用的;
harbor-ui:harbor-ui是web管理页面,主要是前端的页面和后端CURD的接口;
registry:registry就是docker原生的仓库,负责保存镜像。
harbor-adminserver:harbor-adminserver是harbor系统管理接口,可以修改系统配置以及获取系统信息。
这几个容器通过Docker link的形式连接在一起,在容器之间通过容器名字互相访问。对终端用户而言,只需要暴露proxy (即Nginx)的服务端口。
harbor-db:harbor-db是harbor的数据库,这里保存了系统的job以及项目、人员权限管理。由于本harbor的认证也是通过数据,在生产环节大多对接到企业的ldap中;
harbor-log:harbor-log是harbor的日志服务,统一管理harbor的日志。通过inspect可以看出容器统一将日志输出的syslog。
这几个容器通过Docker link的形式连接在一起,这样,在容器之间可以通过容器名字互相访问。对终端用户而言,只需要暴露proxy (即Nginx)的服务端口。
# 由于使用了docker-compose,可以使用后台启动的方式来实现harbor的开机启动功能
cd /root/harbor #在当前目录下执行!
# 停止容器
docker-compose stop
# 后台启动容器
docker-compose up -d
ldd本身不是一个程序,而仅是一个shell脚本:ldd可以列出一个程序所需要得动态链接库(so)
很关键的一篇博客
也很不错的博客
也很不错的博客