一、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服务上。
- 用户要获取并下载镜像
- 用户要推送镜像到registry中
用户要从index或registry中删除镜像
二、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
02_上传镜像并拉取
server1端上传镜像
#创建
docker tag webserver:v1 localhost:5000/webserver:latest
#上传镜像到本地仓库
docker push localhost:5000/webserver
- 搜索上传本地仓库的镜像
curl localhost:5000/v2/_catalog
- 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
- 设置解析
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 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 pull reg.westos.org/busybox