Docker Registry 详解

本文详细介绍了Docker Registry的作用,包括其分类、镜像仓库(Repository)和索引(Index)的概念。此外,还展示了如何从Docker Hub和其他知名仓库拉取和推送镜像。接着,重点讲述了如何搭建私有仓库Distribution,包括使用yum安装和通过Docker容器部署,并演示了上传和下载镜像的步骤,强调了配置不安全注册表以允许HTTP访问的重要性。
摘要由CSDN通过智能技术生成

Docker Registry 详解

1 了解Docker Registry

1.1 介绍

  • registry用于保存docker镜像,包括镜像的层次结构和元数据。

  • 启动容器时,docker daemon会试图从本地获取相关的镜像;本地镜像不存在时,其将从registry中下载该镜像并保存到本地;

  • 拉取镜像时,如果不知道registry仓库地址,默认从Docker Hub搜索拉取镜像

1.2 分类

  • Sponsor Registry:第三方的registry,供客户和docker社区使用;

  • mirror Registry:第三方的registry,只让客户使用;如docker cn和阿里云的镜像加速器;

  • vendor Registry:服务商的registry,由发布docker镜像的供应商提供的registry;如红帽提供的专有的,收费提供;

  • private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry;自建的registry,在本地搭建registry,节省带宽

1.3 registry组成(repository和index)

1)Repository

  • 由特定的docker镜像的所有迭代版本组成的镜像仓库;

  • 一个registry中可以存在多个repository:

    • repository可分为“顶层仓库”和“用户仓库”

    • 用户仓库名称格式为“用户名/仓库名”

  • 每个仓库可以包含多个Tag(标签),每个标签对应一个镜像

2)Index

  • 维护用户账户、镜像的校验以及公共命名空间的信息

  • 相当于为registry提供了一个完成用户认证等功能的检索接口

1.4 拉取上传仓库镜像

1)拉取镜像

docker pull [:]/[/]:

  • registry:仓库服务器地址:不指定默认是docker hub

  • port:端口;默认是443,因为是https协议

  • namespace:名称空间,指是哪个用户的仓库,如果是顶层仓库,可省

  • name:仓库名

  • tag:标签名;默认是latest版本

2)上传镜像

docker push [OPTIONS] NAME[:TAG]

1.5 知名docker仓库

  • https://hub.docker.com/

  • https://quay.io/

例:docker pull quay.io/coreos/flannel:v0.10.0-amd64 //flannel是一个网络插件

2 搭建私有仓库distribution

2.1 distribution介绍

docker提供的开源Registry,但是很简单,只能作为存储镜像的仓库,没有额外的功能;如管理页面等

2.2 安装启动distribution

方案1:使用yum安装(直接从extras 源中下载安装)

[root@docker1 ~]# yum -y install docker-distribution

方案2:拉取镜像,作为容器安装

1)拉取镜像

[root@docker2 ~]# docker pull registry:2.6.2

2)启动registry容器

[root@docker2 ~]# docker run --name registry -p 5000:5000 -v /data/registry:/var/lib/registry -d registry:2.6.2

7d3dc6b2ef67775d86eb51653774e496bf448a9a5f7965758023e46da529a57e

[root@docker2 ~]# docker ps

[root@docker2 ~]# docker port registry

5000/tcp -> 0.0.0.0:5000

5000/tcp -> :::5000

[root@docker2 ~]# ss -lntup | grep 5000

[root@docker2 ~]# docker inspect -f {{.“Mounts”}} registry

[{bind /data/registry /var/lib/registry true rprivate}]

注:

  • -p:5000:5000:将容器中的5000端口,暴露在宿主机的5000端口

  • -v:/data/registry:/var/lib/registry:指定宿主机存储的位置为/data/registry

  • -d:后台运行容器

3 从私有仓库上传下载镜像

3.1 将本地的镜像上传到私有仓库

1)先将本地仓库打上合适的标签

[root@docker2 ~]# docker tag busybox:latest 192.168.159.146:5000/busybox:v1.0

[root@docker2 ~]# docker images

2)尝试上传镜像

[root@docker2 ~]# docker push 192.168.159.146:5000/busybox:v1.0

上传镜像失败;原因:docker上传下载默认只支持https协议,搭建的私有仓库是http协议。

3)修改重启docker服务

[root@docker2 ~]# vim /etc/docker/daemon.json

{

“registry-mirrors”: [“https://j64h7f2i.mirror.aliyuncs.com”],

“insecure-registries”: [“192.168.159.146:5000”]

}

[root@docker2 ~]# systemctl restart docker

注:就是将私有仓库认证为安全仓库:“insecure-registries”: [“”]

4)再次上传镜像,成功

[root@docker2 ~]# docker push 192.168.159.146:5000/busybox:v1.0 //报错原因,容器没有开启

[root@docker2 ~]# docker ps -a //查看容器处于关闭zhuang’tai

[root@docker2 ~]# docker start registry

registry

[root@docker2 ~]# docker push 192.168.159.146:5000/busybox:v1.0

5)在私有仓库的服务器上验证

[root@docker2 ~]# ls /data/registry/docker/registry/v2/

blobs repositories

6)从私有仓库拉取镜像,先删除再拉取

[root@docker2 ~]# docker rmi 192.168.159.146:5000/busybox:v1.0

[root@docker2 ~]# docker images //镜像已被删除

[root@docker2 ~]# docker pull 192.168.159.146:5000/busybox:v1.0 //从私有仓库拉取镜像

[root@docker2 ~]# docker images //镜像一被拉取到本地

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值