Docker创建镜像的私有仓库,设置加密认证,并且为私有仓库添加web界面

1.什么是Docker 仓库?
仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。
实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载
国内的公开仓库包括 Docker Pool等,可以提供大陆用户更稳定快速的访问
当然,用户也可以在本地网络内创建一个私有仓库
当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库
这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了

2. 私有仓库registry的优势
有时候使用Docker Hub这样的公共仓库可能不方便,这种情况下用户可以使用registry创建一个本地仓库供私人使用
这点跟Maven的管理类似
使用私有仓库有许多优点

1)节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下载,只需要从私有仓库中下载即可;
2)提供镜像资源利用,针对于公司内部使用的镜像,推送到本地的私有仓库中,以供公司内部相关人员使用。

目前Docker Registry已经升级到了v2,最新版的Docker已不再支持v1。
Registry v2使用Go语言编写,在性能和安全性上做了很多优化,重新设计了镜像的存储格式。
如果需要安装registry v2,只需下载registry:2.2即可。
Docker官方提供的工具docker-registry可以用于构建私有的镜像仓库。

3.Registry的工作原理
在这里插入图片描述
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客户端来维护推送和拉取,以及客户端的授权。

4.创建私有仓库以及上传本地镜像到私有仓库当中

Docker 官方已经把仓库封装为镜像,直接通过启动容器就可以完成部署仓库,导入registry镜像

(1)从真机给server1发送一个私有仓库的镜像
在这里插入图片描述
(2)导入镜像,并且查看
在这里插入图片描述
在这里插入图片描述
(3)基于镜像运行registry容器
在这里插入图片描述
(4)查看运行情况
在这里插入图片描述
(5)将本地镜像上传至私有仓库
本地镜像在命名时需要加上仓库的ip和端口
在这里插入图片描述
(6)尝试拉取刚刚上传的镜像
拉取前先把本地创建的镜像删掉
在这里插入图片描述
拉取镜像
在这里插入图片描述
(7)安装tree,查看/opt/registry/目录下的镜像数据
我们可以从中看到nginx的镜像数据,同时可以明显看出镜像是分层的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.给私有仓库添加证书
新加一台主机server2,尝试去访问上面我们建好的私有仓库里面的镜像,看看能否成功
在这里插入图片描述
这样的库任何人都可以访问,这样不安全,下来我们要增加库的安全性

(2)创建服务端key以及证书
给私有仓库生成证书和key
(1)首先,先将之前的registry删除,并生成及私密证书与钥匙
docker rm -f registry #删除容器

在这里插入图片描述
[root@server1 ~]#cd /etc/docker
[root@server1 ~]# ls
[root@server1 docker]#
cd certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key -x509 -days 365 -out certs/westos.org.crt
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)添加本地解析
在这里插入图片描述
在这里插入图片描述
(4)创建重新创建一个加密的仓库
删除之前的registry仓库
(5)再次构建容器(私有仓库)

[root@server1 ~]# netstat -antlp | grep :443 ##先查看本机的443端口是否被占用
[root@server1 docker]# pwd
/etc/docker
[root@server1 docker]# docker run -d \

–restart=always
–name registry
-v “$(pwd)”/certs:/certs
-e REGISTRY_HTTP_ADDR=0.0.0.0:443
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt
-e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key
-p 443:443
-v /opt/registry:/var/lib/registry registry:2.3.1

在这里插入图片描述
在这里插入图片描述
(6)创建证书存放目录,并复制证书
[root@server1 docker]# pwd
/etc/docker
[root@server1 docker]#
[root@server1 docker]# mkdir certs.d
[root@server1 docker]# cd certs.d/
[root@server1 certs.d]# mkdir westos.org
[root@server1 certs.d]# cd westos.org/
[root@server1 westos.org]# ls
[root@server1 westos.org]# cp /etc/docker/certs/westos.org.crt ca.crt
[root@server1 westos.org]# ls
ca.crt
在这里插入图片描述
(7)再次把本地镜像上传到刚刚建立的私有仓库里面
在这里插入图片描述
修改tag
在这里插入图片描述
push上传
在这里插入图片描述
(8)尝试用另一台主机server2从server1的私有仓库上面拉取镜像
先配置一下server2
server2安装 docker,然后开启docker,并添加解析
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在server2上面创建同样的证书目录,并将服务端证书传到此位置
[root@server2 ~]# cd /etc/docker/
[root@server2 docker]# mkdir certs.d
[root@server2 docker]# cd certs.d/
[root@server2 certs.d]# mkdir westos.org
[root@server2 certs.d]# cd westos.org/
[root@server2 westos.org]# pwd
/etc/docker/certs.d/westos.org
[root@server2 westos.org]#
[root@server2 westos.org]# scp server1:/etc/docker/certs.d/westos.org/ca.crt .
The authenticity of host ‘server1 (172.25.6.1)’ can’t be established.
ECDSA key fingerprint is 7a:fa:3a:af:79:70:19:7a:2d:c7:64:0c:e5:bb:7f:96.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘server1,172.25.6.1’ (ECDSA) to the list of known hosts.
root@server1’s password:
ca.crt 100% 2098 2.1KB/s 00:00
[root@server2 westos.org]#
[root@server2 westos.org]# ls
ca.crt
在这里插入图片描述
拉取测试 拉取成功
在这里插入图片描述
6.配置用户权限 ,给证书加密
如果想要控制registry的使用权限,使其只有在登录用户名和密码之后才能使用的话
还需要做额外的设置,registry的用户名密码文件可以通过htpasswd来生成
(1)在服务端server1设置用户密码并查看
[root@server1 ~]# cd /etc/docker/
[root@server1 docker]# mkdir auth
[root@server1 docker]# ls
[root@server1 docker]# docker run --entrypoint htpasswd registry:2.3.1 -Bbn meng westos > auth/htpasswd
[root@server1 docker]# docker run --rm --entrypoint htpasswd registry:2.3.1 -Bbn admin westos >> auth/htpasswd
[root@server1 docker]# cat auth/htpasswd
在这里插入图片描述
(2)再次创建仓库
同理,先删除之前的
在这里插入图片描述
root@foundation19 ~]# docker stop registry
registry
[root@foundation19 ~]# docker rm -f registry ##删除之前的registry容器
registry
[root@server1 docker]# pwd
/etc/docker
[root@server1 docker]# docker run -d \

–restart=always
–name registry
-v “KaTeX parse error: Undefined control sequence: \ at position 21: …"/certs:/certs \̲ ̲-e REGISTRY_HTT…(pwd)”/auth:/auth
-e “REGISTRY_AUTH=htpasswd”
-e “REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm”
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry:2.3.1
fe063f60d71fdba2497fa0facf8316bb364108e572d767053ddfe6ac72efec8d

在这里插入图片描述
在这里插入图片描述
(3)准备上传本地镜像到私有仓库当中,先换标签
在这里插入图片描述
(4)查看一下443端口是否开启
在这里插入图片描述
(5)上传本地镜像到私有仓库当中
此时上传显示没有基础认证,上传失败
在这里插入图片描述
(6)登录加密仓库,并输入用户名和密码进行认证
在这里插入图片描述
(7)在文件config.json 中可以看到记录的认证(认证一次,永久保存)
在这里插入图片描述(8)此时再次上传就成功了
在这里插入图片描述
7.给私有库添加WebUI界面
(1)先从真机给server1发送一个web镜像
在这里插入图片描述
在这里插入图片描述
(3)重新创建仓库(多添加了一个删除参数,也就是说我们添加了可以在图形界面中删除镜像的功能)
先删除之前的私有仓库
在这里插入图片描述
[root@server1 docker]# pwd
/etc/docker
[root@server1 docker]# docker run -d \

–restart=always
–name registry
-v “KaTeX parse error: Undefined control sequence: \ at position 21: …"/certs:/certs \̲ ̲-e REGISTRY_HTT…(pwd)”/auth:/auth
-e “REGISTRY_AUTH=htpasswd”
-e “REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm”
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
-e REGISTRY_STORAGE_DELETE_ENABLED=true registry:2.3.1 ##在这里加上了删除的操作

在这里插入图片描述
(4)运行web界面
注意:auth等于刚才登陆之后生成的认证信息
改tag
在这里插入图片描述
查看auth
在这里插入图片描述
docker run -d -p 8080:8080 --name registry-web --link registry:westos.org -e REGISTRY_URL=https://westos.org/v2 -e REGISTRY_TRUST_ANY_SSL=true -e REGISTRY_BASIC_AUTH=“eXR5Ondlc3Rvcw==” -e REGISTRY_NAME=westos.org -e REGISTRY_READONLY=false hyper/docker-registry-web
cd739cb6d4fc859684106fd69980431c0c8eff57557f6882001d3baba8c8f765
在这里插入图片描述
(3)浏览器中访问
http://172.25.15.1:8080
在这里插入图片描述
在这里插入图片描述
已删除2048镜像
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值