Docker(七)Harbor私有仓库搭建

1、介绍

        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 # 执行权限,验证!

版本查看

Docker(七)Harbor私有仓库搭建_第1张图片

由于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)的服务端口!

Docker(七)Harbor私有仓库搭建_第2张图片

页面测试

Docker(七)Harbor私有仓库搭建_第3张图片

说明:此时打开网页访问reg.wzj.com时就会提示ssl不安全的连接毕竟没有经过官方认证,说明ssl添加成功

Docker(七)Harbor私有仓库搭建_第4张图片

但是:在命令行登陆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界面告诉我们的!

Docker(七)Harbor私有仓库搭建_第5张图片

Docker(七)Harbor私有仓库搭建_第6张图片

排错的依据:看此 /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) 

很关键的一篇博客

也很不错的博客

也很不错的博客

你可能感兴趣的:(Docker)