Docker仓库

什么是仓库

Docker 仓库是用来包含镜像的位置,Docker提供一个注册服
务器(Register)来保存多个仓库,每个仓库又可以包含多个
具备不同tag的镜像。
Docker运行中使用的默认仓库是 Docker Hub 公共仓库。
在这里插入图片描述

Docker Hub

docker hub是docker公司维护的公共仓库,用户可以免费使用,也可以
购买私有仓库。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Registry工作原理

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
具体的工作流程如下:
用户发送请求到index来下载镜像。
index 响应返回三个相关部分信息:该镜像位于的registry+该镜像包括所有层的校验+以授权目的Token
用户通过响应中返回的Token和registry沟通,registry全权负责镜像,它存储基本的镜像和继承的层。
registry现在要与index证实该token是被授权的。
index会发送“true” 或者 “false”给registry,由此允许用户下载所需要的镜像。
在这里插入图片描述
具体工作流程如下
用户发送带证书请求到index要求分配库名。
在成功认证,命名空间可用以及库名被分配之后。index响应返回临时的token。
镜像连带token,一起被推送到registry中。
registry与index证实token,然后在index验证之后开始读取推送流。
该index然后更新由Docker生成的镜像校验。
在这里插入图片描述
具体工作流程如下:
index接收来自Docker一个删除库的信号。
如果index验证库成功,它将删除该库,并返回一个临时token。
registry现在接收到带有该token的删除信号。
registry与index核实该token,然后删除库以及所有相关信息。
Docker现在通知有关删除的index,然后index移除库的所有记录。

配置镜像加速器

从docker hub上下载镜像的速度太慢,需要配置镜像加速器,这里以阿里云为例:(需要提前注册阿里云帐号)
方法:登陆阿里云,选择弹性计算—>容器镜像服务—>镜像加速器—>获取加速器地址。
配置docker daemon文件,重载docker服务:
在这里插入图片描述
重启服务
在这里插入图片描述
发现拉取镜像快了很多
在这里插入图片描述

搭建私有仓库

docker hub虽然方便,但是还是有限制,需要internet连接,速度慢;所有人都可以访问;由于安全原因企业不允许将镜像放到外网;好消息是docker公司已经将registry开源,我们可以快速构建企业私有仓库。
例如:我们可以在server2主机访问server1的库,这样不安全。

[root@server2 ~]# curl http://172.25.15.1:5000/v2/_catalog
{"repositories":["nginx"]}
[root@server2 ~]# curl http://172.25.15.1:5000/v2/nginx/tags/list
{"name":"nginx","tags":["latest"]}
步骤

下载registry镜像docker pull registry
运行registry容器docker run -d -p 5000:5000 registry:2
上传镜像到本地仓库,本地镜像在命名时需要加上仓库的ip和端口。

docker tag nginx:latest localhost:5000/nginx:latest
docker push localhost:5000/nginx:latest

为Docker仓库添加证书加密功能,生成证书

[root@server1 ~]# mkdir certs
[root@server1 ~]# cd certs/
[root@server1 ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key -x509 -days 365 -out certs/westos.org.crt

域名westos.org要求在主机上有解析,添加本地解析。

[root@server1 certs]# vim /etc/hosts
172.25.11.1     server1 westos.org

拷贝证书到docker主机

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

server2主机:安装docker,做好解析

[root@server2 ~]# vim /etc/hosts
172.25.15.1     server1 westos.org

将证书和key发给server2。[root@server1 westos.org]# scp -r /etc/docker/certs.d/ server2:/etc/docker/
为Docker仓库添加用户认证功能,生成用户密码文件。

[root@server1 ~]# mkdir auth
[root@server1 ~]# docker run --rm --entrypoint htpasswd registry:2 -Bbn admin westos > auth/htpasswd
[root@server1 ~]# docker run --rm --entrypoint htpasswd registry:2 -Bbn zhang westos >> auth/htpasswd
[root@server1 ~]# cat auth/htpasswd 

重建registry容器(首先netstat命令查看下,保证443端口没有被占用。)

[root@server1 ~]# 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@server1 ~]# docker ps 
[root@server1 ~]# netstat -ntlp    #查看443端口有没有开启
[root@server1 ~]# docker history registry:2 

docker主机认证,首先上传一个镜像

[root@server1 ~]# docker tag  localhost:5000/nginx:latest westos.org/nginx
[root@server1 ~]# docker push westos.org/nginx
[root@server1 ~]# docker login westos.org
[root@server1 ~]# cd .docker/
[root@server1 .docker]# cat config.json #在文件config.json 中可以看到记录的认证(认证一次,永久保存)

server2登陆并尝试拉取镜像

[root@server2 ~]# docker pull westos.org/nginx
[root@server2 ~]# docker login westos.org
[root@server2 ~]# docker pull westos.org/nginx
[root@server2 ~]# docker images 

给私有库添加WebUI界面

 [root@server1 ~]# docker load -i docker-registry-web.tar
[root@server1 ~]# cat .docker/config.json
[root@server1 ~]# docker run -d -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="YWRtaW46d2VzdG9z" -e REGISTRY_NAME=westos.org docker-registry-web
[root@server1 ~]# docker ps 
[root@server1 ~]# docker images 

[root@server1 ~]# docker load -i game2048.tar 
[root@server1 ~]# docker tag game2048:latest westos.org/game2048
[root@server1 ~]# docker push westos.org/game2048

浏览器访问:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值