本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以使用下列有關設定和策略的建議來優化使用 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 撥打電話時設定區域。如需詳細資訊,請參閱您特定程式設計語言的開發套件文件。