イメージ構築診断機能は、例外、潜在的なリスク、およびイメージ構築プロセスを最適化する機会を特定します。このトピックでは、診断チェックについて説明し、修正の提案を提供します。
イメージ構築診断の概要
イメージ構築診断機能は、専門家の経験と Tongyi Qianwen の AI 機能を組み合わせて、問題の根本原因を正確に特定し、実行可能な修正の提案を提供します。
イメージ構築診断機能を使用すると、サービスはご利用の Container Registry (ACR) インスタンスに関連するデータを収集します。このデータには、インスタンス情報、イメージ構築設定、ビルドタスクログ、およびイメージ構築履歴が含まれます。 イメージ構築設定に機密データを保存したり、ビルドタスクログに出力したりしないでください。詳細については、「注意事項」をご参照ください。
診断機能は、主に次の 2 つの部分で構成されています:
-
ルール検出:命令チェックとエラーログ分析が含まれます。
-
根本原因分析:特定された根本原因と修正の提案が含まれます。
サービスは、ご利用の ACR インスタンスから関連データを収集し、異常を特定します。その後、詳細な診断を実行して問題の根本原因を特定し、ソリューションを提案します。
診断プロセス
イメージ構築診断は、まずご利用の ACR インスタンスから必要なデータを収集し、その後、例外の詳細な分析を実行します。診断を開始すると、プロセスは次の 3 つのステージで構成されます:
-
データの前処理:インスタンスステータス、リポジトリ設定、ビルドルール情報、ビルドログなどの必要なデータを収集し、ビルド例外を迅速に分析します。
-
ルール検出:収集されたデータを分析して、例外、潜在的なリスク、およびビルドプロセスを最適化する機会を特定します。
-
根本原因分析:収集されたデータと検出項目に基づいて、問題の根本原因を自動的に特定し、修正の提案を提供します。
診断結果
診断結果は、次の 2 つの部分で構成されています:
-
修正が必要な項目:例外の根本原因、修正の提案、および例外の場所が含まれます。
-
AI 診断:例外の詳細に基づいてビルド命令または設定項目を詳細に分析し、包括的な最適化の提案を提供します。
診断ルールと修正の提案
-
[イメージビルド診断] ページで、診断 をクリックします。表示される イメージのビルドタスクを選択する パネルで、次のパラメーターを使用して診断するイメージビルドタスクを選択します。
-
名前空間:イメージ構築タスクが属する名前空間です。
-
リポジトリ:イメージ構築タスクが属するイメージリポジトリです。
-
イメージビルドタスク ID:イメージ構築タスクの ID です。
選択後、注意事項をよく読み、[理解し、同意します] を選択してから、診断の開始 をクリックします。
-
-
診断が完了したら、ページ上の修正の提案に基づいて対応できます。次の表に、一般的な診断ルール、例外の根本原因、および対応する修正の提案を示します。
診断ルールグループ
診断ルール名
根本原因
修正の提案
Dockerfile 構文検出
無効なポート定義
EXPOSE命令のポートまたはプロトコルのフォーマットが正しくありません。EXPOSE命令を使用する場合、ポートが 0 から 65535 までの数値であり、プロトコルが TCP または UDP であることを確認してください。コピー命令の構文検出
複数のソースファイルをコピーする際に、宛先パスがディレクトリではありません。
宛先パスがディレクトリであることを確認してください。
ビルドステージが存在しない
COPY命令で指定されたビルドステージが存在しません。ステージ名が、以前に定義されたビルドステージを参照していることを確認してください。
重複したステージ名
ビルドステージ名が再利用されています。
重複したビルドステージ名を使用しないでください。
無効な最初の命令
最初の命令が
FROMまたはARGではありません。最初の命令が
FROMまたはARGであることを確認してください。コンパイルエラー
Dockerfile でプリコンパイルエラーが発生しました。
Dockerfile の構文エラーを修正するか、根本原因分析による修正の提案をお待ちください。
コンパイル警告
Dockerfile でプリコンパイル警告が発生しました。
Dockerfile 内の関連する命令は、期待どおりに実行されない可能性があるため、見直してください。
イメージタグ検出
ベースイメージのタグが指定されていない
ベースイメージに特定のイメージタグが指定されていません。
固定のイメージタグを指定してください。未指定のタグ (デフォルトは
latest) を使用すると、ベースイメージが予期せず変更される可能性があり、ビルドが予測不能になります。ベースイメージが存在しない
ベースイメージ名が正しくないか、イメージが存在しません。
ベースイメージ名を確認するか、存在する別のベースイメージを選択してください。
ランタイムエラー検出
コマンド実行エラー
コマンドの実行に失敗しました。
Dockerfile で指定されたコマンドが正しいか確認するか、根本原因分析による修正の提案をお待ちください。
コマンドが存在しない
指定されたコマンドが存在しません。
Dockerfile で指定されたコマンドがベースイメージに存在することを確認してください。
ファイルが存在しない
COPY命令内のソースファイルまたはディレクトリが存在しません。Dockerfile の
COPYコマンドで参照されているファイルまたはディレクトリがビルドコンテキストに存在することを確認してください。無効な命令の検出
無効なコマンドの検出
Dockerfile には、
KillやShutdownなどのサポートされていない命令が含まれています。ビルドプロセスで
KillやShutdownなどの命令を使用すると、セキュリティと安定性の問題が発生する可能性があります。これらの命令を削除する必要があります。sudo コマンド検出
sudoコマンドはビルドプロセスでは効果がありません。sudo命令を削除してください。アップロードステージのエラー検出
タグの競合
イメージタグがリポジトリ内の既存のイメージタグと競合しています。
イメージタグの競合を解決するには、リポジトリのタグの不変性機能を無効にするか、同じタグを持つイメージを繰り返しプッシュしないようにしてください。
イメージサイズの最適化検出
apt-get命令の最適化の可能性apt updateとapt installコマンドが別々の命令にあります。apt updateとapt install命令を分離すると、イメージサイズが増加し、繰り返しビルドの効率が低下する可能性があります。apt-get命令の最適化の可能性apt-get installコマンドが--no-install-recommendsパラメーターなしで実行されています。イメージサイズを削減するには、
apt-get installコマンドに--no-install-recommendsパラメーターを追加してください。パッケージインストールの最適化の可能性
パッケージインストール後にパッケージマネージャーのキャッシュがクリアされていません。
イメージサイズを削減するには、パッケージをインストールした後にキャッシュをクリアしてください。たとえば、Ubuntu の場合は
apt-get cleanコマンド、Alpine の場合は--no-cacheフラグを付けたapk addコマンド、CentOS の場合はyum clean allコマンドを使用します。マルチステージビルド検出
Dockerfile は、ビルド時の依存関係を最終的なイメージから分離するためにマルチステージビルドを使用していません。
マルチステージビルドを使用して、別のビルドステージでアプリケーションをコンパイルし、結果として得られるアーティファクトを最終的なイメージにコピーします。これにより、最終的なイメージサイズを大幅に削減できます。
冗長な圧縮パッケージ
ダウンロードされたアーカイブが展開後にクリーンアップされていません。
イメージサイズを削減するには、圧縮パッケージのダウンロード、展開、およびクリーンアップのコマンドを単一の
RUN命令にまとめてください。ビルド命令の最適化検出
相対パス検出
WORKDIR命令が相対パスを使用しています。WORKDIRで相対パスを使用すると、予期しない作業ディレクトリになり、ビルドの失敗を引き起こす可能性があります。明確さと信頼性のために絶対パスを使用してください。ルートユーザー検出
USER命令がルートユーザーに切り替えています。ビルド中にルートユーザーに切り替えると、コンテナ実行時にセキュリティリスクが生じます。この命令を削除する必要があります。
パス切り替えの最適化検出
RUN命令がcdコマンドを使用してディレクトリを変更しています。cdコマンドの効果は、それが記述されているRUN命令に限定されます。後続の命令の作業ディレクトリを設定するには、代わりにWORKDIR命令を使用してください。CMDまたはENTRYPOINTのオーバーライド検出Dockerfile に複数の
CMDまたはENTRYPOINT命令が含まれています。複数の
CMDまたはENTRYPOINT命令を使用した場合、最後の命令のみが有効になります。最終的な命令が意図したものであることを確認してください。