本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
优化 AWS App2Container 生成的 Docker 映像
由 Varun Sharma (AWS) 创建
环境:PoC 或试点 | 技术:容器和微服务;现代化; DevOps | Amazon Web Services:Amazon ECS |
Summary
AWS App2Container 是一款命令行工具,无需更改代码即可帮助将本地或虚拟机上运行的现有应用程序转换至容器。
根据应用程序类型,App2Container 采用一种保守的方法来识别依赖项。在进程模式下,应用程序服务器上的所有非系统文件都包含在容器映像中。在这种情况下,可能会生成相当大的映像。
此模式提供了一种优化由 App2Container 生成容器映像的方法。它适用于 App2Container 处理模式下发现的所有 Java 应用程序。模式中定义的工作流旨在在应用程序服务器运行。
先决条件和限制
先决条件
一个有效的 Amazon Web Services account
在 Linux 服务器上的应用服务器上运行的 Java 应用程序
已安装和设置 App2Container,满足所有先决条件,位于 Linux 服务器上
架构
源技术堆栈
在 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)
发现在应用程序服务器上运行的应用程序,然后分析这些应用程序。
容器化应用程序。
评估 Docker 映像大小。如果映像太大,请继续执行步骤 4。
使用 shell 脚本(附件)来识别大文件。
更新
analysis.json
文件中的appExcludedFiles
和appSpecificFiles
列表。
工具
工具
AWS App2Container – AWS App2Container(A2C)是一款命令行工具,可帮助您直接迁移在本地部署的数据中心或在虚拟机上运行的应用程序,以便它们在由 Amazon Elastic Container Service (Amazon ECS) 或 Amazon Elastic Kubernetes Service (Amazon 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