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 栏添加自定义属性,标签
  • 如果后期都没有问题了,可以再这个界面,拷贝到测试环境中去
  • 这样,逐级迁移(测试->生产)即可,这是拆分仓库的好处
相关推荐
川石课堂软件测试15 分钟前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
昌sit!6 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes
A ?Charis9 小时前
Gitlab-runner running on Kubernetes - hostAliases
容器·kubernetes·gitlab
wclass-zhengge9 小时前
Docker篇(Docker Compose)
运维·docker·容器
茶馆大橘10 小时前
微服务系列五:避免雪崩问题的限流、隔离、熔断措施
java·jmeter·spring cloud·微服务·云原生·架构·sentinel
北漂IT民工_程序员_ZG10 小时前
k8s集群安装(minikube)
云原生·容器·kubernetes
coding侠客10 小时前
揭秘!微服务架构下,Apollo 配置中心凭啥扮演关键角色?
微服务·云原生·架构
梦魇梦狸º13 小时前
腾讯轻量云服务器docker拉取不到镜像的问题:拉取超时
docker·容器·github
南猿北者15 小时前
docker镜像仓库常用命令
运维·docker·容器
2301_8061313617 小时前
Kubernetes的基本构建块和最小可调度单元pod-0
云原生·容器·kubernetes