本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
优化 AWS App2Container 生成的 Docker
由 Varun Sharma 创作 () AWS
摘要
AWSApp2Container 是一个命令行工具,可帮助将本地或虚拟机上运行的现有应用程序转换为容器,而无需更改代码。
根据应用程序类型,App2Container 采用一种保守的方法来识别依赖项。在进程模式下,应用程序服务器上的所有非系统文件都包含在容器映像中。在这种情况下,可能会生成相当大的映像。
此模式提供了一种优化由 App2Container 生成容器映像的方法。它适用于 App2Container 处理模式下发现的所有 Java 应用程序。模式中定义的工作流旨在在应用程序服务器运行。
先决条件和限制
先决条件
一个活跃的AWS账户
在 Linux 服务器上的应用服务器上运行的 Java 应用程序
已安装和设置 App2Container,满足所有先决条件,位于 Linux 服务器上
架构
源技术堆栈
在 Linux 服务器上运行的 Java 应用程序
目标技术堆栈
由 App2Container 生成的 Docker 映像
目标架构流程
发现在应用程序服务器上运行的应用程序,然后分析这些应用程序。
容器化应用程序。
评估 Docker 映像大小。如果映像太大,请继续执行步骤 4。
使用 shell 脚本(附件)来识别大文件。
更新
analysis.json
文件中的appExcludedFiles
和appSpecificFiles
列表。
工具
工具
AWSA@@ pp2 Contain AWS er — App2Container (A2C) 是一款命令行工具,可帮助您提升和转移在本地数据中心或虚拟机上运行的应用程序,使其在由亚马逊弹性容器服务 (亚马逊) 或亚马逊弹性 Kubernetes Service (AmazonECS) 管理的容器中运行。EKS
代码
附上了 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 |
任务 | 描述 | 所需技能 |
---|---|---|
确定构件 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