本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
优化 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 拨打电话时设置区域。有关更多信息,请参阅适用于特定编程语言的软件开发工具包文档。