首页 > 其他分享 >学习distribution

学习distribution

时间:2024-05-13 10:07:58浏览次数:22  
标签:http com 必需 学习 registry path distribution true

本文致力于学习使用cncf项目distribution,即原docker registry

官方文档
翻译内容比较主观,请勿完全信任。

基础了解

是什么

是一个无状态、高度可扩展的服务器端应用程序,用于存储并允许您分发容器映像和其他内容。Harbor基于此开发。

基础使用

# 运行容器
docker run -d -p 5000:5000 --restart=always --name registry registry:2
# 镜像推拉使用
docker pull ubuntu
docker image tag ubuntu localhost:5000/myfirstimage
docker push localhost:5000/myfirstimage
docker pull localhost:5000/myfirstimage
# 删除容器
docker container stop registry && docker container rm -v registry

自定义配置

环境变量覆盖性配置

storage:
  filesystem:
    rootdirectory: /path

创建环境变量REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/path即可实现同样的作用。
环境变量规则:以REGISTRY_variable为主体,以_代表缩进级别。

注意:环境变量形式会覆盖配置文件形式,为保证稳定性所以不建议用环境变量的形式。

全量配置列表

官方提供,且某些选项互斥,需要自行调整

点我展开看配置选项
# 必需;便于解析文件前的一致性版本检查。
version: 0.1
# 配置日志系统行为,日志输出到stderr。
log:
  # 访问日志系统的行为管控。
  # 默认情况访问日志会以组合日志形式输出stdout。
  accesslog:
    # 如果要禁用如下设置。
    disabled: true
  # 非必需,默认info,可选error、warn、debug。
  level: debug
  # 非必需,默认text,可选json,logstash;影响日志行键控属性的编码方式。
  formatter: text
  # 非必需,指定字段值字典,会被添加到上下文的每个日志行中,一般用于日志系统混合收集日志后便于区分来源。
  fields:
    service: registry
    environment: staging
  # 对日志的回调行为,下文以邮件形式。
  hooks:
    - type: mail
      disabled: true
      levels:
        - panic
      options:
        smtp:
          addr: mail.example.com:25
          username: mailuser
          password: password
          insecure: true
        from: [email protected]
        to:
          - [email protected]
loglevel: debug # deprecated: use "log"
# 必需配置,且只能单个存储后端。
storage:
  # 本地磁盘
  filesystem:
    # 可选,存储介质的绝对路径。
    # 默认/var/lib/registry。
    # 如果目录不存在,根据umask值创建目录。如umask未设置则默认0777权限
    rootdirectory: /var/lib/registry
    # 可选,允许同时阻止文件系统操作的最大数量。
    # 每个操作都会生成一个新线程,如果许多操作并行完成会导致线程耗尽问题。
    # 默认100,且不能低于25.
    maxthreads: 100
  # Microsoft Azure Blob 存储
  azure:
    # 必需,存储账户名。
    accountname: accountname
    # 必需,存储账户密钥值。
    accountkey: base64encodedaccountkey
    # 必需,根容器路径命名。需要符合储存容器名称要求
    # 指定 image.com/xxxx 中 xxx 字段。
    container: containername
    # 存储目录
    rootdirectory: /az/object/name/prefix
    credentials:
      type: client_secret
      clientid: client_id_string
      tenantid: tenant_id_string
      secret: secret_string
    copy_status_poll_max_retry: 10
    copy_status_poll_delay: 100ms
  # 谷歌云存储驱动  
  gcs:
    # 必需,存储桶名称
    bucket: bucketname
    # 校验密钥文件
    keyfile: /path/to/keyfile
    credentials:
      type: service_account
      project_id: project_id_string
      private_key_id: private_key_id_string
      private_key: private_key_string
      client_email: [email protected]
      client_id: client_id_string
      auth_uri: http://example.com/auth_uri
      token_uri: http://example.com/token_uri
      auth_provider_x509_cert_url: http://example.com/provider_cert_url
      client_x509_cert_url: http://example.com/client_cert_url  
    rootdirectory: /gcs/object/name/prefix
    chunksize: 5242880
  s3:
    accesskey: awsaccesskey
    secretkey: awssecretkey
    region: us-west-1
    regionendpoint: http://myobjects.local
    forcepathstyle: true
    accelerate: false
    bucket: bucketname
    encrypt: true
    keyid: mykeyid
    secure: true
    v4auth: true
    chunksize: 5242880
    multipartcopychunksize: 33554432
    multipartcopymaxconcurrency: 100
    multipartcopythresholdsize: 33554432
    rootdirectory: /s3/object/name/prefix
    usedualstack: false
    loglevel: debug
  # 无参数,使用运行内存存储数据,仅测试使用。
  inmemory:  
  # 标签查找并发限制
  # 删除manifest时,程序会查找所有引用该manifest的tag
  # 会迭代所有tag的链接文件以检查是否与manifest匹配
  tag:
    # 对于s3等对象存储,由于调用查询api,所以tag越多性能越差
    # 该标志会限制并发查询以优化查找性能
    # 0或不设置时使用 GOMAXPROCS 的值
    concurrencylimit: 8
  # 开启后可以通过digest删除blob和manifests  
  delete:
    enabled: false
  # 管理对后端内容的重定向  
  redirect:
    disable: false
  # 缓存图层元数据的快速访问。  
  cache:
    # 可选redis、inmemory
    blobdescriptor: redis
    # 如果设置inmemory则可设置下面字段
    # 默认10000,为0则允许缓存增长无限制
    blobdescriptorsize: 10000
  # 维护配置  
  maintenance:
    # 默认启用,上传清理,一个后台进程,定期删除上传目录中孤立的文件
    uploadpurging:
      enabled: true
      # 超龄删除对象
      age: 168h
      # 清理任务间隔时间
      interval: 24h
      # true时则获取将要删除目录的摘要
      dryrun: false
    # 清理时registry的只读性调整。
    # 开启后会阻止对存储后端写入数据以便可以运行垃圾收集。
    # 建议gc前设置为true并重启。
    readonly:
      enabled: false
# 可选,用于配置身份验证,单一有效 
auth:
  # 仅开放使用
  # 检查HTTP请求中是否存在Authorization标头而不检查值
  # 失败则会使用质询响应进行响应,回显访问被拒绝的领域、服务和范围。
  silly:
    # 必需,注册服务器进行身份验证的领域
    realm: silly-realm
    # 必需:正在被验证的服务
    service: silly-service
  # 基于令牌的身份验证  
  token:
    # 非必需
    # true:realm将自动使用请求的Host标头作为域和路径(/auth/token),否则由autoredirectpath指定
    # realm会使用X-Forwarded-Proto标头,否则https
    autoredirect: true
    # 必需
    realm: token-realm
    # 必需
    service: token-service
    # 必需
    issuer: registry-token-issuer
    # 必需,根证书包的绝对路径
    rootcertbundle: /root/certs/bundle
  #   
  htpasswd:
    realm: basic-realm
    path: /path/to/htpasswd
# 可选,在指定的挂钩点注入中间件。每个中间件必须实现与其包装的对象相同的接口
middleware:
  registry:
    - name: ARegistryMiddleware
      options:
        foo: bar
  repository:
    - name: ARepositoryMiddleware
      options:
        foo: bar
  storage:
    - name: cloudfront
      options:
        baseurl: https://my.cloudfronted.domain.com/
        privatekey: /path/to/pem
        keypairid: cloudfrontkeypairid
        duration: 3000s
        ipfilteredby: awsregion
        awsregion: us-east-1, use-east-2
        updatefrequency: 12h
        iprangesurl: https://ip-ranges.amazonaws.com/ip-ranges.json
  storage:
    - name: redirect
      options:
        baseurl: https://example.com/
# registry的http服务器配置        
http:
  # 服务器链接地址
  addr: localhost:5000
  # 如果不在根路径运行,需要设置前缀值,开头结尾要有斜杠
  prefix: /my/nested/registry/
  # 外部可访问的地址
  host: https://myregistryaddress.org:5000
  # 非必需,对状态签名的随机数据。
  # 省略时会自动生成密钥
  # 如果在SLB后构建registry集群需要确保所有的密钥都相同
  secret: asecretforlocaldevelopment
  # 如果为true,会在location标头中反馈相对url,客户端自行解析正确url,docker1.7及之前不支持
  relativeurls: false
  # 非必需,注册表收到sigterm信号后关闭之前的http链接的等待时间
  draintimeout: 60s
  # 可选,配置服务的tls,建议外部nginx而非registry的tls
  tls:
    # 以下两个必需,证书路径
    certificate: /path/to/x509/public
    key: /path/to/x509/private
    # x509 CA的绝对路径数组
    clientcas:
      - /path/to/ca.pem
      - /path/to/another/ca.pem
    # 可选,配置自动更新免费证书
    letsencrypt:
      cachefile: /path/to/cache-file
      email: [email protected]
      hosts: [myregistryaddress.org]
      directoryurl: https://acme-v02.api.letsencrypt.org/directory
  # 可选,可用于监控服务指标、运行状态。
  # 如果开启,notification、redis、proxy统计信息通过/degbug/vars路径暴露
  debug:
    addr: localhost:5001
    # 启动prometheus,均非必需
    prometheus:
      enabled: true
      path: /metrics
  # 可选,指定请求塞入的响应标头    
  headers:
    X-Content-Type-Options: [nosniff]
  # 可选,控制基于TLS的http/2,如果tls没有配置则忽略
  # 要通过非TLS启动HTTP/2请用 h2c
  http2:
    disabled: false
  # 可选,常用于SLB后部署多节点时  
  h2c:
    enabled: false
# 可选    
notifications:
  # 提供信息额外信息
  events:
    # 如果开启则额外提供参考信息
    includereferences: true
  # 配置可接受事件通知  
  endpoints:
    - name: alistener
      disabled: false
      # 必需,要通知的请求对象
      url: https://my.listener.com/event
      # 必需,添加静态标头
      headers: 
      # 必需
      timeout: 1s
      # 必需,在故障退出前的等待时间
      threshold: 10
      # 必需,服务失败后要多久才重试的时间
      backoff: 1s
      # 非必需,要忽略的某婊媒体类型
      ignoredmediatypes:
        - application/octet-stream
      ignore:
        mediatypes:
           - application/octet-stream
        actions:
           - pull
redis:
  addr: localhost:6379
  password: asecret
  db: 0
  dialtimeout: 10ms
  readtimeout: 10ms
  writetimeout: 10ms
  pool:
    maxidle: 16
    maxactive: 64
    idletimeout: 300s
  tls:
    enabled: false
# 可选,健康检查
# 如果http中开启了debug,会提供 /debug/health
health:
  # 对存储检查
  storagedriver:
    enabled: true
    # 充值存储检查之间的等待时间
    interval: 10s
    # 表示在状态被标记为不健康之前检查必须失败的次数
    # 未指定则单次故障就标记不健康
    threshold: 3
  # 定期检查路径是否存在文件,如果存在则健康检查会失败
  # 所以可以通过该机制创建文件以将服务脱离循环(?)
  file:
    - file: /path/to/checked/file
      interval: 10s
  # 定期检查Head请求    
  # 如果未完成或代码非statuscode则失败
  http:
    # 必需,要检查的url
    - uri: http://server.to.check/must/return/200
      # 添加到每个请求的标头 
      headers:
        Authorization: [Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==]
      statuscode: 200
      timeout: 3s
      interval: 10s
      threshold: 
  # tcp地址健康检查,tcp链接失败则健康检查失败。
  tcp:
    # 检查地址 
    - addr: redis-server.domain.com:6379
      timeout: 3s
      interval: 10s
      threshold: 3
# 可选,对指定仓库配置缓存      
proxy:
  # 远端地址
  remoteurl: https://registry-1.docker.io
  # 账号密码
  username: [username]
  password: [password]
  # 代理缓存有效期时长,默认7天(168h)。要触发清理,需要开启`delete`模块。
  # 0为禁止过期,要求后缀单位ns、us、ms、s、m、h,如果没有时间单位则默认为纳秒。
  ttl: 168h
validation:
  manifests:
    urls:
      allow:
        - ^https?://([^/]+\.)*example\.com/
      deny:
        - ^https?://www\.example\.com/

标签:http,com,必需,学习,registry,path,distribution,true
From: https://www.cnblogs.com/yulinor/p/18184473

相关文章

  • 43.Android 网络编程的简单学习整理
    关于Android网络通信编程Android对HTTP通信提供了支持通过标准的JAVA类HttpURLConnection便可以实现基于URL的请求及响应功能关于URL和URI还分不清吗然后还有就是GET和POST方式提交数据注意使用GET或者POST方式提交参数时为了防止中文乱码要对参数进行编码使用Web......
  • 算法学习笔记(18):珂朵莉树
    珂朵莉树这个名字我猜是来源于初次诞生这个算法的题目->Willem,ChthollyandSeniorious算法适用于数据随机,并且有区间推平操作,也就是区间赋值操作,就可以用set维护,达到优秀的\(O(nlogn)\)时间复杂度。定义structNode{ intl,r; mutableintv; Node(intl,intr......
  • pytest 学习 - 01 setup与teardown
    前言与unitest一样,python也拥有前置(setup)、后置操作(teardown)操作,而且更加的灵活setup与teardown介绍1.模块级别(setup_module/teardown_module)模块始末,全局的(优先最高)2.函数级(setup_function/teardown_function)只对函数用例生效(不在类中)3.类级(setup_class/teardown_c......
  • RAG学习--pdf读取
    RAG流程:线下:1、文档加载2、文档切分3、向量化4、向向量数据库灌数据线上:1、获取用户问题2、用户问题向量化3、检索向量数据库4、将检索结果和问题填充到pomp模板5、用最终获得的pomp调用LLM6、最终由LLM生成回复本篇完成文档加载与切割(pdf加载与切割)1、文档加载......
  • 2024年,Rust和Go学习哪个更有优势
    在编程语言的世界里,技术的更新迭代速度一直都是非常快的。而在2024年这个特殊的年份,Rust和Go这两门编程语言备受关注,成为了许多程序员学习的焦点。那么,在这两者之间,到底该选择学习哪个,才能更具优势呢?本文将从各个方面分析比较Rust和Go,帮助读者更好地做出决策。1.语言特性比较Ru......
  • 分治思想求众数_虽然效率不好_但是便于学习分治的思想方法
    //解释:/*采用分治法的思想在这道题中的体现就是对于一个区间去分成两份,然后count函数的作用是对于一个区间段的函数去进行统计某个数的个数find函数的作用是负责把区间分开,然后对比两个区间中的出现次数更多的数,把这个数作为这两个区间合成的区间的众数。对比的依据就是count......
  • Desmos 3D 学习记录
    前言试用美国人设计的软件Desmos3D,对网友的使用作以记录。持续编辑中...试用案例✍️用Desmos3D制作正方体,相关命令记录;法1:在输入栏依次手动输入,不能复制,x=[-2,2]{|y|<=2}{|z|<=2}y=[-2,2]{|x|<=2}{|z|<=2}z=[-2,2]{|y|<=2}{|x|<=2}法2:在输入栏依次手动输入,不能复制......
  • 数据结构学习笔记-先序遍历森林
    先序遍历森林问题描述:设计算法输出先序遍历的森林节点及其所在的层次【算法设计思想】1.数据结构定义首先,定义二叉树节点的数据结构。每个节点包含存储数据的data字段,以及指向左右子节点的指针(lChild和rChild)。这种数据结构是二叉树和森林表示的基础。2.先序遍历单棵树设......
  • 再次学习类2
    迭代器:for循环实际是对容器使用iter(),iter()实际会调用该对象的__iter__()方法,返回一个定义了__next__()方法的迭代器对象,该迭代器可以逐一访问容器中的元素,使用next()内置函数调用该对象的__next__()方法,next()越界触发StopIteration异常提示for循环结束classCustomIter:......
  • 策略梯度玩 cartpole 游戏,强化学习代替PID算法控制平衡杆
     cartpole游戏,车上顶着一个自由摆动的杆子,实现杆子的平衡,杆子每次倒向一端车就开始移动让杆子保持动态直立的状态,策略函数使用一个两层的简单神经网络,输入状态有4个,车位置,车速度,杆角度,杆速度,输出action为左移动或右移动,输入状态发现至少要给3个才能稳定一会儿,给2个完全学不明白,......