本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
最佳化 AWS App2Container 產生的 Docker 映像
由 Varun Sharma 建立 (AWS)
環境:PoC 或試行 | 技術:容器與微服務;現代化; DevOps | AWS 服務:Amazon ECS |
Summary
AWS App2Container 是一種命令列工具,可協助將內部部署或虛擬機器上執行的現有應用程式轉換為容器,而不需要變更程式碼。
根據應用程式類型,App2Container 採取保守方法來識別相依性。對於程序模式,應用程式伺服器上的所有非系統檔案都包含在容器映像中。在這種情況下,可能會產生相當大的映像。
此模式提供最佳化 App2Container 產生的容器映像的方法。它適用於 App2Container 在處理模式下發現的所有 Java 應用程式。模式中定義的工作流程旨在應用程式伺服器上執行。
先決條件和限制
先決條件
作用中AWS帳戶
Linux 伺服器上應用程式伺服器上執行的 Java 應用程式
App2Container 在 Linux 伺服器上安裝並設定 ,並符合所有先決條件
架構
來源技術堆疊
在 Linux 伺服器上執行的 Java 應用程式
目標技術堆疊
App2Container 產生的 Docker 映像
目標架構流程
探索在應用程式伺服器上執行的應用程式,並分析應用程式。
容器化應用程式。
評估 Docker 映像的大小。如果映像太大,請繼續步驟 4。
使用 Shell 指令碼 (已連接) 來識別大型檔案。
更新
analysis.json
檔案中的appExcludedFiles
和appSpecificFiles
清單。
工具
工具
AWS App2Container – AWS App2Container (A2C) 是命令列工具,可協助您提升和轉移在內部部署資料中心或虛擬機器上執行的應用程式,以便它們在由 Amazon Elastic Container Service (Amazon ECS) 或 Amazon Elastic Kubernetes Service (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 命令中,指令碼使用下列值:
| 的路徑 |
| 要比對的檔案類型 |
| 要比對的頂層目錄 |
| 絕對路徑的深度 |
| 每個檔案的大小 |
指令碼會執行以下操作:
它使用
tar -Ptvf
來列出檔案,而無需擷取檔案。它會依檔案類型篩選檔案,從頂層目錄開始。
根據深度,它會產生絕對路徑作為索引。
根據索引和存放區,它提供子目錄的總大小。
它會列印子目錄的大小。
您也可以在 tar 命令中手動取代這些值。
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
探索內部部署 Java 應用程式。 | 若要探索應用程式伺服器上執行的所有應用程式,請執行下列命令。
| AWS DevOps |
分析探索的應用程式。 | 若要使用在庫存階段取得
| AWS DevOps |
容器化分析的應用程式。 | 若要容器化應用程式,請執行下列命令。
命令會在工作區位置中產生 Docker 映像和 tar 套件。 如果 Docker 映像太大,請繼續下一個步驟。 | AWS DevOps |
任務 | 描述 | 所需的技能 |
---|---|---|
識別 Artifacts tar 檔案大小。 | 識別 中的
這是最佳化後 tar 檔案的總大小。 | AWS DevOps |
列出 / 目錄下的子目錄及其大小。 | 若要識別
| AWS DevOps |
識別 / 目錄下的大型子目錄。 | 對於上一個命令中列出的每個主要子目錄,識別其子目錄的大小。使用 例如,使用
針對上一個步驟中列出的每個子目錄 (例如,、 | AWS DevOps |
分析 / 目錄下每個子目錄中的大型資料夾。 | 針對上一個步驟中列出的每個子目錄,識別執行應用程式所需的任何資料夾。 例如,使用上一個步驟的子目錄,列出
若要排除應用程式不需要的子目錄,請在 已連接範例 | AWS DevOps |
從 appExcludes 清單中識別所需的檔案。 | 針對新增至 appExcludes 清單的每個子目錄,識別該子目錄中應用程式所需的任何檔案。在 analysis.json 檔案中,在 例如,如果 | AWS DevOps |
任務 | 描述 | 所需的技能 |
---|---|---|
容器化分析的應用程式。 | 若要容器化應用程式,請執行下列命令。
命令會在工作區位置中產生 Docker 映像和 tar 套件。 | AWS DevOps |
識別 Artifacts tar 檔案大小。 | 識別 中的
這是最佳化後 tar 檔案的總大小。 | AWS DevOps |
執行 Docker 映像。 | 若要驗證映像是否在沒有錯誤的情況下啟動,請使用下列命令在本機執行 Docker 映像。 若要識別容器的 若要執行容器,請使用 | AWS DevOps |
相關資源
附件
若要存取與本文件相關聯的其他內容,請解壓縮下列檔案: attachment.zip