玩转Docker----- 第三部-----------docker公有、私有仓库的搭建
1.Docker 仓库
Docker仓库是用来包含镜像的位置,Docker提供一个注册服务器
(Register)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。
Docker运行中使用的默认仓库是Docker Hub公共仓库。
仓库的出现是为了避免镜像太多难以管理的局面。
有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。
实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载
国内的公开仓库包括 Docker Pool等,可以提供大陆用户更稳定快速的访问
当然,用户也可以在本地网络内创建一个私有仓库
当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,
这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
有时使用 Docker Hub 这样的公共仓库可能不方便,会侵犯到企业的隐私,所以我们可以搭建私人仓库去使用
2.Docker Hub
Docker Hub是Docker公司维护的公共仓库,用户可以免费使用,也可以购买私有仓库。
第一步:首先需要注册一个docker hub帐号:
访问https://hub.docker.com/
登录成功后注册一个账号,然后登录账号
创建仓库:
填写仓库名—选择public—create
此时我们已经在官方的仓库中创建了一个仓库,下面我们可以上传镜像到仓库中
第二步:登陆docker hub帐号
docker login
登陆成功后会自动生成以下文件,在这里存储了docker hub中的用户名和信息:
第三步:上传镜像到docker hub
先把镜像名改为用户名/镜像名的形式:
docker tag busybox:latest 021129/busybox:latest
上传:
docker push 021129/busybox
search搜索自己的用户名:
docker search 021129
然后就可以看到用户021129上传的镜像了
配置镜像加速器
为什么要配置镜像加速器呢?
因为我们现在拉取的镜像都是从国外的网站拉取的镜像,因为docker的官网在国外。我们使用docker pull 拉取镜像是比较慢的,所以我们可以使用阿里云提供的镜像加速器,这样就加速了我们拉取镜像的速度。
步骤:
第一步:登陆阿里云,注册帐号,也可以使用支付宝或者淘宝等登陆方式。
找到镜像加速器
[root@server1 ~]# cd /etc/docker/
[root@server1 docker]# ls
key.json
[root@server1 docker]# vim daemon.json
[root@server1 docker]# cat daemon.json
{
"registry-mirrors": ["https://eqyqr0h1.mirror.aliyuncs.com"]
}
[root@server1 docker]# systemctl daemon-reload
[root@server1 docker]# systemctl restart docker
操作完成之后,我们拉取镜像的速度就快了。因为我们使用的是阿里云这个路径
[root@server1 docker]# docker pull nginx 拉取
可以看到速度明显提升了。。。。。。。
3.Registry的工作原理
index服务主要提供镜像索引以及用户认证的功能。当下载一个镜像的时候,首先会去index服务上做认证,然后查找镜像所在的registry的地址并放回给docker客户端,docker客户端再从registry下载镜像,在下载过程中registry会去index校验客户端token的合法性,不同镜像可以保存在不同的registry服务上,其索引信息都放在index服务上。
Docker Registry有三个角色,分别是index、registry和registryclient:
- index
负责并维护有关用户帐户、镜像的校验以及公共命名空间的信息。
Web UI
元数据存储
认证服务
符号化 - registry
是镜像和图表的仓库,它不具有本地数据库以及不提供用户认证,通过Index Auth service 的Token的方式进行认证。 - Registry Client
Docker充当registry客户端来维护推送和拉取,以及客户端的授权。
4.三个典型情景
5.搭建私有仓库
在集群服务时,需要docker,如果此时还从外部镜像仓库中下载镜像,会十分缓慢
docker hub虽然方便,但是还是有限制:
需要internet连接, 速度慢
所有人都可以访问
由于安全原因企业不允许将镜像放到外网
好消息是docker公司已经将registry开源,我们可以快速构建企业私有仓库
私有仓库的优点:
- 节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下载,只需要从私有仓库中下载即可;
- 提供镜像资源利用,针对于公司内部使用的镜像,推送到本地的私有仓库中,以供公司内部相关人员使用。目前Docker Registry已经升级到了v2,最新版的Docker已不再支持v1。Registry v2使用Go语言编写,在性能和安全性上做了很多优化,重新设计了镜像的存储格式。如果需要安装registry v2,只需下载registry:2.2即可。
- Docker官方提供的工具docker-registry可以用于构建私有的镜像仓库
导入registry镜像:
[root@server1 docker]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
486039affc0a: Pull complete
ba51a3b098e6: Pull complete
8bb4c43d6c8e: Pull complete
6f5f453e5f2d: Pull complete
42bc10b72f42: Pull complete
Digest: sha256:7d081088e4bfd632a88e3f3bcd9e007ef44a796fddfe3261407a3f9f04abe1e7
Status: Downloaded newer image for registry:latest
[root@server1 docker]# docker images
registry latest 708bc6af7e5e 4 months ago 25.8MB
[root@server1 docker]# docker history registry:latest # 查看构建历史
IMAGE CREATED CREATED BY SIZE COMMENT
708bc6af7e5e 4 months ago /bin/sh -c #(nop) CMD ["/etc/docker/registr… 0B
<missing> 4 months ago /bin/sh -c #(nop) ENTRYPOINT ["/entrypoint.… 0B
<missing> 4 months ago /bin/sh -c #(nop) COPY file:507caa54f88c1f38… 155B
<missing> 4 months ago /bin/sh -c #(nop) EXPOSE 5000 0B
<missing> 4 months ago /bin/sh -c #(nop) VOLUME [/var/lib/registry] 0B
<missing> 4 months ago /bin/sh -c #(nop) COPY file:4544cc1555469403… 295B
<missing> 4 months ago /bin/sh -c #(nop) COPY file:21256ff7df5369f7… 20.1MB
<missing> 4 months ago /bin/sh -c set -ex && apk add --no-cache… 1.28MB
<missing> 4 months ago /bin/sh -c #(nop) CMD ["/bin/sh"