Linux之Docker(五)搭建registry私有仓库、设置加密以及认证、为私有仓库添加web界面

概念讲解

1.仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool等,可以提供大陆用户更稳定快速的访问。
2.当然,用户也可以在本地网络内创建一个私有仓库。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
3.私有仓库的优势:
(1)有时候使用Docker Hub这样的公共仓库可能不方便,这种情况下用户可以使用registry创建一个本地仓库供私人使用,
(2)使用私有仓库可以节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下载,只需要从私有仓库中下载即可。而且提供镜像资源利用,针对于公司内部使用的镜像,推送到本地的私有仓库中,以供公司内部相关人员使用。
(3)Docker官方提供的工具docker-registry可以用于构建私有的镜像仓库。

实验一:搭建私有仓库

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

上传镜像到本地

[root@docker1 ~]# docker load -i registry2.tar 
[root@docker1 ~]# docker run -d --name regs -p 5000:5000 -v /opt/registry:/var/lib/registry registry:2
[root@docker1 ~]# netstat -antlp    #查看5000端口是否打开
[root@docker1 ~]# docker tag rhel7:Bngx localhost:5000/nginx    #localhost:5000 表示Registry 的地址和端口
[root@docker1 ~]# docker push localhost:5000/nginx     #将本地镜像上传到本地仓库
[root@docker1 ~]# curl localhost:5000/v2/_catalog

在这里插入图片描述
在这里插入图片描述
下载镜像到本地

[root@docker1 ~]# docker rmi localhost:5000/nginx:latest 
[root@docker1 ~]# docker pull localhost:5000/nginx

Linux之Docker(五)搭建registry私有仓库、设置加密以及认证、为私有仓库添加web界面_第1张图片
查看/opt/registry目录下仓库的镜像数据

 /opt/registry/docker/registry/v2/repositories    #可在此目录中查看上传的镜像
    [root@docker1 ~]# yum install -y tree
    [root@docker1 ~]# tree /opt/registry/docker/

Linux之Docker(五)搭建registry私有仓库、设置加密以及认证、为私有仓库添加web界面_第2张图片

实验二:设置加密功能

任何人都可以访问私有仓库,这样不安全,下来我们要增加库的安全性:

1.创建certs证书并生成服务器私钥

[root@docker1 ~]# mkdir certs
[root@docker1 ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout 
certs/westos.org.key -x509 -days 365 -out certs/westos.org.crt
~~~~~~~~
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Shaanxi
Locality Name (eg, city) [Default City]:Xi'an
Organization Name (eg, company) [Default Company Ltd]:westos
Organizational Unit Name (eg, section) []:Linux
Common Name (eg, your name or your server's hostname) []:westos.org
Email Address []:[email protected]

生成了两个文件(公钥和私钥)
在这里插入图片描述
2.添加解析:将westos.org 与server1匹配

[root@docker1 ~]# vim /etc/hosts

Linux之Docker(五)搭建registry私有仓库、设置加密以及认证、为私有仓库添加web界面_第3张图片

3.启动容器并查看容器的状态以及端口号

[root@docker1 ~]# 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 registry:2
参数说明:
-v 挂载的不是仓库的目录,而是本机的certs 
–restart:设置容器重启策略。  
-e表示编辑 
-e REGISTRY_HTTP_ADDR:设置仓库主机地址格式。
#指定证书,可以在容器内直接调用
-e REGISTRY_HTTP_TLS_CERTIFICATE:设置环境变量告诉容器证书的位置。
-e REGISTRY_HTTP_TLS_KEY:设置环境变量告诉容器私钥的位置。
-p:将容器的 443 端口映射到Host主机的 443 端口

[root@docker1 ~]# netstat -antlp

4.将certs证书放到新建的docker数据目录中

[root@docker1 ~]# cd /etc/docker/
[root@docker1 docker]# ls
key.json
[root@docker1 docker]# mkdir -p certs.d/westos.org
[root@docker1 docker]# cd certs.d/westos.org
[root@docker1 westos.org]# cp ~/certs/westos.org.crt ca.crt
[root@docker1 westos.org]# ls
ca.crt

5.修改标签,上传镜像

[root@docker1 westos.org]# docker tag game2048:latest westos.org/game
[root@docker1 westos.org]# docker push westos.org/game

6.在sever2端安装docker

[root@docker2 ~]# yum install -y docker-ce 
[root@docker2 ~]# systemctl start docker
[root@docker2 ~]# systemctl enable docker
[root@docker2 ~]# vim /etc/hosts

Linux之Docker(五)搭建registry私有仓库、设置加密以及认证、为私有仓库添加web界面_第4张图片
此时没有证书无法获得镜像
在这里插入图片描述

[root@docker2 ~]# cd /etc/docker/
[root@docker2 docker]# ls
key.json
[root@docker2 docker]# mkdir certs.d/westos.org -p
[root@docker2 docker]# cd certs.d/westos.org/
[root@docker2 westos.org]# scp root@docker1:/etc/docker/certs.d/westos.org/ca.crt .

此时获取镜像成功
Linux之Docker(五)搭建registry私有仓库、设置加密以及认证、为私有仓库添加web界面_第5张图片
==实现的结果:服务端可以上传,下载镜像,客户端如果有证书,可以下载镜像,也可以上传镜像

实验三:通过基本身份验证实现私有仓库registry访问控制

因为之前生成过服务器私钥,所以此处不需要再生成

如果想要控制registry的使用权限,使其只有在登录用户名和密码之后才能使用的话
还需要做额外的设置,registry的用户名密码文件可以通过htpasswd来生成

1.创建一个auth目录(放docker用户以及密码) # 可做多个,追加即可。

[root@docker1 ~]# mkdir auth
[root@docker1 ~]# docker run --rm --entrypoint htpasswd registry:2 -Bbn jingjing westos > auth/htpasswd
[root@docker1 ~]# docker run --rm --entrypoint htpasswd registry:2 -Bbn chouchou redhat >> auth/htpasswd
参数说明:
–entrypoint string:覆盖镜像默认的ENTRYPOINT,之前我们说过,ENTRYPOINT是不可以被覆盖的,如果实在要覆盖需要使用此参数
-B:强制密码加密
-b:使用命令行中的密码而不是提示输入密码
-n:不更新加密文件,只将加密后的用户名密码显示在屏幕上

在这里插入图片描述
2.启动容器并查看容器的状态以及端口号

[root@docker1 ~]# 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 "$(pwd)"/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry:2

[root@docker1 ~]# netstat -antlp

3.未登陆无法上传:
Linux之Docker(五)搭建registry私有仓库、设置加密以及认证、为私有仓库添加web界面_第6张图片
4.登陆后就可上传
Linux之Docker(五)搭建registry私有仓库、设置加密以及认证、为私有仓库添加web界面_第7张图片注意:如果想要清理登陆信息
删除/root/.docker/config.json,可重新登陆。
Linux之Docker(五)搭建registry私有仓库、设置加密以及认证、为私有仓库添加web界面_第8张图片
5.server2上认证和登陆都要做哦!(上一个实验已做过加密)

Linux之Docker(五)搭建registry私有仓库、设置加密以及认证、为私有仓库添加web界面_第9张图片

实验四:为私有仓库添加web界面

[root@docker1 ~]# docker load -i docker-registry-web.tar  
注意:下面容器运行的路径不要进错了
[root@docker1 ~]# 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 -v "$(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
[root@docker1 ~]# netstat -antlp
[root@docker1 ~]# cat .docker/config.json      #查看auth,下面需要用到
[root@docker1 ~]# docker run -it -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="amluZ2ppbmc6d2VzdG9z" -e REGISTRY_NAME=westos.org -e REGISTRY_READONLY=false docker-registry-web

在浏览器中输入172.25.7.1:8080
Linux之Docker(五)搭建registry私有仓库、设置加密以及认证、为私有仓库添加web界面_第10张图片
删除镜像:
Linux之Docker(五)搭建registry私有仓库、设置加密以及认证、为私有仓库添加web界面_第11张图片
Linux之Docker(五)搭建registry私有仓库、设置加密以及认证、为私有仓库添加web界面_第12张图片

你可能感兴趣的:(原创)