• Docker安装部署Nexus3作为内网镜像代理缓存容器镜像


    Docker安装部署Nexus3作为内网镜像代理

    一、背景描述

    基础镜像比较小,仓库使用阿里云或者腾讯云拉取速度挺快,但是时光飞逝几年时间过去,再加上AI加持的情况下,有些镜像的大小已经接近20G!
    这种情况下不管是测试环境还是开发环境拉取镜像都会占用公司宽带流量,因此需要在测试环境搭建一台容器代理,用于缓存镜像!

    二、搭建Nexus3作为镜像代理缓存阿里云、腾讯仓库私有镜像

    2.1、Docker部署Nexus3

    #数据持久化目录
    mkdir -p /data/nexus3
    #授权
    chmod 777 -R /data/nexus3
    #创建nexus3容器。
    docker run -tid \
     --privileged=true\
     --network=host \
     --restart=always \
     -v /data/nexus3:/nexus-data \
     --name nexus3 \
      sonatype/nexus3
    
    #查看默认密码
    cat /data/nexus3/admin.password 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2.2、登录nexus3并修改默认密码

    修改默认密码,设置来宾用户访问
    在这里插入图片描述
    否则拉取镜像时会有如下报错:

    [root@localhost certs.d]# crictl pull nginx
    FATA[0002] pulling image failed: rpc error: code = NotFound desc = failed to pull and unpack image "docker.io/library/nginx:latest": failed to unpack image on snapshotter overlayfs: unexpected media type text/html for sha256:b6a78ff088000afc609fcbc701d18704ddb944e867af0dadd520d4bf0e5af328: not found 
    
    • 1
    • 2

    三、配置Nexus3代理阿里云、腾讯云私有镜像仓库

    3.0 备注

    这里会创建三个代理
    1、阿里云镜像加速
    2、阿里云私有镜像仓库(内含公开镜像)
    3、腾讯云私有镜像仓库
    私有镜像仓库需要配置认证账号密码

    3.1、创建Blob Store

    在这里插入图片描述

    3.2、创建阿里云私有镜像仓库代理

    在这里插入图片描述
    设置代理信息
    在这里插入图片描述
    勾选缓存镜像layer,选择创建的Blob store
    在这里插入图片描述
    因为使用的阿里云北京区的镜像仓库,所以这里填入北京区地址,如果是腾讯云仓库替换即可。
    填入阿里云私有仓库认证账号密码
    在这里插入图片描述
    信息填完后点击Create repositories 完成创建。

    3.3、重复3.2步骤创建好腾讯私有镜像仓库代理!

    3.4、创建Docker-Group

    选择docker(group类型)
    在这里插入图片描述
    红框需要设置或勾选信息
    通过8888端口对外提供代理服务
    在这里插入图片描述

    把刚创建的docker代理加入到群组中
    在这里插入图片描述

    四、配置Containerd通过Nexus3镜像仓库下载镜像

    4.0、Containerd 版本:

    [root@localhost src]# ctr version
    Client:
      Version:  v1.6.21
      Revision: 3dce8eb055cbb6872793272b4f20ed16117344f8
      Go version: go1.19.9
    
    Server:
      Version:  v1.6.21
      Revision: 3dce8eb055cbb6872793272b4f20ed16117344f8
      UUID: 01b66c6f-637c-4a15-a5db-fb0f75f1fe60
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    4.1、containerd默认配置

    [root@localhost src]# cat /etc/containerd/config.toml 
    version = 2
    root = "/var/lib/containerd"
    state = "/run/containerd"
    oom_score = 0
    
    [grpc]
      address = "/run/containerd/containerd.sock"
      uid = 0
      gid = 0
      max_recv_message_size = 16777216
      max_send_message_size = 16777216
    
    [debug]
      address = "/run/containerd/containerd-debug.sock"
      uid = 0
      gid = 0
      level = "warn"
    
    [timeouts]
      "io.containerd.timeout.shim.cleanup" = "5s"
      "io.containerd.timeout.shim.load" = "5s"
      "io.containerd.timeout.shim.shutdown" = "3s"
      "io.containerd.timeout.task.state" = "2s"
    
    [plugins]
      [plugins."io.containerd.grpc.v1.cri"]
        sandbox_image = "sealos.hub:5000/pause:3.2"
        max_container_log_line_size = -1
        max_concurrent_downloads = 20
        disable_apparmor = true
        [plugins."io.containerd.grpc.v1.cri".containerd]
          snapshotter = "overlayfs"
          default_runtime_name = "runc"
          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
            [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
              runtime_type = "io.containerd.runc.v2"
              runtime_engine = ""
              runtime_root = ""
              [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
                SystemdCgroup = true
        [plugins."io.containerd.grpc.v1.cri".registry]
          config_path = "/etc/containerd/certs.d"
          [plugins."io.containerd.grpc.v1.cri".registry.configs]
              [plugins."io.containerd.grpc.v1.cri".registry.configs."sealos.hub:5000".auth]
                username = "admin"
                password = "passw0rd"
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    4.3、添加nexus3代理镜像

    在config_path = “/etc/containerd/certs.d” 路径下创建需要经过nexus3的仓库文件夹

    /etc/containerd/certs.d
    [root@localhost certs.d]# ls -l
    总用量 0
    drwxr-xr-x 2 root root 24 9月   9 00:30 ccr.ccs.tencentyun.com
    drwxr-xr-x 2 root root 24 9月   8 23:50 docker.io
    drwxr-xr-x 2 root root 24 9月   8 23:50 registry.cn-beijing.aliyuncs.com
    drwxr-xr-x 2 root root 24 9月   8 23:14 sealos.hub:5000
    drwxr-xr-x 2 root root 24 9月   8 23:50 tf72mndn.mirror.aliyuncs.com
    [root@localhost certs.d]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    配置信息:

    [root@localhost certs.d]# cat registry.cn-beijing.aliyuncs.com/hosts.toml 
    server = "https://registry.cn-beijing.aliyuncs.com"
    
    [host."http://172.27.100.251:8888"]
      capabilities = ["pull", "resolve", "push"]
      skip_verify = true
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4.4、重启Containerd并拉取镜像验证

    [root@localhost certs.d]# systemctl restart containerd
    [root@localhost certs.d]# crictl pull nginx
    
    • 1
    • 2

    在这里插入图片描述
    如上图所示,镜像已缓存!

    五、Docker通过Nexus代理下载镜像

    5.1、配置Nexus–Security–Realms

    在这里插入图片描述

    5.2、修改docker daemon.json配置

    [root@localhost ~]# cat /etc/docker/daemon.json
    {
        "insecure-registries": [
            "172.27.100.251:8888"
        ],
         "registry-mirrors": [
    	"http://172.27.100.251:8888"
        ],
        "exec-opts": ["native.cgroupdriver=systemd"],
        "log-opts": {
            "max-file": "3",
            "max-size": "500m"
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    docker info

     Insecure Registries:
      172.27.100.251:8888
      127.0.0.0/8
     Registry Mirrors:
      http://172.27.100.251:8888/
     Live Restore Enabled: false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    拉取镜像测试

    参考:https://blog.csdn.net/qq_30051761/article/details/131139204

  • 相关阅读:
    Hash表_拉链法_开放寻址法_模拟散列表
    第二篇:Sentinel之SPI机制使用与源码分析
    推荐6个AI工具网站
    自实现朴素贝叶斯分类器with案例:基于SMS Spam Collection数据集的广告邮件分类
    基于Springboot+vue的箱包销售商城网站 elementui
    Educational Codeforces Round 156 (Rated for Div. 2)
    数据丢失防护工具
    LeetCode·701.二叉搜索树中的插入操作·递归
    面向6G承载网的路由优化算法研究
    PostgreSQL启用数据库日志与查看数据库对象
  • 原文地址:https://blog.csdn.net/xjjj064/article/details/132761911