如何估算 AWS ECR 中 Docker 镜像所使用的存储和流量?

如何估算 AWS ECR 中 Docker 镜像所使用的存储和流量?

我正在尝试估算使用 AWS ECR 的每月成本。它将包括:传出流量成本(下载图像)和存储成本(将图像存储在 ECR 中)。

我们假设:

  • 我们正在使用 Mono 构建一些 Web 服务(基本 docker 镜像大小为 500Mb);
  • 我们的 CI&CD 服务器每月构建并将镜像推送到 ECR 300 次。为简单起见,未删除旧镜像;
  • 我们的编译代码在基础图像上添加了 40Mb 的额外层;
  • 我们每月从 AWS 下载图像 60 次;

第一个问题是:如何估算每月存储量? 哪一个等式是正确的?

每月交易量1 = 500+40*300;- 基础镜像仅存储一次

每月交易量2 = (500+40)*300;- 每个图像均包含基础图像

第二个问题是:如何估算来自 AWS 的每月流量?我们假设下载图像的主机不会删除现有数据。

每月流量1 = (500+40)*60; -每次下载基础镜像和附加层时

每月流量2 = 500+40*60; -仅为第一个映像下载基础映像。仅下载应用程序更新

每月流量3 = 40*60;- 基础镜像不是从 AWS ECR 下载,而是从 docker hub 下载

更新:

我在 9 月份将 2 张图片上传到 AWS ECR,并在 2 个月后检查了账单信息。我发现:

我每月只花 0.04 美元存储 2 张图片(不含传输)。根据 AWS ECR 定价(每 1Gb 存储 0.10 美元),亚马逊似乎存储400兆数据量。我在 AWS ECS 仪表板上看到的也是 400Mb。

我尝试理解并计算存储了哪些数据(使用docker 镜像docker 历史命令),但失败了。

我已经将 2 个 Docker 镜像上传到 AWS ECR:

  1. 安全虚拟控制器(482Mb) 基于单核细胞增多症(409MB)
  2. 网络(679Mb)基于节点(634MB)

如果 AWS 存储完整图像,则应存储 482+679=1161Mb

如果 AWS 存储的只是添加的层,那么它应该存储 45+73=118Mb

AWS 如何计算 400Mb?O_o

更新2:

看起来 AWS 存储了完整的图像,但经过了压缩(400Mb 而不是 1161Mb)。根据 http://docs.aws.amazon.com/AmazonECR/latest/APIReference/API_DescribeImages.html

从 Docker 版本 1.9 开始,Docker 客户端会在将映像层推送到 V2 Docker 注册表之前对其进行压缩。docker images 命令的输出显示未压缩的映像大小,因此它返回的映像大小可能比 DescribeImages 返回的映像大小更大。

相关内容