本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
優化 AWS 應用程序容器生成的碼頭映像
由瓦倫夏爾馬 (AWS) 創建
环境:PoC 或試驗 | 技術:容器與微服務;現代化;DevOps | AWS 服務:Amazon ECS |
Summary
AWS App2Container 是命令列工具,可協助將在內部部署或虛擬機器上執行的現有應用程式轉換為容器,而不需要變更程式碼。
根據應用程序類型,App2Container 採用保守的方法來識別依賴關係。對於處理程序模式,應用程式伺服器上的所有非系統檔案都包含在容器映像中。在這種情況下,可能會產生相當大的影像。
這種模式提供了優化由 App2Container 生成的容器映像的方法。它適用於在進程模式下由 App2 容器發現的所有 Java 應用程序。模式中定義的工作流程被設計為在應用程序服務器上運行。
先決條件和限制
先決條件
作用中的 AWS 帳戶
在 Linux 伺服器上的應用程式伺服器上執行的 Java 應用程式
應用程式容器安裝並設定在 Linux 伺服器上符合所有先決條件
Architecture
來源技術堆疊
在 Linux 伺服器上執行的 Java 應用程式
目標技術堆疊
由應用程序容器生成的碼頭映像
目標架構流程

探索應用程式伺服器上執行的應用程式,並分析應用程式。
容器化應用程式。
評估 Docker 映像的大小。如果影像太大,請繼續步驟 4。
使用 shell 腳本(附加)來識別大文件。
更新
appExcludedFiles
和appSpecificFiles
列表中analysis.json
file.
Tools
工具
AWS 應用程式 2 容器— AWS App2Container (A2C) 是一種命令列工具,可協助您提升和移轉在現場部署資料中心或虛擬機器上執行的應用程式,以便在由 Amazon 彈性容器服務 (Amazon ECS) 或 Amazon 彈性 Kubernetes 服務 (Amazon EKS) 管理的容器中執行。
Code
所以此optimizeImage.sh
shell 腳本和一個示例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 命令中,指令碼會使用下列值:
path | The path to ContainerFiles.tar |
FileType | The file type to match |
頂層 | The top-level directory to match |
depth | The depth of the absolute path |
size | The size for each file |
此指令碼會執行下列操作:
它使用
tar -Ptvf
列出文件而不解壓縮它們。它會依檔案類型篩選檔案,從頂層目錄開始。
根據深度,它會產生絕對路徑作為索引。
根據索引和存儲,它提供了子目錄的總大小。
它打印子目錄的大小。
您也可以在 tar 指令中手動取代值。
Epics
任務 | 描述 | 所需技能 |
---|---|---|
探索內部部署 Java 應用程式。 | 若要探索應用程式伺服器上執行的所有應用程式,請執行下列命令。
| AWD 開發 |
分析探索到的應用程式。 | 若要分析每個應用程式,藉由使用
| AWD 開發 |
將已分析的應用程式容器化。 | 若要容器化應用程式,請執行下列命令。
該命令會在工作區位置中生成 Docker 映像以及 tar 服務包。 如果 Docker 映像太大,請繼續下一個步驟。 | AWD 開發 |
任務 | 描述 | 所需技能 |
---|---|---|
識別人工因素 tar 檔案大小。 | 識別
這是優化後 tar 文件的總大小。 | AWD 開發 |
列出/目錄下的子目錄及其大小。 | 若要識別下主要子目錄的大小
| AWD 開發 |
識別/目錄下的大型子目錄。 | 針對上一個命令中列出的每個主要子目錄,識別其子目錄的大小。使用 例如,使用
針對上一個步驟中列出的每個子目錄重複此程序 (例如 | AWD 開發 |
分析/目錄下每個子目錄中的大型資料夾。 | 針對上一個步驟中列出的每個子目錄,識別執行應用程式所需的任何資料夾。 例如,使用上一個步驟的子目錄,列出
若要排除應用程式不需要的子目錄,請在 一個例子 | AWD 開發 |
從「應用程式排除」清單中識別所需的檔案。 | 針對新增至 AppExcludes 清單的每個子目錄,識別該子目錄中應用程式所需的任何檔案。在分析 .json 檔案中,新增特定檔案或子目錄 例如,如果 | AWD 開發 |
任務 | 描述 | 所需技能 |
---|---|---|
容器化已分析的應用程式。 | 若要容器化應用程式,請執行下列命令。
該命令會在工作區位置中生成 Docker 映像以及 tar 服務包。 | AWD 開發 |
識別人工因素 tar 檔案大小。 | 識別
這是優化後 tar 文件的總大小。 | AWD 開發 |
執行 Docker 影像。 | 若要確認映像是否啟動而沒有錯誤,請使用下列命令在本機執行 Docker 映像。 若要識別 若要執行容器,請使用 | AWD 開發 |