Amazon ECR
用户指南 (API Version 2015-09-21)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

Amazon ECR 故障排除

本章帮助您查找 Amazon ECR 的诊断信息,并为常见问题和错误消息提供故障排除步骤。

启用 Docker 调试输出

要开始调试任何 Docker 相关问题,都需要首先在您的主机实例上运行的 Docker 守护程序中启用 Docker 调试输出。如果在 Amazon ECS 容器实例中使用从 Amazon ECR 拉取的映像,有关启用 Docker 调试的更多信息,请参阅 Amazon EC2 Container Service Developer Guide 中的启用 Docker 调试输出

启用 AWS CloudTrail

有关 Amazon ECR 返回的错误的其他信息,可以通过启用 AWS CloudTrail 发现,它是为您的 AWS 账户记录 AWS 调用的服务,并可向 Amazon S3 存储桶交付日志文件。通过使用 CloudTrail 收集的信息,您可以确定向 AWS 服务成功发出了哪些请求、发出请求的用户、请求时间等等。要了解有关 CloudTrail 的更多信息(包括如何启用该服务及如何查找日志文件),请参阅 AWS CloudTrail User Guide。有关在 Amazon ECR 中使用 CloudTrail 的更多信息,请参阅使用 Amazon ECR 记录 AWS CloudTrail API 调用

为 Amazon ECR 优化性能

以下部分提供了在使用 Amazon ECR 时可用于优化性能的设置和策略建议。

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

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

使用较小基本映像

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

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

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

为了尽量缩短重新构建 Docker 文件和重新上传层需要的时间,请考虑尽早将更改频率最低的依赖项放入 Dockerfile,将经常更改的依赖项(如,应用程序源代码)放在堆栈的后面。

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

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

Copy
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

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

Copy
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 代码从实例的可用区获取区域:

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

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