zoukankan      html  css  js  c++  java
  • Docker 自建私有Registry 私有仓库

    说明

    记录搭建 docker 私有仓库步骤

    介绍

    docker镜像可以托管到dockerhub中,跟代码库托管到github是一个道理。但如果我们不想把docker镜像公开放到dockerhub中,只想在部门或团队内部共享docker镜像,能不能项gitlab一样在搭建私有的仓库呢?答案是肯定的,docker也支持将镜像存到私有仓库。下面将验证docker原生的仓库和开源的私用仓库,并分析其特点。

    原理

    Docker模型的核心部分是有效的利用分层镜像机制,镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。不同的Docker容器可以共享一些基础的文件系统层,同时再加上自己独有的改动层,大大提高了存储的效率。由于最终镜像最终是以tar.gz的方式静态存储在服务器端,这种存储适用于对象存储而不是块存储。

    一次docker pull (即用户从客户端向仓库拉镜像),发生的交互

    1. 客户端向索引请求ubuntu镜像下载地址
    2. 索引回复:ubuntu所在仓库A、 ubuntu镜像的校验码(Checksum)和所有层的Token
    3. 客户端向仓库A请求 ubuntu的所有层(仓库A负责存储ubuntu,以及它所依赖的层)
    4. 仓库A向索引发起请求,验证用户Token的合法性
    5. 索引返回这次请求是否合法
    6. 客户端从仓库下载所有的层,仓库从后端存储中获取实际的文件数据,返给客户端

    搭建

    本次直接使用yum安装 docker-registry

    [root@registory ~]# yum install docker-registry -y
    [root@registory ~]# rpm -ql docker-distribution         # 查看安装包详细信息
    /etc/docker-distribution/registry/config.yml            # 配置文件
    /usr/bin/registry                                       # 启动明命令
    /usr/lib/systemd/system/docker-distribution.service     # 服务启动脚本
    /usr/share/doc/docker-distribution-2.6.2
    /usr/share/doc/docker-distribution-2.6.2/AUTHORS
    /usr/share/doc/docker-distribution-2.6.2/CONTRIBUTING.md
    /usr/share/doc/docker-distribution-2.6.2/LICENSE
    /usr/share/doc/docker-distribution-2.6.2/MAINTAINERS
    /usr/share/doc/docker-distribution-2.6.2/README.md
    /var/lib/registry                                       # Docker 镜像存放的目录
    

    查看配置文件

    [root@registory ~]# cat /etc/docker-distribution/registry/config.yml 
    version: 0.1
    log:
      fields:
        service: registry               # 服务名称
    storage:
        cache:
            layerinfo: inmemory
        filesystem:
            rootdirectory: /var/lib/registry    # 镜像存放目录,可以根据情况修改
    http:
        addr: :5000                     # 端口,这里需要根据实际情况来修改为 80 或者 443
    

    这里先不进行修改,简便安装使用。

    启动

    [root@registory ~]# systemctl start docker-distribution
    [root@registory ~]# ps aux|grep registry
    root     20843  0.0  0.8 307476 17476 ?        Ssl  13:31   0:00 /usr/bin/registry serve /etc/docker-distribution/registry/config.yml
    

    上传和下载镜像测试

    测试上传镜像

    注意: 默认情况下,docker使用的是https方式上传和下载,本次是用的是5000端口,所以需要手动配置一下

    [root@registory ~]# cat /etc/docker/daemon.json 
    {
      "registry-mirrors": ["https://0tb09e4d.mirror.aliyuncs.com"],     # 镜像加速
      "insecure-registries": ["registry.kubernetes:5000"]               # 这里列表中可配置多个
    }
    

    说明:上述中的registry.kubernetes手动写了hosts文件,所以需要注意,在需要使用该registry的机器上,都需要能解析。

    [root@registory ~]# grep registry /etc/hosts
    192.168.1.120 registry registry.kubernetes
    

    然后随意上传一个打包好的镜像

    [root@registory registry]# docker push registry.kubernetes:5000/myweb:v0.3-6
    The push refers to repository [registry.kubernetes:5000/myweb]
    cc7d034b0d81: Pushed 
    b9a751a05ed2: Pushed 
    076c58d2644f: Pushed 
    b2cbae4b8c15: Pushed 
    5ac9a5170bf2: Pushed 
    a464c54f93a9: Pushed 
    v0.3-6: digest: sha256:016196f127de6b4b726f0ea466216567903ad8c4820cf37b62559ea78d7f2ec3 size: 1567
    

    测试下载镜像

    也需要手动配置hosts解析和docker的配置文件修改

    [root@node03 ~]# cat /etc/docker/daemon.json 
    {
      "registry-mirrors": ["https://0tb09e4d.mirror.aliyuncs.com"],     # 镜像加速
      "insecure-registries": ["registry.kubernetes:5000"]               # 这里列表中可配置多个
    }
    
    [root@node03 ~]# grep registry /etc/hosts
    192.168.1.120 registry registry.kubernetes
    

    操作查看

    [root@node03 ~]# docker image pull registry.kubernetes:5000/myweb:v0.3-6
    v0.3-6: Pulling from myweb
    bdf0201b3a05: Pull complete 
    3d0a573c81ed: Pull complete 
    8129faeb2eb6: Pull complete 
    3dc99f571daf: Pull complete 
    c77cad417662: Pull complete 
    f8733d9c3f79: Pull complete 
    Digest: sha256:016196f127de6b4b726f0ea466216567903ad8c4820cf37b62559ea78d7f2ec3
    Status: Downloaded newer image for registry.kubernetes:5000/myweb:v0.3-6
    registry.kubernetes:5000/myweb:v0.3-6
    [root@node03 ~]# docker image ls
    REPOSITORY                                                       TAG                  IMAGE ID            CREATED             SIZE
    registry.kubernetes:5000/myweb                                   v0.3-6               63478b4469e1        21 hours ago        16MB
    
  • 相关阅读:
    HTML area coords 属性
    在Java中,替换字符串String中特定索引处的字符char?
    JavaScript 之 history对象
    JavaScript 之 location 对象
    JavaScript 之 定时器
    JavaScript 之 页面加载事件
    JavaScript 之 对话框
    JavaScript 之 BOM
    Java 之 可变参数
    Java 之 LinkedHashSet 集合
  • 原文地址:https://www.cnblogs.com/winstom/p/11655400.html
Copyright © 2011-2022 走看看