

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon ECR のパフォーマンスを最適化する
<a name="performance"></a>

設定および戦略に関する次の推奨事項を使用して、Amazon ECR を使用する際のパフォーマンスを最適化できます。

レイヤーの同時アップロードを利用するには、Docker 1.10 以降を使用する  
Docker イメージは、イメージの中間ビルドステージであるレイヤーで構成されます。Dockerfile の各行により、新しいレイヤーが作成されます。Docker 1.10 以降を使用する場合、Docker はデフォルトで可能な限り多くのレイヤーを Amazon ECR への同時アップロードとしてプッシュし、それによりアップロード時間が高速になります。

小さなベースイメージを使用する   
Docker Hub を通じて利用できるデフォルトイメージには、アプリケーションが要求しない多くの依存関係が含まれている場合があります。Docker コミュニティで他のユーザーによって作成、管理される、より小さいイメージを使用するか、Docker の最小スクラッチイメージを使用して独自のベースイメージを構築することを検討します。詳細については、Docker のドキュメントの「[ベースイメージの作成](https://docs.docker.com/engine/userguide/eng-image/baseimages/)」を参照してください。

Dockerfile で、最も変更の少ない依存関係を前に配置する   
Docker はレイヤーをキャッシュし、それによりビルド時間を高速化します。最後のビルド以降にレイヤーで何も変更されていない場合、Docker はレイヤーを再構築する代わりにキャッシュしたバージョンを使用します。ただし、各レイヤーは、それ以前のレイヤーに依存しています。レイヤーが変更された場合、Docker はそのレイヤーだけでなく、そのレイヤーの後のレイヤーも同様に再コンパイルします。  
Docker ファイルの再構築と、レイヤーの再アップロードに必要な時間を最小化するため、最も変更を行わない依存関係を 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
```
この例では、最初と 2 番目の RUN コマンドによって作成されたレイヤーには、元の .tar.gz ファイルと解凍されていないそのすべてのコンテンツが含まれます。ただし、.tar.gz ファイルは 4 番目の RUN コマンドによって削除されます。これらのコマンドを 1 つの 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 インスタンスで実行されている場合、次のシェルコードを使用して、インスタンスのアベイラビリティーゾーンからリージョンを取得できます。  

```
REGION=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone |\
     sed -n 's/\(\d*\)[a-zA-Z]*$/\1/p')
```
リージョンは AWS CLI パラメーターを使用して **--region** コマンドに渡すか、**aws configure** コマンドを使用してプロファイルのデフォルトリージョンとして設定できます。また、AWS SDK を使用して呼び出しを行うときに、リージョンを設定することもできます。詳細については、ご使用の特定のプログラミング言語の SDK のドキュメントを参照してください。