AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1018769
Accepted
MikeVelazco
MikeVelazco
Asked: 2020-05-27 08:06:19 +0800 CST2020-05-27 08:06:19 +0800 CST 2020-05-27 08:06:19 +0800 CST

是否有可能有一个故障转移/备份 docker 注册表?

  • 772

自从上周quay.io 失败以来,公司里的每个人都认识到服务的重要性。这在我脑海中提出了这个问题:

如果再次发生这种情况,我的基础设施如何准备好使用辅助 docker 容器注册表以防第一个不可用?

amazon-web-services docker-registry docker amazon-ecr
  • 1 1 个回答
  • 1369 Views

1 个回答

  • Voted
  1. Best Answer
    BMitch
    2020-05-30T07:15:30+08:002020-05-30T07:15:30+08:00

    到目前为止,docker 引擎有一个--registry-mirror选项,但仅适用于配置 Docker hub 的镜像。关于是否或如何调整以允许镜像其他注册管理机构存在一些悬而未决的问题,但没有足够的牵引力来做出这种改变。如果您的上游注册表是 docker hub,使用此标志指向本地缓存或镜像非常有用,因为对集线器的请求会自动首先尝试此镜像,然后在失败时会尝试上游注册表。这意味着您无需调整图像名称或担心本地中断。

    Containerd 也有类似的选择,它支持任何上游注册中心,所以我相信这就是我们最终将要做的。但是,如果您使用的是 docker,即使使用了 containerd,我相信 docker 引擎仍在进行图像推送和拉取。


    由于无法在 containerd 中进行配置,我已经看到了一些用于缓存来自其他注册表的图像的选项:

    • 配置像 squid 这样的 HTTP 缓存代理。您确实希望确保这会定期刷新可变响应,例如图像清单。图层本身应保持不变,以便您可以将它们缓存很长时间。

    • 直接从另一个镜像或缓存注册表中提取。

    • 使用一些 DNS/TLS 劫持将请求发送到您的缓存或镜像。


    通过缓存注册表配置拉取非常简单:

    docker run -p 5000:5000 -e REGISTRY_PROXY_REMOTEURL=<upstream-url> registry:2
    

    但是,我倾向于运行镜像,因为通过缓存配置了7 天的条目过期时间。因此,如果发生中断并且您的条目最近从您的拉取缓存中过期,您将受到该中断的影响。

    运行镜像涉及运行注册表,就像通过缓存拉取一样,然后复制您想要镜像的那些图像。想到Harbor,一些注册中心提供镜像作为一项功能。您指定要镜像到或从哪些远程注册表。我个人使用 shell 脚本进行镜像,因为它允许我备份旧图像(如果标签在上游被替换,大多数镜像将替换标签,让您没有恢复选项)。然后,我将该脚本包含在我的 CI/CD 工作流程中,以便在适当的时间运行,例如在 sprint 开始时或每周一早上。此镜像脚本的示例在我的演示文稿存储库中。


    在本地注册表中获得可用映像后,您需要将 docker 配置为从该注册表中提取。如果没有该--registry-mirror选项,您要么需要调整映像名称,要么在网络/docker 主机上配置 DNS/TLS,以将请求指向本地注册表而不是上游注册表。后一个选项看起来很有吸引力,因为它允许您在不进行任何更改的情况下运行 docker 命令,图像构建、组合堆栈、掌舵图等都可以像与远程注册表对话一样工作。但是,管理您自己的 TLS 证书和自签名 CA 更容易出错,您网络上的所有主机都需要配置为信任。所以对我来说最简单的选择就是调整注册表名称。在我的 Dockerfile 中,我会有类似的东西:

    ARG REGISTRY=docker.io
    FROM ${REGISTRY}/library/alpine:3.9
    

    这允许该图像由网络之外的其他人构建。然后在我的网络上的构建命令中,我将用我的本地镜像覆盖 arg:

    docker build --build-arg REGISTRY=local-mirror:5000 .
    

    我在docker-compose.yml带有变量的文件中做同样的事情:

    image: ${REGISTRY:-docker.io}/my/repo:and-tag
    

    然后在本地部署,例如:

    REGISTRY=local-mirror:5000 docker-compose up -d
    

    我在我的 DockerCon 演示文稿中介绍了这一点。幻灯片发布在我的 github 上:https ://github.com/sudo-bmitch/presentations/tree/master/registry

    演示在线:https ://www.youtube.com/watch?v=Bm7g0saAC9k

    • 1

相关问题

  • 与 AWS 中的其他系统相比,CentOS 报告的总内存较低

  • 如何在 Amazon Linux 服务器上升级到 Java 1.8?

  • 了解 Amazon AWS 使用数据

  • 亚马逊提供的负载均衡服务体验如何?

  • ELB 中现有节点的 AWS 自动缩放问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve