我正在尝试估算使用 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:
- 安全虚拟控制器(482Mb) 基于单核细胞增多症(409MB)
- 网络(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 返回的映像大小更大。