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

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

本文来源:Ghostcloud翻译。

本文主要讲解了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场景。 阅读详情

相关推荐

IEEE Access投稿全流程:从LaTeX模板到Overleaf实战(附避坑指南)

本文详细解析了向IEEE Access期刊投稿的完整流程,重点介绍了如何使用LaTeX模板在Overleaf平台上高效撰写和格式化论文。内容涵盖模板选择、作者信息填写、公式图表排版、参考文献管理(BibTeX)以及投稿前的最终检查清单,旨在帮助研究者,尤其是LaTeX新手,规避常见技术问题,顺利完成符合期刊严格要求的稿件提交。

open4的博客 578

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

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

关于代码的那些事 8280

【基金量化研究系列】基金绩效归因模型——Brinson多期归因模型之python实现

文章目录1. 引言2. Brinson多期归因模型的Python实现2.1 基准数据读取模块2.2 持仓数据读取模块2.3 持仓收益与基准计算模块2.4 Brinson多期归因模型核心算法Brinson_Multiple2.5 主函数模块3. 归因结果写在最后 1. 引言 在上文中,我们已经介绍了Brinson归因模型的基本思想。那么,就让我们动起手来,实现这一方法吧! 在Brinson多期归因模型实现的过程中,本文使用模块化方法,将整个实现过程划分为如下五个功能板块: Module 1: 基准数据读取模

Mikey_Sun的博客 2万+

使用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

【SAM2系列】windows单GPU复现时的bug解决记录

windows运行sam2,就感觉在开一艘破破烂烂的船,每走一步报一个错,bug源源不断的冒出来😭😭😭😭😭。

weixin_43571113的博客 1317

0/1背包问题:从暴力递归到动态规划详解

题目: 有一组数量为 n 个物品,每个物品都有重量w 和价值v 给定一个背包bag,背包装的物品不能超过背包最大载重容量返回背包bag 能装下的最大价值1. 物品的重量和价值:2. 背包的容量:暴力解法的核心是递归,通过逐一决策每个物品是否放入背包,最终找到最优解。状态定义:递归逻辑:递归终止条件: 动态规划解法 递归的暴力解法有重复子问题,导致了大量的重复计算。为了解决这个问题,我们可以使用动态规划来优化。状态定义:状态转移:边界条件: 测试方法 示例解析 假设:我们希望找到在容量为

Mr.Ayao's blog 2068

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

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

506

从USB相机标定到Aruco码精准定位:基于aruco-ros的机器人视觉实践

本文详细介绍了基于aruco-ros的机器人视觉实践,从USB相机标定到Aruco码精准定位的全流程。通过实战案例和优化技巧,展示了Aruco码在机器人导航中的高精度位姿识别能力,帮助开发者快速实现毫米级视觉定位系统。

weixin_27310417的博客 487

Docker 开源项目之 registry - 配置 registry

原文地址 Registry 的配置基于 YAML 文件,下面会详细描述。虽然它带有默认值,但你应该在将系统移至生产环境之前进行详尽的检查。 1. 覆盖特定的配置选项 在从官方镜像运行 registry 的典型设置中,可以通过将 -e 参数传递环境变量到 docker run 或使用 ENV 指令从 Dockerfile 中指定一个配置变量。 要覆盖配置选项,请创建一个名为 REGISTRY...

kikajack的博客 1万+

扬声器设计避坑指南:用Comsol分析反电动势对THD的影响(附案例文件)

本文深入探讨了扬声器设计中反电动势对总谐波失真的关键影响。通过COMSOL仿真,详细分析了BL值非线性、音圈电感变化等电磁-力-声耦合机制,并提供了从参数化建模到系统级优化的实战指南,帮助工程师精准量化并降低谐波失真,提升扬声器音质。

xx56789的博客 525

中兴B860AV2.1-A刷机避坑指南:晶晨免拆神器+安卓7.1.2固件实测

本文提供中兴B860AV2.1-A机顶盒的详细刷机教程,重点介绍使用晶晨免拆神器配合安卓7.1.2线刷固件包的实操步骤。内容涵盖刷机前的硬件确认、工具准备、软件设置、烧录全过程监控及常见问题解决,旨在帮助用户安全、高效地完成刷机,规避变砖风险,释放设备潜力。

pytorch8learner的博客 750

跨区域Docker Registry同步方案探索

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

stoneapple1122的专栏 2626

DC/DC开关电源学习笔记(一)开关电源技术概述

开关模式电源(Switch Mode Power Supply,简称SMPS),又称交换式电源、开关变换器,是一种高频化电能转换装置,是电源供应器的一种。其功能是将一个位准的电压,透过不同形式的架构转换为用户端所需求的电压或电流。开关电源的输入多半是交流电源(例如市电)或是直流电源,而输出多半是需要直流电源的设备,例如个人电脑,而开关电源就进行两者之间电压及电流的转换。【百度百科】

小幽余生不加糖 1623

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

IEM模型,地表粗糙度模拟

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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

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

weixin_34354173的博客 471

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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

gitblog_00632的博客 849

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

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

axfcjwkbi259888707的博客 464

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

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

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

gitblog_00855的博客 951

Registry,Harbor镜像仓库部署

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

海阔鱼跃,铭心绘梦 2292
上一篇: Tutum公司简介
下一篇: 利用Docker Registry服务实现多数据中心的部署优化
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值