zoukankan      html  css  js  c++  java
  • 离线环境下docker镜像的共享-搭建本地缓存镜像仓库

    前言:

      互联网的很多项目都需要在离线环境下更新,实施,维护,有的是涉密机构,有的仅仅是为了业务的安全,那么在这种场景下的docker或k8s环境下进行产品的迭代更新就是一个比较麻烦的事情,尤其是在大项目,多组件的情况下,比较繁琐,而使用离线缓存仓库registry,可以很好的解决这个问题,当然,不是使离线环境发生变化,而是使用在线下载,离线上传,上传仓库,修改tag,上传私有缓存仓库的方式来完成的,下面,介绍这个工具的使用:

    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>[:<port>]/[<namespace>/]<name>:<tag>

    注:

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

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

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

      name:仓库名

      tar:  标签名;默认是latest版本

    2)上传镜像

    docker push [OPTIONS]NAME:TAG

    2、搭建私有仓库distribution

    2.1、distribution介绍

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

    2.2、安装启动distribution

    两种方案可安装,我采用的是方案2

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

     
    [root@hackerlin ~]# yum info docker-distribution
    已加载插件:fastestmirror
    Loading mirror speeds from cached hostfile
    可安装的软件包
    名称    :docker-distribution
    架构    :x86_64
    版本    :2.6.2
    发布    :2.git48294d9.el7
    大小    :3.5 M
    源    :extras/7/x86_64
    简介    : Docker toolset to pack, ship, store, and deliver content
    网址    :https://github.com/docker/distribution
    协议    : ASL 2.0
    描述    : Docker toolset to pack, ship, store, and deliver content
    [root@hackerlin ~]# yum -y install docker-distribution
     

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

    拉取镜像

     
    [root@hackerlin dockerfile]# docker pull registry:2.6.2
    Trying to pull repository docker.io/library/registry ... 
    2.6.2: Pulling from docker.io/library/registry
    486039affc0a: Pull complete 
    ba51a3b098e6: Pull complete 
    470e22cd431a: Pull complete 
    1048a0cdabb0: Pull complete 
    ca5aa9d06321: Pull complete 
    Digest: sha256:c4bdca23bab136d5b9ce7c06895ba54892ae6db0ebfc3a2f1ac413a470b17e47
    Status: Downloaded newer image for docker.io/registry:2.6.2
     

    启动registry容器

     
    [root@hackerlin dockerfile]# docker run --name registry -p 5000:5000 -v /data/registry:/var/lib/registry -d registry:2.6.2
    WARNING: IPv4 forwarding is disabled. Networking will not work.
    f876e8e76b97383bf0e070762b6da65c49de49c1c163e17b05bbc3e2d533544c
    [root@hackerlin dockerfile]# docker port registry
    5000/tcp -> 0.0.0.0:5000
    [root@hackerlin dockerfile]# ss -tlnp | grep 5000
    LISTEN     0      128       [::]:5000                  [::]:*                   users:(("docker-proxy-cu",pid=17038,fd=4))
    [root@hackerlin dockerfile]# 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:后台运行容器

    2.3、从私有仓库上传下载镜像

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

    现将本地仓库打上合适的标签

     
    [root@hackerlin dockerfile]# docker tag busybox:latest 192.169.72.200:5000/busybox:v0.1
    #注意这里打包必须打成IP地址这个格式的
    [root@hackerlin dockerfile]# docker images
    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
    192.169.72.200:5000/busybox   v0.1                83aa35aa1c79        5 weeks ago         1.22 MB
    docker.io/busybox             latest              83aa35aa1c79        5 weeks ago         1.22 MB
    docker.io/registry            2.6.2               10b45af23ff3        2 months ago        28.5 MB
    docker.io/nginx               1.14-alpine         8a2fb25a19f5        12 months ago       16 MB
     

    尝试上传镜像

    [root@hackerlin dockerfile]# docker push 192.169.72.200:5000/busybox:v0.1
    The push refers to a repository [192.169.72.200:5000/busybox]
    Get https://192.169.72.200:5000/v1/_ping:http: server gave HTTP response to HTTPS client

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

    修改重启docker服务

     
    [root@hackerlin dockerfile]# vim /etc/docker/daemon.json 
    {
    "registry-mirrors": ["http://hub-mirror.c.163.com"],
    "insecure-registries": ["192.168.72.200:5000"]
    }
    [root@hackerlin dockerfile]# systemctl restart docker
     

    再次上传镜像,成功

    [root@hackerlin dockerfile]# docker push 192.168.72.200:5000/busybox:v1
    The push refers to a repository [192.168.72.200:5000/busybox]
    5b0d2d635df8: Pushed 
    v1: digest: sha256:a2490cec4484ee6c1068ba3a05f89934010c85242f736280b35343483b2264b6 size: 527

    在私有仓库的服务器上验证(这里是做了挂载的)

    [root@hackerlin v2]# ll /data/registry/docker/registry/v2/
    total 0
    drwxr-xr-x. 3 root root 20 Apr 16 02:35 blobs
    drwxr-xr-x. 3 root root 21 Apr 16 02:35 repositories

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

     
    [root@hackerlin v2]# docker images
    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
    192.168.72.200:5000/busybox   v1                  be5888e67be6        35 hours ago        1.22 MB
    docker.io/busybox             latest              be5888e67be6        35 hours ago        1.22 MB
    docker.io/registry            2.6.2               10b45af23ff3        2 months ago        28.5 MB
    docker.io/nginx               1.14-alpine         8a2fb25a19f5        12 months ago       16 MB
    [root@hackerlin v2]# docker rmi -f be5888e67be6
    Untagged: 192.168.72.200:5000/busybox:v1
    Untagged: 192.168.72.200:5000/busybox@sha256:a2490cec4484ee6c1068ba3a05f89934010c85242f736280b35343483b2264b6
    Untagged: docker.io/busybox:latest
    Untagged: docker.io/busybox@sha256:89b54451a47954c0422d873d438509dae87d478f1cb5d67fb130072f67ca5d25
    Deleted: sha256:be5888e67be651f1fbb59006f0fd791b44ed3fceaa6323ab4e37d5928874345a
    Deleted: sha256:5b0d2d635df829f65d0ffb45eab2c3124a470c4f385d6602bda0c21c5248bcab
    [root@hackerlin v2]# docker images
    REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
    docker.io/registry   2.6.2               10b45af23ff3        2 months ago        28.5 MB
    docker.io/nginx      1.14-alpine         8a2fb25a19f5        12 months ago       16 MB
    [root@hackerlin v2]# docker pull 192.168.72.200:5000/busybox:v1
    Trying to pull repository 192.168.72.200:5000/busybox ... 
    v1: Pulling from 192.168.72.200:5000/busybox
    e2334dd9fee4: Pull complete 
    Digest: sha256:a2490cec4484ee6c1068ba3a05f89934010c85242f736280b35343483b2264b6
    Status: Downloaded newer image for 192.168.72.200:5000/busybox:v1
    [root@hackerlin v2]# docker images
    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
    192.168.72.200:5000/busybox   v1                  be5888e67be6        35 hours ago        1.22 MB
    docker.io/registry            2.6.2               10b45af23ff3        2 months ago        28.5 MB
    docker.io/nginx               1.14-alpine         8a2fb25a19f5        12 months ago       16 MB
  • 相关阅读:
    Python 数据库骚操作 — MongoDB
    5分钟学会如何玩转云数据库组件(迁移,审计,订阅)
    数据库10大常见安全问题及Top 10 数据库安全工具盘点
    埋在 MYSQL 数据库应用中的17个关键问题!
    MySQL分布式数据库高可用实践:架构、复制机制、多机房
    浅谈如何保障自建数据库的备份恢复机制
    【深度】分布式数据库数据一致性原理说明与实现
    SyncNavigator 破解版 ,做数据同步时所支持的数据库类型
    使用SyncNavigator进行SqlServer或者MYsql数据库的实时、增量同步
    Syncnavigator破解版注册机
  • 原文地址:https://www.cnblogs.com/xiaoyuxixi/p/13099319.html
Copyright © 2011-2022 走看看