本文共 4834 字,大约阅读时间需要 16 分钟。
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 <<-EOFauthorityKeyIdentifier=keyid,issuerbasicConstraints=CA:FALSEkeyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEnciphermentextendedKeyUsage = serverAuthsubjectAltName = @alt_names[alt_names]DNS.1=reg.wzj.comDNS.2=wzjDNS.3=harborEOF #(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-reloadsudo systemctl restart docker
说明:必须持有证书(CA)才能访问,经过TLS加密的!
#####habor做的###########scp /root/cert/reg.wzj.com.crt root@172.25.2.22:/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)
转载地址:http://epzwz.baihongyu.com/