1 介绍
registry用于保存docker镜像,包括镜像的层次结构和元数据;
启动容器时,docker daemon会先试图从本地获取相关的镜像,本地镜像不存在时,就会从registry中下载该镜像并保存到本地;
拉取镜像时,如果不知道registry仓库地址,默认从Docker Hub搜索拉取镜像。
2 分类
- Sponsor Registry:第三方的registry,供客户和docker社区使用;
- mirror Registry:第三方的registry,只让客户使用,如docker cn和阿里云的镜像加速器;
- vendor Registry:服务商的registry,由发布docker镜像的供应商提供的registry;如红帽提供的专有的,收费提供;
- private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry;
- 自建的registry,在本地搭建registry,节省带宽。
3 registry组成(repository和index)
3.1 Repository
由特定的docker镜像的所有迭代版本组成的镜像仓库;
一个registry中可以存在多个repository;
repository可分为“顶层仓库”和“用户仓库”;
用户仓库名称格式为“用户名/仓库名”;
每个仓库可以包含多个Tag(标签),每个标签对应一个镜像。
3.2 Index
维护用户账户、镜像的校验以及公共命名空间的信息;
相当于为registry提供了一个完成用户认证等功能的检索接口。
4 拉取仓库镜像的格式
docker pull [:]/[/]:
registry:仓库服务器地址,不指定默认是docker hub
port:端口;默认是443,因为是https协议
namespace:名称空间,指是哪个用户的仓库,如果是顶层仓库,可省略
name:仓库名
tag:标签名;默认是latest版本
5 搭建私有仓库(distribution)
5.1 distribution 介绍
docker提供的开源Registry,但是很简单,只能作为存储镜像的仓库,没有额外的功能;如管理页面等
5.2 安装启动 distribution
两种方案(优选方案2)
5.2.1 方案1:使用yum安装(直接从extras 源中下载安装)
[root@johnnyg03 ~]# yum info docker-distribution
[root@johnnyg03 ~]# yum -y install docker-distribution
5.2.2 方案2:拉取镜像,作为容器安装
5.2.2.1 拉取镜像
[root@johnnyg03 ~]# docker pull registry
5.2.2.2 启动registry 容器
[root@johnnyg03 ~]# docker run -d --name registry -p 5000:5000 -v /data/registry/:/var/lib/registry registry:latest
b1fa0878f08452564920b17d9daf2e28bf6a61d3840b4c4a6e4a34fa85b67325
//-p 5000:5000:将容器中的5000端口,暴露在宿主机的5000端口
//-v /data/registry:/var/lib/registry:指定宿主机存储的位置为 /data/registry
//-d:后台运行容器
[root@johnnyg03 ~]# docker port registry
5000/tcp -> 0.0.0.0:5000
5000/tcp -> :::5000
[root@johnnyg03 ~]# netstat -lnupt | grep 5000
tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 11752/docker-proxy
tcp6 0 0 :::5000 :::* LISTEN 11759/docker-proxy
5.2.3 上传镜像至私有仓库
5.2.3.1 为本地镜像打上合适标签
[root@johnnyg03 ~]# docker tag busybox:latest 10.0.2.12:5000/busybox:latest
[root@johnnyg03 ~]# docker tag nginx:latest 10.0.2.12:5000/nginx:latest
[root@johnnyg03 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.2.12:5000/busybox latest beae173ccac6 7 months ago 1.24MB
busybox latest beae173ccac6 7 months ago 1.24MB
10.0.2.12:5000/nginx latest 605c77e624dd 7 months ago 141MB
nginx latest 605c77e624dd 7 months ago 141MB
5.2.3.2 修改docker的daemon.json守护进程文件
[root@johnnyg03 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["10.0.2.12:5000"] //添加此行(IP为需要被访问地址)
}
[root@johnnyg03 ~]# systemctl restart docker.service
【注:docker 上传下载默认只支持https协议,搭建的私有仓库是http协议,因此需要在上方这个docker 的守护进程文件中添加一行表示允许此IP使用http协议访问】
5.2.3.3 上传镜像
//由于刚刚重启了docker服务,因此registry容器关闭需要启动
[root@johnnyg03 ~]# docker start registry
registry
[root@johnnyg03 ~]# docker push 10.0.2.12:5000/busybox:latest
The push refers to repository [10.0.2.12:5000/busybox]
01fd6df81c8e: Pushed
latest: digest: sha256:62ffc2ed7554e4c6d360bce40bbcf196573dd27c4ce080641a2c59867e732dee size: 527
[root@johnnyg03 ~]# docker push 10.0.2.12:5000/nginx:latest
The push refers to repository [10.0.2.12:5000/nginx]
d874fd2bc83b: Pushed
32ce5f6a5106: Pushed
f1db227348d0: Pushed
b8d6e692a25e: Pushed
e379e8aedd4d: Pushed
2edcec3590a4: Pushed
latest: digest: sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3 size: 1570
//可以看到已经上传成功
//在私有仓库(宿主机挂载目录)进行验证
[root@johnnyg03 ~]# ls /data/registry/docker/registry/v2/repositories/
busybox nginx
//可以看到刚刚上传的两个镜像均已存在
5.2.4 下载镜像从私有仓库
5.2.4.1 修改docker的daemon.json守护进程文件
[root@johnnyg03 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["10.0.2.12:5000"] //添加此行(IP为需要被访问地址)
}
[root@johnnyg03 ~]# systemctl restart docker.service
5.2.4.2 下载镜像
[root@johnnyg02 ~]# docker pull 10.0.2.12:5000/busybox:latest
latest: Pulling from busybox
Digest: sha256:62ffc2ed7554e4c6d360bce40bbcf196573dd27c4ce080641a2c59867e732dee
Status: Downloaded newer image for 10.0.2.12:5000/busybox:latest
10.0.2.12:5000/busybox:latest
[root@johnnyg02 ~]# docker pull 10.0.2.12:5000/nginx:latest
latest: Pulling from nginx
a2abf6c4d29d: Pull complete
a9edb18cadd1: Pull complete
589b7251471a: Pull complete
186b1aaa4aa6: Pull complete
b4df32aa5a72: Pull complete
a0bcbecc962e: Pull complete
Digest: sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3
Status: Downloaded newer image for 10.0.2.12:5000/nginx:latest
10.0.2.12:5000/nginx:latest
[root@johnnyg02 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.2.12:5000/busybox latest beae173ccac6 7 months ago 1.24MB
10.0.2.12:5000/nginx latest 605c77e624dd 7 months ago 141MB
//可以看到两个镜像已经成功下载