Amazon ECR
ユーザーガイド (API バージョン 2015-09-21)

Amazon ECR トラブルシューティング

この章では、Amazon Elastic Container Registry (Amazon ECR) の診断情報と、一般的な問題とエラーメッセージのトラブルシューティングステップを示します。

Docker デバッグ出力の有効化

Docker 関連の問題をデバッグを開始するには、最初にホストインスタンスで実行している Docker デーモンで Docker デバッグ出力を有効にします。Amazon ECS コンテナインスタンスの Amazon ECR からプルしたイメージを使用している場合の Docker デバッグの有効化の詳細については、Amazon Elastic Container Service Developer Guide の「Docker デバッグ出力の有効化」を参照してください。

AWS CloudTrail を有効にしています

Amazon ECR によって返されるエラーに関する追加情報は、AWS CloudTrail を有効にすることで検出できます。これは、AWS アカウントの AWS コールを記録するサービスです。CloudTrail は、Amazon S3 バケットにログファイルを配信します。CloudTrail が収集した情報を使用して、成功した AWS サービスリクエスト、そのリクエストの送信者、そのリクエストの送信時間などを確認できます。CloudTrail の詳細(有効にする方法、ログファイルを検索する方法を含む)については、AWS CloudTrail User Guide を参照してください。CloudTrail と Amazon ECR の使用の詳細については、「AWS CloudTrail を使用した Amazon ECR 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 で前に配置します。頻繁に変更を行う依存関係 (アプリケーションのソースコードなど) はスタックで後に配置します。

コマンドをチェーン処理して不要なファイルの保存を避ける

レイヤーで作成された中間ファイルは、それ以降のレイヤーで削除された場合でも、そのレイヤーの一部として残ります。次の例を考えます。

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')

リージョンは --region パラメーターを使用して AWS CLI コマンドに渡すか、aws configure コマンドを使用してプロファイルのデフォルトリージョンとして設定できます。また、AWS SDK を使用して呼び出しを行うときに、リージョンを設定することもできます。詳細については、ご使用の特定のプログラミング言語の SDK のドキュメントを参照してください。