如何估计AWS ECR中docker镜像使用的存储和流量?

rus*_*tam 7 traffic storage docker docker-registry amazon-ecr

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

让我们假设:

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

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

每月_Vol_1 = 500+40*300;- 基本图像仅存储一次

每月_Vol_2 = (500+40)*300; - 每个图像都包含基础图像

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

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

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

Monthly_Traf_3 = 40*60; - 基础镜像不是从AWS ECR下载的,而是从docker hub下载的

更新:

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

仅存储 2 张图像(不进行传输)每月花费我 0.04 美元。根据 AWS ECR 定价(每 1Gb 存储 0.10 美元),亚马逊似乎存储了400Mb的数据。我在 AWS ECS 仪表板中看到的同样是 400Mb。

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

我有 2 个 docker 镜像上传到 AWS ECR:

  1. 基于Mono (409Mb)的SVC (482Mb)
  2. 基于Node (634Mb)的WEB (679Mb)

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

如果AWS存储刚刚添加的层,那么它将存储45+73= 118Mb

AWS如何计算400Mb?奥奥

更新2:

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

从 Docker 版本 1.9 开始,Docker 客户端会先压缩镜像层,然后再将其推送到 V2 Docker 注册表。docker images命令的输出显示未压缩的图像大小,因此它可能返回比DescribeImages返回的图像大小更大的图像大小。