K8s: 公有镜像中心和私有镜像中心的搭建

公有镜像中心的搭建和使用

1 )在 官方docker镜像中心推送

  • hub.docker.com 上注册账号 (国内一般访问不了,原因不多说)

  • 找到 Create Repository 按钮就行仓库的创建

  • 这样就在官方创建了一个仓库,比如地址为: xx/y-y

    • xx 是我的账户名
    • y-y 是刚创建的仓库名
  • 现在,我将本地的docker镜像,推送到这个仓库里

    • 没有登录过,先使用 docker login 进行登录
    • 假设本地的 nginx:latest 镜像,现在我要对其进行打一个新的tag
    • $ docker tag nginx xx/y-y:latest
    • 之后,将其推送到远程
    • $ docker push xx/y-y:latest
  • 如果 hub.docker.com 在国内无法访问,可以在阿里云上创建 docker hub

  • 为官方docker镜像中心加速

  • 配置国内 Docker 镜像源 $ vi /etc/docker/daemon.json

    conf 复制代码
    {
        "registry-mirrors": ["https://registry.docker-cn.com"],
        "live-restore": true
    }
  • 配置之后,需要重启 $ systemctl restart docker

2 )在阿里云docker镜像中心搭建

  • 在阿里云控制台,选择 容器镜像服务
  • 为何选择阿里云,因为当你下载的时候,会走cdn来加速
  • 进入实例列表,有两种,个人版和企业版本
  • 可以选择个人版实验一下,创建后,在 仓库管理/镜像仓库即可进行管理

搭建私有镜像中心

  • 我们现在用的私有docker镜像中心是JCR,也就是 JFrog Container Registry
  • 这个和开源的harbor有点类似,但是这个比harbor更加的好用,更加的强大
  • 因为它不仅能管这个通用仓库,还有helm仓库,harbor是没有通用类型仓库的

整体架构图如下

  • docker client 连接的是 JCR, JCR 一般连的是 docker.io/library 这个远程
  • JCR 是部署在本地私有环节中的, JCR 对外除了连接官方的,还可以连接阿里云容器服务
  • JCR 在这里做了一个远程代理的作用,JCR里面可以有多种不同的仓库

安装 JCR (JFrog Container Registry)

1 )准备工作

  • 在 master 节点上执行以下命令

    • 设置环境变量
      • $ vi ~/.bash_profile 增加 JFROG_HOME 环境变量

        conf 复制代码
        export JFROG_HOME=~/jfrog
      • $ source ~/.bash_profile 生效

    • 设置目录和文件
      • `sudo mkdir -p JFROG_HOME/artifactory/var/etc`
      • `cd JFROG_HOME/artifactory/var/etc`
      • $ sudo touch ./system.yaml
      • `sudo chown -R 1030:1030 JFROG_HOME/artifactory/var`
      • `sudo chmod -R 777 JFROG_HOME/artifactory/var`
      • 如果觉得这些麻烦,可以用以下的方法
        • $ sudo docker volume create data_artifactory
        • $ sudo docker volume inspect data_artifactory
        • $ sudo docker run --name jfrog-artifactory-jcr -d --rm -v data_artifactory:/var/opt/jfrog/artifactory ...
          • 这里省略,下面会有命令补充
    • 运行docker
      • docker 镜像可以先行下载,比较大
      • $ docker pull releases-docker.jfrog.io/jfrog/artifactory-jcr:7.4.3
        • 注意,这个镜像在 Mac 上正常运行,在 centos 9 上会有问题
        • 后续较新的版本,在运行上也可能会有问题,此处在Mac上演示
        • 其他版本,我试过,挺恶心的,一堆报错,包括最新版,不知道缺了啥
        • 按照官方下载 jcr 版本的 Linux版自行安装, 不再赘述,有问题,找官方和社区
      • `docker run --name artifactory-jcr -v JFROG_HOME/artifactory/var/:/var/opt/jfrog/artifactory -d -p 8081:8081 -p 8082:8082 releases-docker.jfrog.io/jfrog/artifactory-jcr:7.4.3`
      • $ sudo docker ps | grep jcr 查看运行状态
  • 注意,目前我的 JCR服务 是搭建在 Mac上的,不是 Centos 上的

  • 这点需要说明(因为版本在Centos9上报错),现在就当它是服务器(Centos),先修改下相关配置

  • 现在 master节点和 work 节点都应该可以正常访问 Mac

  • Mac作为一台独立的服务器,都先修改相关配置

  • 在各台机器上,加入Mac的ip地址,修改hosts文件(Mac自身也要同时做此修改)

    conf 复制代码
    10.211.10.2     art.local
    • 这是 JCR 服务器的ip地址,目前在我的机器上是 Mac的地址
  • 接着,开始配置Docker insecure registry,(在 JCR服务器和其他服务节点都要一起配置)

  • $ vi /etc/docker/daemon.json 这个在服务器上执行,如果是Mac上,打开自己的Docker Desktop 进行修改

    conf 复制代码
    {
        "insecure-registries": ["art.local:8081"]
    }
    • 加入如上 insecure-registries 的配置项
    • 在 Mac Docker Desktop 上点击 Apply & restart 按钮
    • 在服务器上执行 $ systemctl restart docker
    • 以上操作,比较敏感,请谨慎操作,会导致所有docker服务暂时不可用
  • 最后,可能还需要重新启动 JCR 容器服务

  • 再次查看 docker 容器的运行状态 $ docker logs jfrog-artifactory-jcr

    conf 复制代码
    ###############################################################
    ###   All services started successfully in 38.044 seconds   ###
    ###############################################################
    • 发现有如下输出,则JCR服务全部启动起来了

2 ) 配置

2.1 访问 localhost:8081

2.2 之后,自动跳转,这个是 loading 界面

2.2 之后,继续跳转到登录界面

  • 输入账号和密码: admin/password 之后进入下图
  • 点击 Get Started 进入下个界面,先阅读服务条款,滚动窗口
  • 之后选中 I have read and agree to the terms and conditions stated in the EULA. 复选框
  • 点击 Next 进入下一个界面,这个邮箱输入可以不用填,不是必选项
  • 点击 Next 进入重置密码界面,输入自己的新密码
  • 点击 Next 进入设置baseUrl的地址界面,非必填项,可不修改
  • 点击 Next 进入设置Default Proxy界面,非必填项,可不修改
  • 点击 Next 进入创建仓库界面,选中下面三个
  • 点击 Next 进入 Summary 界面
  • 这里有:docker 本地仓库,docker远程仓库,docker虚拟仓库,点击 Finish 按钮,进入
  • 进入上个界面之后,需要执行 $ docker login art.local:8081 输入账号和密码

  • 如果出现,如下信息,则成功创建好了私有镜像仓库

    conf 复制代码
    Username: admin
    Password:
    Login Succeeded
  • 好,现在登录 JCR 并创建 5 个仓库

  • 分别创建: docker-local, docker-test, docker-release, docker-remote 和 docker virtual 仓库

    • docker-local 是开发用的
    • docker-test 是测试团队用的
    • docker-release 是发布生产运维用的
    • docker-remote 是代理远程的,比如 docker hub 或 ali registry
    • docker virtual 是统一的docker虚拟仓库,能访问底层的上述四种仓库
  • 上述界面,左侧菜单是是个tab栏,点击设置图标切换到 admin 版

  • 展开 Repositories 菜单,对应路由是: /ui/admin/repositories/local

  • 点击 New Local Repository 创建另外的2个仓库: docker-test, docker-release


  • 目前,我们进入到 Virtual 卡片栏点击 docker,将我们刚创建的2个仓库加入
  • 加入
  • 加入后
  • 基于以上,仓库就创建好了
  • 备注,如果有多个 remote 仓库,registry 栏自行添加, 不再赘述

将镜像推送到私有镜像中心

  • 我们可以把本地的镜像推送到上面的私有镜像中心去,我们自己的项目也可先打包成镜像

  • 需要两步,用我们本地的 alpine:latest 来演示

    • 本地进行tag打包
      • $ docker tag alpine:latest art.local:8081/docker-local/alpine:1.0
    • 之后进行push, 注意要在 login 之后进行 push
      • $ docker push art.local:8081/docker-local/alpine:1.0

        conf 复制代码
        The push refers to repository [art.local:8081/docker-local/alpine]
        8d3ac3489996: Pushed
        1.0: digest: sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3 size: 528
  • 现在已经推送上去了,进入页面查看

  • 切换到 Docker Info 界面,可见更多信息
  • 同时,可以再 Properties 栏添加自定义属性,标签
  • 如果后期都没有问题了,可以再这个界面,拷贝到测试环境中去
  • 这样,逐级迁移(测试->生产)即可,这是拆分仓库的好处
相关推荐
高峰君主2 小时前
Docker容器持久化
docker·容器·eureka
能来帮帮蒟蒻吗2 小时前
Docker安装(Ubuntu22版)
笔记·学习·spring cloud·docker·容器
言之。6 小时前
别学了,打会王者吧
java·python·mysql·容器·spark·php·html5
秦始皇爱找茬10 小时前
docker部署Jenkins工具
docker·容器·jenkins
hoho不爱喝酒12 小时前
微服务Nacos组件的介绍、安装、使用
微服务·云原生·架构
樽酒ﻬق13 小时前
Kubernetes 常用运维命令整理
运维·容器·kubernetes
Golinie14 小时前
Docker底层原理浅析 | namespace+cgroups+文件系统
docker·容器·文件系统·cgroups·unionfs
樽酒ﻬق15 小时前
深度解析 Kubernetes 配置管理:如何安全使用 ConfigMap 和 Secret
安全·贪心算法·kubernetes
FreeBuf_15 小时前
新型恶意软件采用独特混淆技术劫持Docker镜像
运维·docker·容器
阿里云云原生16 小时前
API 即 MCP|Higress 发布 MCP Marketplace,加速存量 API 跨入 MCP 时代
云原生