最佳化 Amazon ECR 的效能 - Amazon ECR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

最佳化 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 不僅會重新編譯該分層,也會重新編譯任何之後的分層。

若要將重建 Docker 檔案與重新上傳分層的時間縮至最短,請考慮在您的 Docker 檔案中先置放變更頻率最少的依存項目。並稍後在堆疊中置放快速變更的依存項目 (例如您的應用程式原始碼)。

鏈結命令以避免不必要的檔案儲存

分層上建立的中介檔案即使在後續分層中被刪除了,仍將保持為該分層的一部分。請思考下列範例:

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 檔案刪除,這些命令可鏈結在一起成為單一的 RUN 陳述式,以確保這些不必要的檔案不會成為最終 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 參數將區域傳遞至 AWS CLI 命令,或使用 aws configure命令將 設定為設定檔的預設區域。您也可以在使用 AWS SDK 進行呼叫時設定 區域。如需詳細資訊,請參閱您特定程式設計語言的開發套件文件。