Docker私有仓库搭建与界面化管理

2023-11-14

一、关于Registry

官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。

但是有时候我们的使用场景需要我们拥有一个私有的镜像仓库用于管理我们自己的镜像。这个可以通过开源软件Registry来达成目的。

 Registry在github上有两份代码:老代码库和新代码库。老代码是采用python编写的,存在pull和push的性能问题,出到0.9.1版本之后就标志为deprecated,不再继续开发。

 从2.0版本开始就到在新代码库进行开发,新代码库是采用go语言编写,修改了镜像id的生成算法、registry上镜像的保存结构,大大优化了pull和push镜像的效率。

 官方在Docker hub上提供了registry的镜像,我们可以直接使用该registry镜像来构建一个容器,搭建我们自己的私有仓库服务。


二、搭建Registry

首先搜索并拉取镜像

docker search registry    # 建议先搜索一下,可以看一下相关的镜像,说不定哪天就有更好的镜像了
docker pull registry    # 标签可以不加,因为当前最新就是v2

新建一个opt/tangxl-registry文件夹

在tangxl-registry新建一个auth文件夹

设置密码 docker run --rm --entrypoint htpasswd httpd:alpine -Bbn 账号 密码 > auth/nginx.htpasswd

  运行一个registry容器

docker run -d \            # 后台运行
--name registry-srv \    # 指定容器名
--restart=always \        # 设置自动启动
-p 5000:5000 \            # 端口映射宿主机,通过宿主机地址访问
-v /opt/zwx-registry:/var/lib/registry \     # 把镜像存储目录挂载到本地,方便管理和持久化
-v /opt/zwx-registry/srv-config.yml:/etc/docker/registry/config.yml \    # 把配置文件挂载到本地,方便修改和保存
registry

docker run -itd -p 5000:5000 --restart=always -v ~/opt/tangxl-registry:/var/lib/registry:ro -v ~/opt/tangxl-registry:/etc/docker/registry:ro  --name registry registry

tangxl-registry新建config.yml文件

  config.yml内容如下

  标红delete参数设置为true,是为了让仓库支持删除功能。默认没有这个参数,也就是不能删除仓库镜像。

version: 0.1

log:

  fields:

    service: registry

storage:

  delete:

    enabled: true

  cache:

    blobdescriptor: inmemory

  filesystem:

    rootdirectory: /var/lib/registry

auth:

  htpasswd:

    realm: basic-realm

    path: /etc/docker/registry/auth/nginx.htpasswd

http:

  addr: :5000

  headers:

    X-Content-Type-Options: [nosniff]

health:

  storagedriver:

    enabled: true

    interval: 10s

    threshold: 3

  注册https协议(否则push安全认证过不去)

  需要通过本地仓库下载镜像,均需要配置  

vim /etc/docker/daemon.json        # 默认无此文件,需自行添加,有则追加以下内容。
{ "insecure-registries":["xx.xx.xx.xx:5000"] }  # 指定IP地址或域名

systemctl daemon-reload    # 守护进程重启
systemctl restart docker    # 重启docker服务

镜像上传与下载

docker push xx.xx.xx.xx:5000/nginx            # 一定要注明仓库地址,否则会报错
docker pull xx.xx.xx.xx:5000/nginx

  查看仓库镜像信息

curl -XGET http://xx.xx.xx.xx:5000/v2/_catalog    # 查看仓库镜像列表(也可以通过windows浏览器打开查看)
curl -XGET http://xx.xx.xx.xx:5000/v2/image_name/tags/list  # 查看指定应用镜像tag


三、搭建Registry web

首先搜索并拉取镜像

docker search docker-registry-web
docker pull hyper/docker-registry-web    # 这个镜像用的人较多

  运行一个registry web容器

docker run -d \            # 后台运行
--name registry-web \    # 指定容器名
--restart=always \        # 设置自动启动
-p 8000:8080 \            # 端口映射宿主机,通过宿主机地址访问
-v /opt/zwx-registry/web-config.yml:/conf/config.yml \    # 把配置文件挂载到本地,方便修改和保存
hyper/docker-registry-web

docker run -d  --name registry-web  --restart=always -p 8484:8080 -v ~/opt/tangxl-registry/web-config.yml:/conf/config.yml:ro  -v ~/opt/tangxl-registry/auth.key:/conf/auth.key:ro --link  registry  hyper/docker-registry-web

  在tangxl-registry文件夹下创建web-config.yml内容

web-config.yml文件内容如下

标红readonly参数设置为false,是为了web页面可以显示删除按钮。默认是true,只读状态,没有删除按钮,只能查看。

registry:

  # Docker registry url

  url: 'http://12.21.11.5:5000/v2'

  # web registry context path

  # empty string for root context, /app to make web registry accessible on http://host/app

  context_path: ''

  # Trust any SSL certificate when connecting to registry

  trust_any_ssl: false

  #  base64 encoded token for basic authentication

  basic_auth: ''

  # To allow image delete, should be false

  readonly: false

  # Docker registry fqdn

  name: '12.21.11.5:5000'

  # Authentication settings

  auth:

    # Enable authentication

    enabled: true

    # Allow registry anonymous access

    # allow_anonymous: true # not implemented

    # Token issuer

    # should equals to auth.token.issuer of docker registry

    issuer: 'tangxl'

    # Private key for token signing

    # certificate used on auth.token.rootcertbundle should signed by this key

    key: /config/auth.key

部署完成后,浏览器打开仓库UI地址即可查看到所有应用镜像

选择任意应用镜像库,即可查看到该镜像的所有tag信息,每个tag后面都有个删除按钮(默认没有,配置参考config.yml)


四、快捷部署

  集群模式可以通过docker stack快速部署registry和registry web。

  新建配置文件srv-config.yml、web-config.yml放到指定路径,再新建docker-compose.yml文件,执行命令即可。

docker stack deploy -c docker-compose.yml RGT

version: '3.7'      # docker stack 需要是3.0以上版本
services:
  registry-srv:      # 服务名
    image: registry
    
    ports:         # 映射端口
      - 5000:5000
      
    volumes:        # 挂载镜像路径和配置文件,注意修改路径与实际一致
      - /opt/zwx-registry:/var/lib/registry
      - /opt/zwx-registry/srv-config.yml:/etc/docker/registry/config.yml
      
    deploy:        # 设置单任务,并约束主节点运行
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager
      
  registry-web:      # 服务名  
    image: hyper/docker-registry-web
    
    ports:        # 映射端口
      - 8000:8080
    
    volumes:      # 挂载配置文件,注意修改路径与实际一致
      - /opt/zwx-registry/web-config.yml:/conf/config.yml
      
    environment:
      - REGISTRY_URL=http://registry-srv:5000/v2
      - REGISTRY_NAME=localhost:5000
    
    deploy:        # 设置单任务,并约束主节点运行
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager

私有仓库 - Docker — 从入门到实践

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker私有仓库搭建与界面化管理 的相关文章

随机推荐

  • 自定义ViewGroup实现控件自动换行

    首先看效果如下 首先我们需要自定义ViewGroup 重写onMeasure和onLayout将布局摆放好然后在通过适配器添加子view 代码如下 public class MyViewGroup extends ViewGroup Lis
  • jetson nano安装mqtt库

    把包放入Work下 sudo apt get update sudo apt get install build essential gcc make cmake cmake gui cmake curses gui sudo apt ge
  • 如何在Kubernetes集群中使用kubectl工具来进行管理多个外部K8S集群接入与资源操作?...

    关注 WeiyiGeek 公众号 设为 特别关注 每天带你玩转网络安全运维 应用开发 物联网IOT学习 本章目录 0x03 Kubernetes 中多集群接入管理实践 1 本地集群创建指定用户管理集群 2 外部集群创建指定用户管理集群 原文
  • linux-vmware tools安装与cdrom挂载

    前述 昨天想直接复制虚拟机centos系统中命令行的内容到主机的txt文档上进行保存 发现不能实现虚拟机与主机之间的直接通讯 后来查资料发现原来是由于我的虚拟机没有安装vwmare tools的缘故 一个下午查资料下来 搞定了cdrom镜像
  • [ Android 编译 ] 如果不指定LOCAL_CERTIFICATE,默认使用哪个key进行签名

    Android 编译 如果不指定LOCAL CERTIFICATE 默认使用哪个key进行签名 尊重原创 转载请注明出处 创作不易 如有帮助请点赞支持 参考 Android系统签名简介 开发系统应用时 通常情况下我们都会在 Android
  • C++详细学习笔记(一)

    首先 本次学习主要参考的书籍是C Primer Plus第六版 为了方便今后参阅 故写下该学习笔记 C 是在C语言基础上开发的一种集面向对象编程 泛型编程和过程化编程于一体的编程语言 是C语言的超集 一 预备知识 C 有三件法宝 1 继承了
  • 计算机系统(四)处理器体系结构

    现代微处理器可以称得上是人类创造的最复杂的系统之一 一块手指甲大小的硅片上 可以容纳一个完整的高性能处理器 大的高速缓存 以及用来连接到外部设备的逻辑电路 到目前为止 我们看到的计算机系统只限于机器语言程序级 我们知道处理器必须执行一系列指
  • 2021-03-07

    昨天 拳王分享了一篇 1个被严重低估的暴利项目 竟多达7种变现方式 玩转1个轻松月入过万 揭秘7种可变现方式的被严重低估的暴利项目 今天 我们分享的是 1个简单至极又赚钱到发指的项目 有人靠它年入7位数 容易可复制 今天分享的是一个极为简单
  • mysql case when多个参数结果

    查看所有学生的姓名班级 如果班级为1表示一年级 2表示二年级 3表示三年级 select s StudentName CASE WHEN s GradeId 1 THEN 一年级 WHEN s GradeId 2 THEN 二年级 WHEN
  • 【NLP】每个NLP工程师都应该知道的10 种不同的 NLP 技术

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • CCNP-冗余链路中的广播风暴、多帧复制、地址表的不稳定

    STP协议 当网络中存在备份链路时 只允许主链路激活 如果主链路因故障而断开后 备用链路才会被打开 广播风暴 在没有避免交换环路措施的情况下 每个交换机都无穷无尽的转发广播帧 广播流量破坏了正常的通信流 消耗了带宽和交换机的CPU资源 直至
  • python一行输出多个空格_python 在同一行依次输入三个值a,b,c,用空格分开,输出 b*b-4*a*c的值...

    拒绝回答一系列代码细节 自行百度学习对应函数 import re import math print Input four numbers seperated by scape enter for ending input myinputs
  • 如何优化算法提高卷积神经网络的泛化能力

    卷积网络的优化方式 方法 说明 使用更多数据 在有条件的前提下 尽可能多地获取训练数据是最理想的方法 更多的数据可以让模型得到充分的学习 也更容易提高泛化能力 使用更大批次 在相同迭代次数和学习率的条件下 每批次采用更多的数据将有助于模型更
  • ZYNQ 7000的硬件SPI控制器配置为三线制SPI

    使用zynq去做一些AD DA的操作时候有些只支持三线制的SPI那么我们如何使用PS端的控制器EMIO到PL端实现3线制呢 以上是SPI0的接口信号 我们可以把PL侧的三线制的SDIO信号 inout 通过一个IOBUF原语进行转换出in
  • 数字电路的逻辑符号

  • Mybatis框架之解决列名(表中的字段名称)和实体类中的属性名不一致

    查询数据的时候 查不到userName的信息 原因 数据库的字段名是user name 而POJO中的属性名字是userName 两端不一致 造成mybatis无法填充对应的字段信息 修改方法 在sql语句中使用别名 解决方案1 在sql语
  • 深入理解CRITICAL_SECTION

    http www cnblogs com dirichlet archive 2011 03 16 1986251 html 摘要 临界区是一种防止多个线程同时执行一个特定代码节的机制 这一主题并没有引起太多关注 因而人们未能对其深刻理解
  • Hive其他优化

    一 关联优化器 在Hive的一些复杂关联查询中 可能同时还包含有group by等能够触发shuffle的操作 有些时候shuffle操作是可以共享的 通过关联优化器选项 可以尽量减少复杂查询中的shuffle 从而提升性能 set hiv
  • GPU显存问题-解决Failed to get convolution algorithm. This is probably because cuDNN failed to initialize

    GPU显存问题 使用服务器跑深度学习代码时出现了这样的问题 Failed to get convolution algorithm This is probably because cuDNN failed to initialize so
  • Docker私有仓库搭建与界面化管理

    一 关于Registry 官方的Docker hub是一个用于管理公共镜像的好地方 我们可以在上面找到我们想要的镜像 也可以把我们自己的镜像推送上去 但是有时候我们的使用场景需要我们拥有一个私有的镜像仓库用于管理我们自己的镜像 这个可以通过