优化 Amazon ECR 的性能 - Amazon ECR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

优化 Amazon ECR 的性能

使用 Amazon ECR 时,您可以使用以下有关设置和策略的建议来优化性能。

使用 Docker 1.10 及以上版本可利用同时层上传

Docker 镜像由层组成,是镜像的中间构建阶段。Dockerfile 的每一行都会创建新层。当使用 Docker 1.10 及以上版本时,Docker 在默认情况下会在上传至 Amazon ECR 的同时推送尽可能多的层,从而缩短上传时间。

使用较小基本镜像

通过 Docker Hub 提供的默认镜像,可能包含您的应用程序不需要的很多依赖项。请考虑使用其他人在 Docker 社区创建并维护的较小镜像,或使用 Docker 最小 Scratch 镜像构建您自己的基本镜像。有关更多信息,请参阅 Docker 文档中的创建基本镜像

更早将更改最少的依赖性放入您的 Dockerfile

Docker 缓存层,可加速构建时间。如果从最后一次构建至今,某一层上没有任何更改,则 Docker 将使用缓存版本,而不重新构建层。但是,每层都依赖之前出现的层。如果层发生更改,则 Docker 不仅重新编译该层,也会重新编译该层之后出现的所有层。

为了尽量缩短重新构建 Dockerfile 并重新上传层所需的时间,可考虑早些时候将更改频率最低的依赖项放入 Dockerfile。将经常更改的依赖项 (如应用程序的源代码) 稍后放入堆栈。

链接命令以避免不必要文件的存储

在层中创建的中间文件会作为该层的一部分保留,即使该层在后续层中被删除。考虑以下示例:

WORKDIR /tmp RUN wget http://example.com/software.tar.gz RUN wget tar -xvf software.tar.gz RUN mv software/binary /opt/bin/myapp RUN rm software.tar.gz

在本示例中,第一个和第二个 RUN 命令创建的层包含原始 .tar.gz 文件及其所有解压内容。即使第四个 RUN 命令已删除 .tar.gz 文件。这些命令可以链接在一起,构成单独的运行语句,以确保最终 Docker 镜像中不包含不必要的文件。

WORKDIR /tmp RUN wget http://example.com/software.tar.gz &&\ wget tar -xvf software.tar.gz &&\ mv software/binary /opt/bin/myapp &&\ rm software.tar.gz
使用最近的区域终端节点

通过确保使用最靠近所运行应用程序的区域终端节点,可以减少从 Amazon ECR 提取镜像的延迟。如果应用程序在 Amazon EC2 实例上运行,可以使用以下 shell 代码从实例的可用区获取区域:

REGION=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone |\ sed -n 's/\(\d*\)[a-zA-Z]*$/\1/p')

可以使用--region参数将该区域传递给 Amazon CLI 命令,也可以使用命令将该区域设置为配置文件的默认区域。aws configure您还可以在使用 Amazon SDK 拨打电话时设置区域。有关更多信息,请参阅适用于特定编程语言的软件开发工具包文档。