【Docker】Registry搭建私有仓库、证书认证、用户登录认证

一、Docker Registry工作原理

02_Docker Registry角色

Docker Registry有三个角色,分别是index、registry和registry client。

index

  • 负责并维护有关用户帐户、镜像的校验以及公共命名空间的信息。
  • Web UI
  • 元数据存储
  • 认证服务
  • 符号化

registry

  • 是镜像和图表的仓库,它不具有本地数据库以及不提供用户认证,通过Index Auth service的Token的方式进行认证。

Registry Client

  • Docker充当registry客户端来维护推送和拉取,以及客户端的授权。

01_Docker Registry工作原理

工作原理

  • index服务主要提供镜像索引以及用户认证的功能。当下载一个镜像的时候,首先会去index服务上做认证,然后查找镜像所在的registry的地址并放回给docker客户端,docker客户端再从registry下载镜像,在下载过程中registry会去index校验客户端token的合法性,不同镜像可以保存在不同的registry服务上,其索引信息都放在index服务上。

【Docker】Registry搭建私有仓库、证书认证、用户登录认证_第1张图片

  • 用户要获取并下载镜像
    【Docker】Registry搭建私有仓库、证书认证、用户登录认证_第2张图片
  • 用户要推送镜像到registry中

【Docker】Registry搭建私有仓库、证书认证、用户登录认证_第3张图片
用户要从index或registry中删除镜像
【Docker】Registry搭建私有仓库、证书认证、用户登录认证_第4张图片

二、registry搭建私有仓库

01_搭建registry仓库

  • 拉取官方registry镜像
    docker pull registry

在这里插入图片描述

  • 搭建仓库
docker run -d --name registry \ #-d:打入后台
> -p 5000:5000 \ #-p:端口映射
> -v /opt/registry:/var/lib/registry \ #-v:挂载
> registry

【Docker】Registry搭建私有仓库、证书认证、用户登录认证_第5张图片在这里插入图片描述

02_上传镜像并拉取

server1端上传镜像

#创建
docker tag webserver:v1 localhost:5000/webserver:latest
#上传镜像到本地仓库
docker push localhost:5000/webserver
  • 搜索上传本地仓库的镜像
    curl localhost:5000/v2/_catalog
    【Docker】Registry搭建私有仓库、证书认证、用户登录认证_第6张图片
    server2端拉取镜像
  • vim /etc/docker/daemon.json:首先从设置好的私有仓库读取
{
  "insecure-registries" : ["192.168.17.1:5000"]
}
  • systemctl reload docker
  • docker pull 192.168.17.1:5000/webserver:拉取
当不想读取私有仓库时删除此文件,重启!
rm -fr /etc/docker/daemon.json 
systemctl reload docker

三、registry证书认证

01_生成认证证书

  • 制作证书
    mkdir -p certs
    openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key -x509 -days 365 -out certs/westos.org.crt
    【Docker】Registry搭建私有仓库、证书认证、用户登录认证_第7张图片
  • 设置解析
vim /etc/hosts
172.25.2.1    server1 reg.westos.org
  • 复制证书
#创建的目录名称是制作证书时填写的server name
mkdir -p /etc/docker/certs.d/reg.westos.org/
cp certs/westos.org.crt /etc/docker/certs.d/reg.westos.org/ca.crt
  • 搭建仓库
docker run -d --name registry -p 443:443 \ #映射端口
> -v /opt/registry/:/var/lib/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 \ #私钥位置
> registry
  • 上传
    docker tag yakexi007/game2048:latest reg.westos.org/game2048:latest
    docker push reg.westos.org/game2048:latest

  • 搜索上传本地仓库的镜像
    curl -k https://172.25.2.1/v2/_catalog

02_远程测试

server2:172.25.2.2

  • 删除私有仓库读取方法
    rm -fr /etc/docker/daemon.json
    systemctl reload docker
  • 解析
    vim /etc/host
172.25.2.1	server1	reg.westos.org
  • 拷贝证书
    mkdir -p /etc/docker/certs.d/reg.westos.org/
    scp server1:/etc/docker/certs.d/reg.westos.org/ca.crt /etc/docker/certs.d/reg.westos.org/
  • 拉取镜像
    docker pull reg.westos.org/game2048

四、registry用户登录认证

01_htpasswd创建登陆仓库

  • 安装
    yum install -y htpasswd httpd-tools

  • 创建存储目录
    mkdir auth

  • 添加用户
    htpasswd -B -c auth/htpasswd sl
    htpasswd -B auth/htpasswd admin:再次创建用户不加-c

    搭建仓库

docker run -d --name registry -p 443:443 \
> -v /opt/registry/:/var/lib/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 \
> -v "$(pwd)"/auth:/auth \
> -e "REGISTRY_AUTH=htpasswd" \
> -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
> -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
> registry
  • 上传镜像

docker login reg.westos.org登录
【Docker】Registry搭建私有仓库、证书认证、用户登录认证_第8张图片
docker tag busybox:latest reg.westos.org/busybox:latest
docker push reg.westos.org/busybox上传

02_远端测试

server2:172.25.2.2

添加解析
vim /etc/host

172.25.2.1	server1	reg.westos.org

登录
docker login reg.westos.org
【Docker】Registry搭建私有仓库、证书认证、用户登录认证_第9张图片

docker pull reg.westos.org/busybox

你可能感兴趣的:(Docker)