Linux下docker私有仓库registry之实现加密仓库的访问控制(三)(docker版本:18.06.1-ce)

续我的上篇博文:https://mp.csdn.net/postedit/88696003

 

registry私有仓库实现加密仓库的访问控制(在上篇博文的基础上,也就是证书已经生成,server和物理机的解析已经做好,物理机已经得到证书)


实现访问限制的最简单方法是通过基本身份验证(这非常类似于其他Web服务器的基本身份验证机制)。

 

配置服务端(server1):

 

1、创建certs证书,生成服务器私钥:(因为是接着上篇博文,上篇博文已经做过)

 

2、生成鉴权密码文件

 

[root@server1 ~]# cd /mnt/docker/
[root@server1 docker]# mkdir auth    #在哪个目录下创建auth都可以,该目录的名字随意给
[root@server1 docker]# docker run --entrypoint htpasswd registry:2.3.1 -Bbn xjj xjj > auth/htpasswd   #用户xjj(第一个),密码xjj(第二个)。必须在auth目录的上一层目录执行(由命令决定的)。其中auth/htpasswd名字可以随便给,但是--entrypoint后面必须是htpasswd。这里>表示重定向,如果还要添加,需要用>>,否则会覆盖之前的。

##参数说明:
--entrypoint string:覆盖镜像默认的ENTRYPOINT,之前我们说过,ENTRYPOINT是不可以被覆盖的,如果实在要覆盖需要使用此参数
-B:强制密码加密
-b:使用命令行中的密码而不是提示输入密码
-n:不更新加密文件,只将加密后的用户名密码显示在屏幕上
  • 查看生成的认证密码

  • 查看生成的容器(没有在运行)

 

补充:

###从上面的图片,我们可以看到,当认证密码生成以后,会生成一个没有运行的容器,这个容器是没有任何作用的。那么可以使用下面的方法,使得容器生成认证密码之后,自动删除。
[root@server1 docker]# docker run --rm --entrypoint htpasswd registry:2.3.1 -Bbn admin xjj >> auth/htpsswd   #用户admin,密码xjj。--rm指定容器运行之后,自动删除。这里使用的是>>表示追加。如果使用>,那么将把原来生成的用户名(xjj)和密码(xjj)覆盖掉。如果是第一次生成认证密码,那么可以使用>。
  • 查看生成的认证密码

  • 查看容器,看到没有生成相应的容器。

 

3、删除上篇博文创建的仓库registry1(映射到本地主机的443端口),并删除之前存放registry私有仓库的镜像数据的目录(/media/registry)下的数据,防止冲突。

 

[root@server1 auth]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
ea3602dd0021        registry:2.3.1      "/bin/registry /etc/…"   13 hours ago        Up 24 minutes       0.0.0.0:443->443/tcp, 5000/tcp   registry1
[root@server1 auth]# docker rm -f registry1

[root@server1 auth]# cd /media/registry/
[root@server1 registry]# ls
docker
[root@server1 registry]# rm -rf docker/
[root@server1 registry]# ls

 

4、启动registry1

 

[root@server1 registry]# cd /mnt/docker
[root@server1 docker]# docker run -d \   #必须在certs目录的上一层目录执行(由命令决定的)
> --restart=always \
> --name registry1 \
> -v "$(pwd)"/certs:/certs \
> -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
> -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/xin.org.crt \
> -e REGISTRY_HTTP_TLS_KEY=/certs/xin.org.key \
> -p 443:443 \
> -v /media/registry:/var/lib/registry \
> -v "$(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

#参数解释:
REGISTRY_AUTH:验证方式,固定写法
REGISTRY_AUTH_HTPASSWD_REALM:验证域名,固定写法
REGISTRY_AUTH_HTPASSWD_PATH:容器中验证文件的路径,要写文件的路径
  • 查看运行的registry1容器

  • 查看443端口(https)

 

5、编写/etc/hosts文件,增加域名解析:(因为是接着上篇博文,上篇博文已经做过)

 

6、用户登录

登录认证成功后,才可进行push等操作

 

[root@server1 docker]# docker login xin.org
Username: xjj   #用户xjj
Password:    #密码xjj
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
  • 登陆成功之后,会生成,相应的认证文件。以保证,下次不用再登录。

 

7、上传xin.org/rhel7:nginx4(上传的镜像随意选,但是/前面必须是前面设定的域名xin.org

 

[root@server1 docker]# docker tag rhel7:nginx4 xin.org/rhel7:nginx4

 

[root@server1 .docker]# docker push xin.org/rhel7:nginx4 
The push refers to repository [xin.org/rhel7]
9fd85e6ca660: Pushed   #显示Pushed表示上传成功
668afdbd4462: Pushed 
nginx4: digest: sha256:96f12a4c433231a0c36d20af593dba0c135fed0aa2d3c180c2c00ac2a9cd5867 size: 739
  • 我们可以看到/media/registry目录下有相应的registry私有仓库的镜像数据(分层存储)

 

客户端测试(物理机):

 

1、在物理机上编写/etc/hosts文件,增加域名解析——(上篇博文已经做过);获取证书——(上篇博文已经做过)。登录进行认证,并进行测试:下载xin.org/rhel7:nignx4

 

下载之前,

1.我们需要先获取registry仓库类的镜像:(值的注意的是:必须在浏览器中进行测试:因为https必须在web界面进行安全认证)

在web界面:User Name:xjj;Password:xjj。

 

2.我们需要获取某个镜像的标签列表:

在web界面进行安全认证之后,得到下面的结果

 

<1>登录进行认证

 

[root@foundation83 kiosk]# docker rmi rhel7:nginx4   #删除上次实验pull的镜像
[root@foundation83 kiosk]# docker login xin.org   #或docker login -u xjj -p xjj 172.25.83.1
Username: xjj   #用户xjj
Password:       #密码:xjj
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

#补充:能够登录xin.org,那么当然也能退出xin.org
命令为:docker logout xin.org   #退出登录之后/root/.docker/config.json文件中也就不再有xin.org的认证记录了。当然那下一次要push或pull镜像的时候,需要重新执行login的操作。
  • 登陆成功之后,会生成,相应的认证文件。以保证,下次不用再登录。

 

<2>下载xin.org/rhel7:nignx4

[root@foundation83 kiosk]# docker pull xin.org/rhel7:nginx4

 

 

##如果看不惯镜像xin.org/rhel7:nginx4这个名字,可以改名字
[root@foundation83 ~]# docker tag xin.org/rhel7:nginx4 rhel7:nginx4
[root@foundation83 ~]# docker rmi xin.org/rhel7:nginx4 

 


服务端可以上传镜像,也可以下载镜像(这里不再演示,通客户端的pull);客户端如果有证书,能够通过认证,当然可以上传镜像(这里不再演示,同服务端的push),也可以下载镜像。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker中,可以通过使用Portus来实现docker私有仓库Registry的可视化。Portus是一个带有UI管理功能的仓库管理软件,它可以与Registry一起使用,提供更方便的图形化用户界面来浏览、检索和管理Docker镜像仓库。通过Portus,用户可以通过浏览器来管理项目和命名空间,进行权限管理,进行镜像的复制和同步,以及记录和追踪所有对镜像仓库的操作,用于审计管理。同时,Portus还支持与企业现有的AD/LDAP进行集成,方便进行鉴权认证管理。总之,使用Portus可以使docker私有仓库Registry的管理更加简单和直观。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Docker仓库之企业级可视化私有仓库Harbor(安装、快速、入门)](https://blog.csdn.net/qq_41417660/article/details/106809535)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [docker私有镜像仓库registry及其可视化系统Portus的搭建【转】](https://blog.csdn.net/weixin_33898876/article/details/85966303)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值