利用Docker Registry服务实现多数据中心的部署优化

Docker Registry 清理镜像最佳实践 是一个强大而高效的解决方案,旨在简化您的 Docker 镜像仓库管理。通过 registry-clean,您可以轻松批量删除过时或不必要的镜像,确保您的仓库保持有序并优化性能。该脚本直观易用,使用户能够轻松管理镜像生命周期,为快节奏的开发环境提供安心。通过 registry-clean 提升您的 Docker 仓库管理体验。 阅读详情

本文来源:Ghostcloud翻译(https://www.ghostcloud.cn/)

本文主要讲解了Docker在跨远程数据中心的部署中所起的作用,以及如何通过Docker技术实现多个数据中心的部署优化。

在生产环境中用Docker来部署服务

  以我之前的公司为例,我们有6个数据中心,运行的服务有400多个。这些服务每隔几分钟就要部署一遍,而且部署工作是由不同的开发小组分头进行的,一天下来要部署90次左右。

  考虑到我们的部署频率这么高,保证部署接口的一致性和标准化是很有必要的,因此我们引入了Docker容器来进行部署,这样,开发团队就不必再考虑服务所采用的开发技术和开发语言,直接将自己的服务打包到Docker镜像,并以镜像的形式来部署有所服务。

  但是Docker镜像有的时候实在很庞大(数百MB),要想将Docker镜像高效地部署到各个数据中心,还是存在一定的困难,在这一点上我们也没少走弯路。

将Docker服务镜像有效部署到各个数据中心

  在部署服务的时候,所有镜像都是以Docker容器的形式运行在数据中心的服务器上的,我们要做的就是将镜像pull到服务器上,然后运行容器。

  我们的解决方案是这样的,把应用的镜像存在私有的Docker Registry中,这里我们用的Artifactory来做Docker Registry ,因为之前我们也一直用的Artifactory来存储其他一些代码包。

  每次部署的时候,我们可以从Artifactory中心镜像仓库里面直接拉取Docker镜像,但是这么做并不是很经济,毕竟在多个数据中心的服务器之间传输镜像会大大增加网络开销。

  如下图所示,我们的java应用镜像是由两个镜像层构成的:一个基础镜像层(大小约为160MB,包括alpine linux + oracle jdk),还有一个应用层,大概60MB,里面是Spring Java应用。

7bd5601f-2969-11e6-9407-0242c0a80002

  如果要在一个数据中心内的10台机子上部署相同的应用,就需要实现10*60MB的跨数据中心传输(从中心仓库传输到远程数据中心的服务器上),这还只是在理想情况下的数据量,前提是在目标服务器上都已经装好了Java基础镜像。

  好在这种情况也不是没有应对之策的,如果我们在本地数据中心建一个Docker registry,并将其作为Docker私有中心镜像仓库的代理缓存的话,就可以最大限度地减少这部分网络开销。

  采用本地数据中心建立Docker registry代理缓存,在10台服务器上部署同一镜像的话,从中心仓库到数据中心就只需要传输60MB的应用层数据,其余9台服务器只需从本地的registry缓存中拉取缓存的应用层数据即可,不过,这种情况的只适合我们目前的部署方式,也就是说,这10台服务器是按顺序进行部署的。

c57c8fd1-2969-11e6-9407-0242c0a80002

  当然,我们也可以定制一个导出—传输—缓存—导入的Docker镜像部署流程,但是这里我们采用了另一种方式,用开源的Docker registry来做代理和缓存,这个开源项目本身就有这两种功能。

Docker Registry正式登场

  私有Docker registry的搭建并不难,大家可以参考docker官方的帮助文档:https://docs.Docker.com/registry,里面有详尽的描述。 搭建Docker Registry代理缓存其实也很简单,而且网上还有相关的教程,照着教程很快就可以把代理缓存搭起来,并从Docker Registry拉取镜像。可惜按照这种教程搭出来的代理缓存效果不咋样,无法满足我们的需求。

  但是我们又不可能再映射到其他私有Registry,只有中心Hub才可以映射,这就是个大问题了。

  然而我们又确实需要减小带宽开销,缩短部署时间,该怎么办呢?自己动手丰衣足食,我们就自己来搞定Docker registry缺失的这个功能。

分析问题,解决问题

  Artifactory提供了Docker API接口,可以对托管的各个Docker镜像仓库进行通信。比方说,如果我们需要获取存储在本地Docker镜像仓库里面的busybox镜像的tag,就可以通过托管该仓库的Artifactory 向镜像仓库发送请求,具体如下:

cced6956-2969-11e6-9407-0242c0a80002

  Docker registry只能映射到公共的Docker Hub,我们的应对办法是对Docker registry镜像调用远程Docker registry URL的每个HTTP请求都进行解析和重写,使之重定向到我们的Artifactory Docker API URL.

这种方案的原理是通过重定向来瞒过Docker registry镜像,用Artifactory Docker镜像仓库取代Docker Hub,与Docker registry进行通信。

引入HAProxy,轻松搞定重定向

  这里我们采用了HAProxy来重写Docker registry发送给中心registry的HTTP请求,当然,HAProxy本身也是以Docker容器的形式运行的。

  HAProxy的详细配置如下,按照这个配置就可以实现HTTP的重写了:

d3d49d94-2969-11e6-9407-0242c0a80002

  上述设置会将Docker镜像发送的每个/v2/*被请求重定向到/artifactory/api/docker/docker-local/v2/*,并发送到Artifactory服务器。

  这里我们用了环境变量来配置Artifactory的 IP和端口号,并将授权信息添加到头部数据中,以验证Artifactory用户的有效性。

  此外,上面的配置还开放了HAProxy的统计功能,供前端和后台服务器调用,方便服务器检测Artifactory是否启动,可否可访问,还可以统计镜像产生的的数据流量。

将Docker registry hook到HAProxy

  接下来要做的就是将Docker registry和HAProxy hook起来,实现二者之间的通信,这样HTTP请求才能转发到我们指定的对象。这里我们用的是docker-compose来hook Docker registry和HAProxy。具体的 docker-compose.yml 文件如下:

dc7e80af-2969-11e6-9407-0242c0a80002

  同样的,为了提高应用的灵活性,这里我们还是用了大量的环境变量设置。根据上面的配置,Compose会到HAProxy路径下去寻找haproxy.cfg文件,并到docker-registry文件夹下去找Docker registry的config.yml文件,这两个文件夹都位于前面指定的WORK路径下,这里的WORK就是一个相对路径,可以根据实际情况设置不同的值。

  配置完成之后,就可以通过下面的bash脚本来启动docker-compose了,这个脚本包含了docker-compose运行所需的所有环境变量:

e27270a7-2969-11e6-9407-0242c0a80002

  启动docker-compose之后,大家就可以通过mirror.example.com:5000访问我们的镜像了。首先我们要来查看一下镜像的内容:

47501e37-296a-11e6-9407-0242c0a80002

  可以看到,这个镜像缓存是空的。下面我们要从Docker中心仓库拉取busybox镜像,并测算一下镜像下载耗时:

4da8c5f3-296a-11e6-9407-0242c0a80002

  首次下载镜像花了3.5秒。

  运行下面的命令,可以看到busybox镜像已经存到Docker镜像缓存中了:

52bdeb27-296a-11e6-9407-0242c0a80002

  下面我们把本地busybox镜像删掉,再拉取一遍试试。第二次拉取的速度应该比第一次快,因为这个镜像已经在缓存中,拉取的时候就不用再去访问中心镜像仓库了,直接从缓存拉取即可。

57907b36-296a-11e6-9407-0242c0a80002

  O了!因为镜像已经存在registry缓存里面了,第二次拉取只花了0.28秒,速度确实有很大的提升。

结论

  本文到这里就结束了。在本教程中,我们在各个远程数据中心建立了本地Docker registry镜像缓存,并映射到私有Artifactory Docker registry中心,此外还实现了应用部署时跨数据中心的数据传输优化。

  当然,这个方案并不完美,还有很大的改进空间。不过,我们最初的目标已经达到了,本教程提供了一种相对简单、透明的方式,优化了多个远程数据中心之间的Docker镜像分布式部署。

  大家也可以在这个方案的基础上加以改进,更好地实现平稳部署。

5分钟搞定!用Docker Registry Mirror加速你的镜像拉取(附详细配置步骤) 本文详细介绍了如何利用Docker Registry Mirror快速搭建企业级镜像加速服务,通过Docker Compose实现五分钟快速部署,显著提升镜像拉取速度。文章包含完整配置步骤、客户端优化方案及生产环境安全加固指南,帮助开发者解决Docker Hub访问缓慢问题,适用于团队协作和CI/CD场景。 阅读详情

相关推荐

四旋翼无人机Matlab建模

本文主要分享一下四旋翼无人机的建模过程,然后在Matlab的simulink模块搭建起四旋翼无人机的模型,下一章将结合这个模型设计双环PID控制器并调节参数。 一、无人机建模过程

qq_36903625的博客 3万+

3分钟部署完成Docker Registry及可视化管理工具Docker-UI

首页展示出了目前容器的运行列表,容器、镜像创建时间及数量。各容器间网络关联情况看起来比较炫,但感觉没啥实用性。镜像镜像列表,可删除、上传新的镜像。

关于代码的那些事 8280

计组实验4 控制冒险与分支预测

目录前言实验内容背景知识分支预测技术⭐阻塞周期计算方法不开启 BTB开启 BTBpart 1 矩阵乘法与优化未开启 BTB 的分析开启 BTB 的分析part 2 设计代码使 BTB 无效part 3 循环展开优化矩阵乘法未开启 BTB开启 BTB结束语结论 前言 上一篇博客:计组实验3 mips冒险之流水线冒险 摸了半个月了。。。咕咕咕 今天来写计组实验 4 这个实验非常简单,就是有点难。 这个实验比较容易算错,或者是被模拟器出人意料的结果搞的神神叨叨的,所以今天来记录并且详细分析该实验。 注:请务必阅

AKGWSB 's blog 5669

docker部署harbor镜像仓库(部署和负载均衡)~转

我们在日常Docker容器使用和管理过程中,渐渐发现部署企业私有仓库往往是很有必要的, 它可以帮助你管理企业的一些敏感镜像, 同时由于Docker Hub的下载速度和GFW的原因, 往往需要将一些无法直接下载的镜像导入本地私有仓库. 而Harbor就是部署企业私有仓库的一个不二之选。

506

Orbbec-Gemini-335 深度相机 Python SDK 编译与配置全记录(Windows 环境)

本篇博客将围绕 Windows 系统下 Orbbec SDK 的 Python 配置与编译过程进行详细说明,主要使用的是官方提供的 pyorbbecsdk Python wrapper 项目以及 Orbbec SDK V2 Python Wrapper 配置指南,并记录了安装与配置过程中遇到的若干问题及解决办法。

Junseer的博客 1968

基于h5端的视频录制和回溯功能的实现

整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。

发果叁 3193

使用Docker Registry-v2搭建镜像仓库详细教程

这条命令的作用是将本地的 mysql:8.0 镜像重新打上标签,使其在本地的 Docker Registry 地址为 192.168.144.140:5000 下,标签仍为 8.0。当我们就可以向仓库提交镜像,会发现镜像根本提交不上去,这是因为Docker Registry V2从安全角度考虑禁止了HTTP协议传输镜像数据,默认支持HTTPS。使用docker镜像启动私有仓库容器服务,将容器内/var/lib/registry路径映射到宿主机/opt/registry用于持久化保存仓库中的镜像。

一位菜鸡的博客 4093

解决西门子Step 7 basic 找不到许可证问题

你在使用博图软件是否遇到过Step 7 basic 找不到许可证的问题呢!不言怕,今天我就来告诉你该如何处理吧!看步骤: 1.删除原授权的License: 打开Automation License Manager应用,然后我们可以发现仅有的License Key前面有一个时钟,说明它已经过期不可用,我们就要去寻求新的Key. 打开“我的电脑”,选择C盘,点击上方查看 点击选项–>查看 然...

让技术没有门槛 14万+

跨区域Docker Registry同步方案探索

随着Docker的兴起和大规模的使用,一个镜像仓库的模式已经没法满足现有的业务需求了。很多公司的生产环境都会有好几个地方,多地多中心模式,一方面灾备一方面也用来节省网络消耗。多地部署必然带来一个问题,分布式环境下镜像文件如何拉取?一个仓库的模式俨然会带来巨大的网络消耗和漫长的等待时间,而且,没法实现镜像仓库的高可用要求。 目前实现分布式环境中镜像仓库的数据主要有如下几种方案: 镜像仓库

stoneapple1122的专栏 2626

DIY T12烙铁头驱动难题:用几个电容二极管,搞定NMOS上管驱动(附Multisim仿真)

本文详细介绍了如何利用电荷泵电路解决DIY T12烙铁头驱动中的NMOS上管驱动难题。通过巧妙组合电容和二极管,构建低成本高效的升压电路,实现栅极高压驱动需求。文章包含具体电路设计、元件选型建议、实际搭建注意事项以及Multisim仿真验证,为电子爱好者提供了一套完整的解决方案。

weixin_33640562的博客 335

AgentScope 实战训练营-A2UI的完整实现:从概念到部署全流程

本文详细介绍了如何在AgentScope框架中实现Google的A2UI(Agent-to-Agent UI)协议,构建一个能生成可交互UI的智能体应用。文章涵盖了从环境准备、架构设计、核心代码实现到测试部署的完整流程,包括A2UI协议解析、技能系统、客户端实现、通信机制等核心技术点,适合AI Agent和前端开发人员学习参考。

program哲学 206

Java服务端的持续交付:GitLab CI/CD与Docker Registry的集成

Docker Hub是一个公共的Docker Registry,用户可以将镜像推送到Docker Hub,也可以将镜像拉取下来使用。在企业环境中,通常会使用私有的Docker Registry来存储和管理Docker镜像,确保安全性和合规性。是GitLab CI/CD的配置文件,通过这个文件可以定义构建、测试、打包和部署的各个阶段。如果你使用的是私有Docker Registry,需要确保它已经配置好,并且能够接收镜像的推送。在GitLab CI/CD管道中,Docker镜像的构建和推送由。

技术研究中心 1088

在 SAP S/4HANA 里把 OData Client Proxy 用顺手,借助 Service Consumption Model 2.0 提前打通远程 OData 调用

摘要:本文探讨了在SAP S/4HANA集成开发中调用外部OData服务的解决方案。传统ABAP代码直接调用方式存在诸多不便,而OData Client Proxy提供了更稳定的途径。文章详细介绍了如何通过Service Consumption Model 2.0在SAP BTP生成模型类,并将其移植到SAP S/4HANA进行适配改造,最终注册为可用的OData Proxy Client。该方法适用于较新版本的SAP S/4HANA系统,通过源码替换实现模型转换,为系统集成提供了高效的类型安全调用方案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1092

Docker私有Registry部署与优化实践指南

容器镜像仓库是现代DevOps流水线的核心基础设施,其核心功能是存储和分发Docker镜像。基于HTTP API的Registry服务采用Go语言开发,支持多种存储后端和认证机制,能够有效解决公共仓库的速度限制和安全合规问题。通过私有化部署,企业可以实现镜像版本统一管理、提升下载速度3-5倍,并集成漏洞扫描等安全功能。典型应用场景包括CI/CD流水线、Kubernetes集群镜像分发和多团队协作开发环境。本文以Docker官方Registry为例,详细解析了从基础部署到企业级高可用架构的完整实施方案,特别针

weixin_34354173的博客 471

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

终极指南:如何在Kubernetes中快速部署Docker Registry UI

Docker Registry UI是专为私有Docker镜像仓库设计的**最简单且功能最完整的用户界面**,它让您能够轻松管理和浏览私有镜像仓库中的容器镜像。通过本指南,您将学习如何在Kubernetes集群中快速部署Docker Registry UI,并配置它与您的私有镜像仓库无缝集成。无论您是Kubernetes新手还是经验丰富的运维工程师,这个完整的部署教程都将帮助您在几分钟内搭建起专业

gitblog_00632的博客 849

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Docker私有Registry部署与运维最佳实践

Docker Registry作为容器镜像的集中存储与分发系统,是现代化DevOps基础设施的核心组件。其基于客户端-服务器架构实现镜像的推送(push)和拉取(pull)操作,采用Go语言开发保证了高性能。在CI/CD流程中,私有Registry能显著加速镜像分发,同时满足企业级安全合规要求。通过配置TLS加密、存储后端优化(如AWS S3)和访问控制(htpasswd认证),可构建安全可靠的镜像仓库。典型应用场景包括网络隔离环境下的镜像管理、多租户隔离以及集成镜像安全扫描工具(如Clair)。生产环境中

axfcjwkbi259888707的博客 464

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Docker Registry 实现原理、适用场景、常用操作及搭建详解

摘要: Docker Registry 是用于存储和分发容器镜像的无状态服务,支持多种存储后端(本地/云存储)和认证方式(基础认证/OAuth2)。其核心功能包括镜像分层管理、API 访问、垃圾回收等,适用于企业私有镜像管理、CI/CD 集成及多环境隔离。部署方案涵盖快速单机版(官方镜像)、企业级方案(Harbor)及高可用架构(S3 存储+负载均衡)。关键注意事项包括强制 HTTPS、存储规划、定期备份及性能调优,确保安全性与稳定性。

tianyuanwo的专栏 1355

Apicurio Registry成本优化:资源利用效率提升全指南

在现代微服务架构中,API和模式注册表作为核心基础设施,其资源消耗直接影响系统的总体拥有成本(TCO)。Apicurio Registry作为一款功能强大的开源API/模式注册表,通过合理的配置优化和架构调整,能够显著降低内存占用、减少CPU消耗并优化存储使用。本文将从架构优化、配置调优、部署策略三个维度,分享6个实用的成本优化技巧,帮助团队在保持系统稳定性的同时实现资源利用效率提升30%以上。

gitblog_00605的博客 865

Docker Registry删除工具对比:为什么选择delete-docker-registry-image?

在管理Docker私有仓库时,随着镜像不断累积,存储空间会迅速被占用。**delete-docker-registry-image**作为一款轻量级工具,专为清理Docker Registry v2版本的镜像和标签设计,帮助用户高效释放磁盘空间。本文将对比主流删除方案,解析为何这款工具能成为私有仓库维护的首选。 ## 一、Docker Registry删除的常见痛点 Docker Regis

gitblog_00312的博客 965

docker-compose搭建私有docker registry

docker hub注册后只可以免费上传一个镜像,不过我们也可以使用其他免费docker仓库,比如腾讯云的免费docker仓库,不受上传限制。 当然我们也可以创建我们自己的私有仓库,再也不用担心上传速度受到影响,并且也更加安全。 示例说明 使用的是win10自带的docker 服务器使用的是centos系统 服务器ip地址以182.61.60.219为例(该IP只是示例,并不可用哦) 仓库端口以8050为例 仓库访问端口以5000为例 仓库UI访问端口以5051为例 本地局域网地址以19..

qq314000558的专栏 1026

Docker MCP服务器镜像仓库:私有Registry的搭建与配置

你是否在寻找一种简单高效的方式来管理Docker MCP(Model Context Protocol)服务器镜像?私有Registry不仅能提高镜像拉取速度,还能确保敏感镜像的安全存储。本文将详细介绍如何使用Docker MCP CLI工具搭建和配置私有Registry,让你轻松掌控MCP服务器镜像的全生命周期管理。读完本文,你将能够创建自定义镜像仓库、导入/导出服务器配置、管理访问权限,并解决...

gitblog_00412的博客 1033

Apicurio Registry无服务器部署:Serverless架构实践指南

Apicurio Registry是一款功能强大的API和Schema注册中心,能够帮助开发者高效管理各类API规范和数据模型。随着云原生技术的普及,无服务器(Serverless)架构凭借其按需付费、自动扩缩容的特性,成为现代应用部署的理想选择。本文将详细介绍如何在Serverless环境中部署Apicurio Registry,帮助您轻松实现高可用、低成本的API管理方案。 ## 为什么选择

gitblog_00115的博客 1059

Registry,Harbor镜像仓库部署

镜像仓库是容器化环境中不可或缺的组件,用于存储和管理Docker镜像。本文介绍了两种常见的镜像仓库解决方案:Docker Registry和Harbor,并简单说明了关键特性以及部署过程

海阔鱼跃,铭心绘梦 2292

Docker-Registry高级配置与部署指南

Docker-Registry作为Docker镜像的存储和分发系统,在生产环境中需要根据实际需求进行各种高级配置。本文将深入探讨Docker-Registry的高级功能、部署方案和优化配置,帮助运维人员构建稳定高效的私有镜像仓库。 ## 扩展功能安装与配置 ### 扩展功能概述 Docker-Registry提供了多种扩展功能,这些功能需要额外的依赖支持: 1. **官方容器**:所有扩展

gitblog_00855的博客 951

4.2 Docker Registry(3): 配置和管理 Docker Registry

通过合理的配置和管理,你可以确保私有 Docker Registry 的安全性、性能和可维护性。启用 HTTPS、身份验证、访问控制、日志记录、镜像签名和扫描等功能,可以有效提升私有镜像仓库的安全性和可靠性。结合 CI/CD 工具和自动化流程,可以实现高效的镜像构建和部署。定期备份和恢复计划可以确保数据的安全性,避免因故障导致的数据丢失。无论是个人开发者还是企业用户,私有镜像仓库都是一个不可或缺的工具,能够显著提升开发和运维效率,确保应用程序的安全性和一致性。

xiaoheshang_123的博客 2059
上一篇: 利用Docker Registry服务实现多数据中心的部署优化
下一篇: 应用程序跑在Docker容器中会更安全
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值