• Docker Registry 详解


    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 //镜像一被拉取到本地

  • 相关阅读:
    WPF命令
    四. node小工具(nodemon/supervisor)
    【Rust 笔记】15-字符串与文本(下)
    SpringSecurity 全部
    【Vue2.0学习】— 列表排序(四十一)
    听说90%的人都没搞定手撕协程池这道面试题!
    嵌入式行业有无年龄危机?算不算青春饭?
    高考志愿填报和未来的职业规划
    BGP——BGP基础概念
    docker快速安装redis,mysql,minio,nacos等常用软件【持续更新】
  • 原文地址:https://blog.csdn.net/m0_61083409/article/details/126327153