Docker 3 (本地仓库、harbor仓库搭建)

本文详细介绍了如何搭建和管理Docker私有仓库,包括Docker Registry的原理和本地仓库搭建,以及如何实现加密认证。此外,还探讨了Harbor的安装配置,添加默认仓库路径,漏洞扫描和内容信任功能,为企业级Docker镜像管理提供了实用方案。
摘要由CSDN通过智能技术生成

一、Docker registry 仓库

Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器 (Register)来保存多个仓库,每个仓库又可以包含多个具备不同 tag的镜像。 Docker运行中使用的默认仓库是 Docker Hub 公共仓库。
在这里插入图片描述
1、docker hub是docker公司维护的公共仓库,用户可以免费使用,也可以购买私有仓库。有时候使用 Docker Hub 这样的公共仓库可能不方便,例如:需要internet连接、速度慢 ,所有人都可以访问,由于安全原因企业不允许将镜像放到外网。
2、docker公司已经将registry开源,我们可以快速构建企业私有仓库,用户可以创建一个本地仓库供私人使用。docker-registry 是官方提供的工具,可以用于构建私有的镜像仓库。

1.Registry工作原理

一次docker pull 或 push背后的关联:index服务主要提供镜像索引以及用户认证的功能。当下载一个镜像的时候,首先会去index服务上做认证,然后查找镜像所在的registry的地址并放回给 docker客户端,docker客户端再从registry下载镜像,在下载过程中 registry会去index校验客户端token的合法性,不同镜像可以保存在不同的registry服务上, 其索引信息都放在index服务上。
在这里插入图片描述
Docker Registry有三个角色,分别是index、registry和registry client。
1、index : 负责并维护有关用户帐户、镜像的校验以及公共命名空间的信息。 Web UI 、元数据存储 、认证服务 、符号化;
2、registry :是镜像和图表的仓库,它不具有本地数据库以及不提供用户认证,通过 Index Auth service的Token的方式进行认证。
3、Registry Client :Docker充当registry客户端来维护推送和拉取,以及客户端的授权。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.本地仓库搭建

把之前实验生成的镜像rhel7:v4保存为本地包;
docker image prune :用以清理不再使用的docker镜像
请添加图片描述
导入镜像
请添加图片描述
镜像改名:标记原有镜像rhel7:v4 为新镜像demo:latest,并删除rhel7:v4不影响demo的使用
请添加图片描述
将真机的registry2.tar传给server1
请添加图片描述
导入镜像, 将registry:2镜像打标签为registry:latest
请添加图片描述
查看逻辑卷,并清除
请添加图片描述
创建一个新的容器,-v表示将本地 /opt/registry挂载到容器中的/var/lib/registry目录, -p:端口映射,主机(宿主)5000端口:容器5000端口;
查看端口5000打开
请添加图片描述
查看本地映射的仓库路径
请添加图片描述
将容器中的game2048镜像标记到本地仓库中,本地镜像在命名时需要加上仓库的ip和端口;
上传镜像到本地仓库,上传成功后本地路径中也产生了文件
请添加图片描述
删除容器之后,重新创建,之前的内容依然存在
请添加图片描述
测试可以成功访问
请添加图片描述

3.本地私有仓库加密认证

首先创建加密认证的密钥,并创建一个目录certs用来保存密钥;
为Docker仓库添加证书加密功能,生成自签名证书(域名reg.westos.org要求在主机上有解析),证书文件westos.org.crt,采用自动生成秘钥的方式,指定生成秘钥长度为4096,秘钥文件westos.org.key.

openssl req命令主要的功能有,生成证书请求文件, 查看验证证书请求文件,还有就是生成自签名证书。
主要命令选项:
-new :说明生成证书请求文件
-x509 :说明生成自签名证书
-key :指定已有的秘钥文件生成秘钥请求,只与生成证书请求选项-new配合。
-newkey :-newkey是与-key互斥的,-newkey是指在生成证书请求或者自签名证书的时候自动生成密钥,
-out :-out 指定生成的证书请求或者自签名证书名称
-nodes :如果指定-newkey自动生成秘钥,那么-nodes选项说明生成的秘钥不需要加密

请添加图片描述
成功生成
请添加图片描述
重建registry容器
请添加图片描述
在/etc/hosts添加域名解析;
标记nginx镜像归类到本地reg.westos.org仓库中,然后上传镜像到私有仓库,此时会报错,
由于证书是被不知名的ca签名的(自签名的证书),因此取不到认证
请添加图片描述
由于我们使用的是自签名证书,客户端要与私有仓库通信,必须在/etc/docker/下建立目录:certs.d/reg.westos.org(域名目录),然后把私有仓库的证书拷贝到这个目录
请添加图片描述
上传镜像成功;
测试查看上传的内容:curl是用在命令行和脚本进行传输数据到服务器或者从服务器传输数据的工具,-k:允许curl使用非安全的ssl连接并且传输数据(证书不受信)
请添加图片描述
为Docker仓库添加用户认证功能,创建认证目录,安装认证的软件(此工具可以生成访问密码)
请添加图片描述
为admin用户和lr用户添加认证信息和密码(第一次加参数c,之后不加,否则会覆盖原来)
请添加图片描述
删除之前的容器并重建,添加用户认证及密钥模块;
查看日志
请添加图片描述
请添加图片描述
测试在server1上传镜像,仓库认证后,上传和下载前都需要登陆,如果不登陆,会报错,
请添加图片描述
登录之后,再次上传镜像,成功
请添加图片描述
此路径下 /root/.docker/config.json可以查看认证
请添加图片描述
退出登陆后,就查看不到认证信息了
请添加图片描述

将server1的docker软件仓库配置文件传给server2,用于测试能否拉取镜像;
server2安装docker
请添加图片描述
使得服务开机自启
请添加图片描述
在server2上添加本地解析
请添加图片描述
将server1前面生成的证书发送给server2,不然拉取镜像就会报错
请添加图片描述
server2登陆后拉取成功
请添加图片描述

二、Docker harbor 仓库

Harbor简介
1、虽然Docker官方提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。
2、Harbor是由VMware公司开源的企业级的Docker Registry管理项目,相比docker官方拥有更丰富的权限权利和完善的架构设计,适用大规模docker集群部署提供仓库服务。
3、它主要提供 Docker Registry 管理界面UI,可基于角色访问控制,镜像复制, AD/LDAP 集成,日志审核等功能,完全的支持中文
先将之前的仓库删除掉(不然会冲突)
请添加图片描述
harbor仓库提供在线和离线两种安装工具,这里使用离线安装(要求先安装好docker),另外还需要docker-compose-Linux(用来管理多个容器,形成一个完整独立的服务)和harbor-offline-installer

1.harbor安装配置

真机将Harbor安装包发送给server1
请添加图片描述
解压
请添加图片描述
编辑harbor.yaml配置文件
请添加图片描述
拷贝证书目录到/data目录下
请添加图片描述
安装baobor时报错,因为还需要docker-compose
请添加图片描述
将docker-compose二进制文件发送给server1
请添加图片描述
因为docker-compose安装包是二进制文件,所以放到/usr/local/bin下,赋予执行权限
请添加图片描述
再次安装harbor
请添加图片描述
安装成功
请添加图片描述
开启docker-compose
请添加图片描述
查看开启状态
请添加图片描述
查看日志
请添加图片描述
在真机/etc/hosts加上该主机域名解析
请添加图片描述
在浏览器输入reg.westos.org访问,由于是自签名证书,没有经过可信第三方,所以会显示不安全的连接,此时手动信任即可,点击advanced;
输入账户admin和设定的密码westos(配置文件中设置的),登录成功
请添加图片描述
在这里插入图片描述

server1登陆reg.westos.org
请添加图片描述
修改nginx镜像标签到reg.westos.org下
请添加图片描述
上传镜像
请添加图片描述
到网页上查看上传成功
请添加图片描述

2.添加默认仓库路径

在远端拉取镜像时,可以直接指定我们的私有仓库进行下载;
docker安装后默认没有daemon.json这个配置文件,需要进行手动创建,写入 registry 私有仓库地址
请添加图片描述
请添加图片描述
server1将daemon.json传给server2
请添加图片描述
重新加载服务后,可以查看到新添加的拉取镜像的仓库路径
请添加图片描述
请添加图片描述
测试拉取ngnix
请添加图片描述
网页查看下载和上传日志
请添加图片描述
删掉刚才拉取的nginx镜像
请添加图片描述
直接运行容器时,第一步是pull拉取镜像,说明会自动拉取没有的镜像
请添加图片描述

3.漏洞扫描

接下来,对项目进行管理,添加新的项目westos(私有)
请添加图片描述
请添加图片描述
添加用户
请添加图片描述
添加用户到项目成员
请添加图片描述
上传镜像到westos项目中
请添加图片描述
上传成功
请添加图片描述
server2中测试拉取(用刚刚添加到westos项目的成员登录)
请添加图片描述
web界面查看日志
请添加图片描述
docker logout reg.westos.org :登出
docker-compose down:关闭并清理配置信息;
./prepare :清理缓存
请添加图片描述
./install.sh --with-notary --with-clair --with-chartmuseum:安装时添加漏洞扫描,镜像信任等功能;
–with-notary: 镜像信任,Notary是Docker镜像的签名工具,用来保证镜像在pull,push和传输过程中的一致性和完整性,避免中间人攻击,避免非法的镜像更新和运行。镜像信任功能能够保证镜像的安全,只有打了信任标签的镜像才能被拉取;
–with-clair: 镜像安全扫描,Harbor与Clair集成,添加漏洞扫描功能。 默认在运行harbor时漏洞扫描是没有开启的,需要重新开启并添加参数;
–with-chartmuseum: 支持chart仓库服务
请添加图片描述
请添加图片描述
可以看到漏洞扫描功能已添加
请添加图片描述
查看nginx镜像,显示未扫描
请添加图片描述
手动扫描
请添加图片描述
扫描结束,显示没有漏洞
请添加图片描述
请添加图片描述
也可以使用自动扫描,之后新添加的镜像就可以自动扫描
请添加图片描述
可以看到上传的镜像已经被扫描
请添加图片描述

4.内容信任

在web中开启内容
请添加图片描述
启用docker内容信任
请添加图片描述
测试上传镜像,显示报错,因为要部署根证书
请添加图片描述
切到隐藏文件夹下,创建根证书目录
请添加图片描述
再次进行镜像上传,需要输入根密码和仓库密码
请添加图片描述
可以看到签名成功并上传
请添加图片描述
当只更改镜像的名字后,重新上传镜像v1;
此时只需要更改仓库的key
请添加图片描述
签名成功并上传
请添加图片描述
打开项目westos的内容信任之后
请添加图片描述
server2上拉取未授权的镜像会报错
请添加图片描述
关闭信任之后
请添加图片描述
成功拉取到westos项目的镜像
请添加图片描述
也可以让server1向私有仓库中重新上传该镜像,并签名,此时server2也可以拉取该镜像了
在这里插入图片描述
在server1上:修改:export DOCKER_CONTENT_TRUST=0(关闭内容信任功能),那么在上传镜像的时候就不需要再输入认证了
请添加图片描述
请添加图片描述
最后进行优化容器,扫描会使得占用的空间越来越大,所以重新修改一下选项
请添加图片描述
安装时去掉内容信任和镜像扫描功能
请添加图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值