如何在容器中部署大型Web应用程序以最小化数据传输

38次阅读
没有评论

问题描述

目前使用svn来部署Web应用程序的特定版本。传输的数据量仅为当前部署版本与正在部署版本之间的差异,这是相当小的。每周部署数百次,部署到数百台机器上。

用户希望在容器中运行应用程序以进行额外的测试、快速回滚和服务分离,但是存在一个问题。在创建容器时,用户将整个应用程序复制到容器中作为一个层,然后通过所有测试、安全扫描等运行容器。但是在部署过程中,传输的数据量是每次都是整个包含应用程序的层。用户希望找到一种方式来最小化数据传输量,只传输版本之间的差异,这是一种标准的方法,并且有一些相关的工具。用户认为自己不是唯一一个尝试解决这个问题的人。

所以在实施自己的解决方案之前,用户想知道你会怎么做。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在容器中运行svn up而不是复制完整的源代码,这样容器的层会稍小一些,并且可以逐步向基础镜像前进。

方案2

用户可以考虑使用基于差异的部署工具,例如rsyncgit。这些工具可以仅传输版本之间的差异,而不是整个应用程序。以下是一个简单的示例:

  1. 首先,将应用程序的源代码存储在一个版本控制系统中,例如git
  2. 在每次部署时,使用版本控制系统的工具来计算当前部署版本与要部署版本之间的差异。
  3. 使用rsyncgit等工具,仅传输差异部分到目标机器上的容器中。

这种方法可以大大减少数据传输量,只传输版本之间的差异。

方案3

用户还可以考虑使用容器镜像的分层功能。将应用程序的不同部分分别放入不同的层中,然后只传输发生更改的层。这样可以减少传输的数据量。

方案4

用户还可以考虑使用基于容器的持续集成和部署工具,例如Jenkins。这些工具可以自动化构建和部署过程,并且可以根据版本之间的差异来决定需要传输的数据量。

以上是一些可能的解决方案,用户可以根据自己的需求和环境选择适合自己的方法。希望这些解决方案能对用户有所帮助。

参考链接:
https://github.com/moby/moby/issues/21950

正文完