Docker-搭建Harbor镜像仓库

企业级Docker镜像仓库Harbor部署与使用

在实际生产运维中,往往需要把镜像发布到几十、上百台或更多的节点上。这时单台Docker主机上镜像已无法满足,项目越来越多,镜像就越来越多,都放到一台Docker主机上是不行的,我们需要一个像Git仓库一样系统来统一管理镜像。这里介绍的是一个企业级镜像仓库Harbor,将作为我们容器云平台的镜像仓库中心。

Habor是由VMWare公司开源的容器镜像仓库。事实上,Habor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,AD/LDAP集成以及审计日志等,足以满足基本企业需求。

官方地址:https://vmware.github.io

Github:https://github.com/goharbor/harbor

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MSK7Vpwt-1619060152818)(C:\Users\lenovo\AppData\Local\Temp\1594030245759.png)]

1、Harbor主要功能

  • 基于角色访问控制(RBAC)

    在企业中,通常有不同的开发团队负责不同的项目,镜像像代码一样,每个人角色不同需求也不同,因此就需要访问权限控制,根据角色分配相应的权限。
    例如,开发人员需要对项目构建这就用到读写权限(push/pull),测试人员只需要读权限(pull),运维一般管理镜像仓库,具备权限分配能力,项目经理具有所有权限。

  • 镜像复制

    可以将仓库中的镜像同步到远程的Harbor,类似于MySQL主从同步功能。

  • LDAP

    Harbor支持LDAP认证,可以很轻易接入已有的LDAP。

  • 镜像删除和空间回收

    Harbor支持在Web删除镜像,回收无用的镜像,释放磁盘空间。

  • 图形页面管理

    用户很方面搜索镜像及项目管理。

  • 审计

    对仓库的所有操作都有记录。

  • REST API

    完整的API,方便与外部集成。

2、Harbor组件

组件功能
harbor-adminserver配置管理中心
harbor-dbMysql数据库
harbor-jobservice负责镜像复制
harbor-log记录操作日志
harbor-uiWeb管理页面和API
nginx前端代理,负责前端页面和镜像上传/下载转发
redis会话
registry镜像存储

3、Harbor部署

环境要求:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qp7euRh6-1619060152820)(C:\Users\lenovo\AppData\Local\Temp\1594030227943.png)]

Harbor安装有3种方式:

  • 在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小
  • 离线安装:安装包包含部署的相关镜像,因此安装包比较大
  • OVA安装程序:当用户具有vCenter环境时,使用此安装程序,在部署OVA后启动Harbor

离线安装,首先下载离线安装包:https://github.com/vmware/harbor/releases

HTTP方式部署

基本配置:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T7o2nZI8-1619060152822)(C:\Users\lenovo\AppData\Local\Temp\1594030285608.png)]

准备配置文件:

# ./prepare

安装并启动Harbor:

# ./install.sh

查看运行状态:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vgtbV7J3-1619060152825)(C:\Users\lenovo\AppData\Local\Temp\1594031220992.png)]

部署完成

在线安装

(1)下载

$ wget -P /usr/local/src/  https://github.com/vmware/harbor/releases/download/v1.2.0/harbor-online-installer-v1.2.0.tgz

(2)解压

$ tar zxf harbor-online-installer-v1.2.0.tgz  -C /usr/local/

(3)修改配置文件

$ cd /usr/local/harbor/
$ vim /usr/local/harbor/harbor.cfg
修改hostname = harbor (启动harbor为主机名)	(不修改会报错)

(4)执行安装

$ ./install.sh

安装成功

如果有非Up状态,先看日志:

# ls /var/log/harbor/

adminserver.log jobservice.log mysql.log proxy.log redis.log registry.log ui.log

HTTPS方式部署:

如果想以https加密方式提供服务可以参考这个免费的视频教程:https://ke.qq.com/course/311382
或者参考官方文档:https://github.com/vmware/harbor/blob/master/docs/configure_https.md

4、登录Web页面

浏览器输入:http://10.206.240.188

账号:admin

密码:Harbor12345

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lsX9kLRe-1619060152829)(C:\Users\lenovo\AppData\Local\Temp\1594031247107.png)]

这里有4个项目,library是默认自带的,通常用这个存储一些公共的镜像,这个项目下镜像谁都可以pull,但不能push,push需要先登录。其他3个项目是我自己创建的,请忽略。

5、library项目赋予新用户push权限

先创建一个用户:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mliw1yos-1619060152831)(C:\Users\lenovo\AppData\Local\Temp\1594031259931.png)]

进入library项目,将用户加入这个成员:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y4dIrr1t-1619060152834)(C:\Users\lenovo\AppData\Local\Temp\1594031271709.png)]

这样lizhenliang用户就具备了对这个library项目的push权限。
注:创建新项目赋予用户权限同等方式。

7、上传镜像

接下来将刚才构建的镜像推送到Harbor仓库,先看看我们要推送的镜像:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R7C2u1ja-1619060152835)(C:\Users\lenovo\AppData\Local\Temp\1594031284219.png)]

在推送之前,需要注意第一列,这个完整格式是:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EPwpBwwy-1619060152837)(C:\Users\lenovo\AppData\Local\Temp\1594031297584.png)]

如果镜像只放在本地存储REPOSITORY写什么都可以,但推送到镜像仓库就必须指定仓库中心地址。

所以,先打重命名REPOSITORY,其实就是引用源镜像标记了一个目标镜像:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WFNeAMkt-1619060152839)(C:\Users\lenovo\AppData\Local\Temp\1594031308267.png)]

访问拒绝,刚说过,push需先登录:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qijo4FpA-1619060152841)(C:\Users\lenovo\AppData\Local\Temp\1594031320018.png)]

8、下载镜像

其他Docker主机怎么下载刚推送的镜像呢?
由于我们搭建的Harbor是以HTTP提供服务的,而Docker CLI默认以HTTPS 访问仓库,所以要先配置可信任,否则pull镜像仓库失败。如果是HTTPS提供服务就不用配置这一步了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8b4YinhY-1619060152842)(C:\Users\lenovo\AppData\Local\Temp\1594031330143.png)]

pull的地址跟push时是一样的。

我自己安装时,如果使用离线安装,则发现安装后 harbor-db  无法启动,始终是restarting状态,
解决办法,

使用在线安装(也就是本文上面的安装方法),然后用下面的方法配置https请求证书,然后启动便可以了
下面出现的harbor.yml可能在新版本中没有,其实就是对应了新版本的harbor.cfg

docker login xxx  docker push xxxx  命令登录harbor目前方法需要在登录及机子上的docker配置文件里加上将harbor的地址配置成私服地址 

重新安装并配置https

openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.182.240" \
 -key ca.key \
 -out ca.crt
上一步如果报错->  Can't load /root/.rnd into RNG
解决办法:
cd /root
openssl rand -writerand .md
openssl genrsa -out 192.168.182.240.key 4096
openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.182.240" \
    -key 192.168.182.240.key \
    -out 192.168.182.240.csr
第一种:域名方式:
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
EOF

第二种:IP方式

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:192.168.182.240
EOF
openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in 192.168.182.240.csr \
    -out 192.168.182.240.crt
mkdir -p /data/cert

cp 192.168.182.240.crt /data/cert/
cp 192.168.182.240.key /data/cert/
openssl x509 -inform PEM -in 192.168.182.240.crt -out 192.168.182.240.cert
cp 192.168.182.240.cert /etc/docker/certs.d/192.168.182.240/
cp 192.168.182.240.key /etc/docker/certs.d/192.168.182.240/
cp ca.crt /etc/docker/certs.d/192.168.182.240/
vi harbor.yml

替换
 certificate: /your/certificate/path
  private_key: /your/private/key/path

/data/cert/192.168.182.240.crt
/data/cert/192.168.182.240.key

由于此时访问会出现不安全的提示,可以进行以下配置

Ubuntu:

cp yourdomain.com.crt /usr/local/share/ca-certificates/yourdomain.com.crt 
update-ca-certificates
Red Hat (CentOS etc):

cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/yourdomain.com.crt
update-ca-trust

搭建nfs服务器

yum install -y nfs-common nfs-utils rpcbind


mkdir /nfsdata && chmod 777 /nfsdata

vim /etc/exports

/nfsdata 192.168.181.0/24(rw,sync) 

启动
systemctl start rpcbind && systemctl start nfs

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wlngcDTO-1619060152844)(C:\Users\lenovo\AppData\Local\Temp\1596592710669.png)]

mvn install:install-file -Dfile=D:\temp\AuthenticationClient-1.0.0.jar -DgroupId=com.mx -DartifactId=AuthenticationClient -Dversion=1.0.0 -Dpackaging=jar  

mvn install:install-file -Dfile=D:\temp\AuthenticationCommon-1.0.0.jar -DgroupId=com.mx -DartifactId=AuthenticationCommon -Dversion=1.0.0 -Dpackaging=jar  

mvn install:install-file -Dfile=D:\temp\siemens-xserver-client-1.1.4.jar -DgroupId=com.mx -DartifactId=siemens-xserver-client -Dversion=1.1.4  -Dpackaging=jar  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值