翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
App2Container が生成した Docker イメージを最適化する
作成者: Varun Sharma (AWS)
環境:PoC またはパイロット | テクノロジー: コンテナとマイクロサービス、モダナイゼーション、 DevOps | AWS サービス: Amazon ECS |
[概要]
AWS App2Container は、コードを変更することなく、オンプレミスまたは仮想マシンで実行中の既存のアプリケーションをコンテナに変換する上で役立つコマンドラインツールです。
アプリケーションタイプに基づき、App2Container は保守的なアプローチで依存関係を特定します。プロセスモードの場合は、アプリケーションサーバー上のすべての非システムファイルがコンテナイメージに含まれます。このような場合、かなり大きなイメージが生成される可能性があります。
このパターンは、App2Container によって生成されるコンテナイメージを最適化するアプローチを提供します。App2Container がプロセスモードで検出したすべての Java アプリケーションに適用できます。このパターンで定義されているワークフローは、アプリケーションサーバー上で実行されるように設計されています。
前提条件と制限
前提条件
アクティブなAWS アカウント
Linux サーバー上のアプリケーションサーバー上で実行中の Java アプリケーション
Linuxサーバー上で、すべての前提条件を満たした状態で App2Container をインストールして設定
アーキテクチャ
ソーステクノロジースタック
Linux サーバー上で実行中の Java アプリケーション
ターゲットテクノロジースタック
App2Container が生成した Docker イメージ
ターゲットアーキテクチャのフロー
![Diagram showing AWS App2Container process for containerizing Java app on Linux system.](images/pattern-img/dc756bff-1fcd-4fd2-8c4f-dc494b5007b9/images/8eadcb44-378f-4903-8a5b-5b03c9c835bf.png)
アプリケーションサーバー上で実行中の Java アプリケーションを検出し、アプリケーション分析します。
アプリケーションをコンテナ化します。
Docker イメージのサイズを評価します。イメージが大きすぎる場合は、手順 4 に進みます。
シェルスクリプト (添付) を使用して、サイズの大きいファイルを特定します。
analysis.json
ファイル内のappExcludedFiles
とappSpecificFiles
リストを更新します。
ツール
ツール
App2Container - AWS App2Container (A2C) はオンプレミスデータセンターまたは仮想マシンで実行中のアプリケーションをリフトアンドシフトし、Amazon Elastic Container Service (Amazon ECS) または Amazon Elastic Kubernetes Service (Amazon EKS) で管理されるコンテナで実行できるようにするコマンドラインツールです。
コード
optimizeImage.sh
シェルスクリプトと analysis.json
ファイルの例が添付されています。
optimizeImage.sh
ファイルは App2Container で生成されたファイル ContainerFiles.tar
のコンテンツを確認するユーティリティスクリプトです。このレビューでは、サイズが大きくて除外できるファイルまたはサブディレクトリが特定されます。このスクリプトは次の tar コマンドのラッパーです。
tar -Ptvf <path>|tr -s ' '|cut -d ' ' -f3,6| awk '$2 ~/<filetype>$/'| awk '$2 ~/^<toplevel>/'| cut -f1-<depth> -d'/'|awk '{ if ($1>= <size>) arr[$2]+=$1 } END { for (key in arr) { if(<verbose>) printf("%-50s\t%-50s\n", key, arr[key]) else printf("%s,\n", key) } } '|sort -k2 -nr
tar コマンドでは、スクリプトは次の値を使用します。
|
|
| 一致するファイルタイプ |
| 一致する最上位レベルのディレクトリ |
| 絶対パスの深さ |
| 各ファイルのサイズ |
スクリプトは、次を実行します。
tar -Ptvf
を使用して、ファイルを抽出せずに一覧表示します。最上位レベルのディレクトリから始めて、ファイルタイプ別にファイルをフィルタリングします。
深さに基づき、絶対パスをインデックスとして生成します。
インデックスとストアに基づき、サブディレクトリの合計サイズを提供します。
サブディレクトリのサイズを出力します。
tar コマンドで値を手動で置き換えることもできます。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
オンプレミス Java アプリケーションを検出します。 | アプリケーションサーバーで実行中のすべてのアプリケーションを検出するには、以下のコマンドを実行します。
| AWS DevOps |
検出したアプリケーションを分析します。 | インベントリ段階で取得した
| AWS DevOps |
分析したアプリケーションをコンテナ化します。 | アプリケーションをコンテナ化するには、次のコマンドを実行します。
このコマンドは、ワークスペースの場所に Docker イメージと tar バンドルを生成します。 Docker イメージが大きすぎる場合は、次の手順に進みます。 | AWS DevOps |
タスク | 説明 | 必要なスキル |
---|---|---|
アーティファクトの tar ファイルサイズを特定します。 |
これは最適化後の tar ファイルの合計サイズです。 | AWS DevOps |
/ディレクトリの下にあるサブディレクトリとそのサイズを一覧表示します。 |
| AWS DevOps |
/ディレクトリの下にある大きなサブディレクトリを特定します。 | 前のコマンドで一覧表示されている各サブディレクトリの場合は、そのサブディレクトリのサイズを特定します。 たとえば、
前のステップで一覧表示された各サブディレクトリ ( | AWS DevOps |
/ディレクトリの下の各サブディレクトリにある大きなフォルダを分析します。 | 前の手順で一覧表示された各サブディレクトリについて、アプリケーションの実行に必要なフォルダを特定します。 たとえば、前の手順のサブディレクトリを使用して、
アプリケーションで必要のないサブディレクトリを除外するには、
| AWS DevOps |
AppExcludes リストから必要なファイルを特定します。 | AppExcludes リストに追加される各サブディレクトリについて、アプリケーションで必要なそのサブディレクトリにあるファイルをすべて特定します。analysis.json ファイルで、 たとえば、 | AWS DevOps |
タスク | 説明 | 必要なスキル |
---|---|---|
分析したアプリケーションをコンテナ化します。 | アプリケーションをコンテナ化するには、次のコマンドを実行します。
このコマンドは、ワークスペースの場所に Docker イメージと tar バンドルを生成します。 | AWS DevOps |
アーティファクトの tar ファイルサイズを特定します。 |
これは最適化後の tar ファイルの合計サイズです。 | AWS DevOps |
Docker イメージを実行します。 | イメージがエラーなしで起動することを検証するには、以下のコマンドを使用して Docker イメージをローカルで実行します。 コンテナーの コンテナを実行するには、 | AWS DevOps |
関連リソース
添付ファイル
このドキュメントに関連する追加コンテンツにアクセスするには、次のファイルを解凍してください。「attachment.zip」