什么是仓库
Docker仓库是用来包含镜像的位置,Docker提供一个注册服务器(Register)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。
Docker运行中使用的默认仓库是Docker Hub公共仓库。
docker hub是docker公司维护的公共仓库,用户可以免费使用,也可以购买私有仓库。
docker hub公共仓库
首先在https://hub. docker. com/网站注册一个账号
(1)在docker hub上新建一个公共仓库,创建之后可以看到如下公共仓库
(2)登陆
查看信息
(3)将本地镜像上传至私有仓库
(4)docker hub上查看
(5)从私有仓库拉取并运行查看信息
拉取前先把本地创建的镜像删掉
(6)测试
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客户端来维护推送和拉取,以及客户端的授权。
搭建私有仓库
(1)拉取registry
(2)运行容器
运行前删除其他所有的容器
(3)将本地镜像上传至私有仓库
本地镜像在命名时需要加上仓库的ip和端口
(4)尝试拉取刚刚上传的镜像
(5)安装tree,查看目录下的镜像数据
这样的库任何人都可以访问,这样不安全,下来我们要增加库的安全性
给私有仓库添加证书
(1)增加一台虚拟机serve2并配置
yum文件,依赖包,bridge.conf文件
安装docker
使之生效后开启服务
安装bash可以用table补齐
(2)配置完成后在server2拉取
可以看到此时不行,需要https加密!!!
(3)可以明确指出不走加密,不推荐这种
还原
(4)给server1服务端生成证书,添加解析
(5)删除之前的registry仓库,也可以不用删除,起一个别的名字
(6)再次构建容器(私有仓库)
(7)创建证书存放目录,并复制证书
(8)再次把本地镜像上传到刚刚建立的私有仓库里面
(9)用另一台主机server2从server1的私有仓库上面拉取镜像
给server2上传一份证书
拉取
配置用户权限 ,给证书加密
如果想要控制registry的使用权限,使其只有在登录用户名和密码之后才能使用的话
还需要做额外的设置,registry的用户名密码文件可以通过htpasswd来生成
(1)在服务端server1设置用户密码并查看
(2)再次创建仓库
[root@server1 ~]# docker run -d \
> --restart=always \
> --name registry \
> -v "$(pwd)"/certs:/certs \
> -v "$(pwd)"/auth:/auth \
> -v /opt/registry:/var/lib/registry \
> -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 \
> -e "REGISTRY_AUTH=htpasswd" \
> -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
> -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
> -p 443:443 \
> registry
(3)准备上传本地镜像到私有仓库当中,先换标签
(4)登录加密仓库,并输入用户名和密码进行认证
(5)server2上登陆后拉取