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

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

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

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

Docker デバッグ出力の有効化

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

AWS CloudTrail の有効化

Amazon ECR によって返されるエラーに関する追加情報はAWS CloudTrail、 AWS を有効にすることで検出できます。これは、アカウントのAWS呼び出しを記録するサービスです。 CloudTrail は、ログファイルを Amazon S3 バケットに配信します。によって収集された情報を使用して CloudTrail、AWSサービスに対して正常に行われたリクエスト、リクエスト者、リクエスト日時などを確認できます。オンにしてログファイルを検索する方法など CloudTrail、 の詳細については、AWS CloudTrail「 ユーザーガイド」を参照してください。Amazon ECR CloudTrail で を使用する方法の詳細については、「」を参照してくださいAWS CloudTrail で Amazon ECR アクションをログに記録する

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 のドキュメントを参照してください。