是否可以从 Docker 映像创建 AWS AMI?

Posted

技术标签:

【中文标题】是否可以从 Docker 映像创建 AWS AMI?【英文标题】:Is it possible to create an AWS AMI from a Docker image? 【发布时间】:2017-12-21 21:48:02 【问题描述】:

我的 AWS ECR 中有一个 Docker 映像,我想将其转换为 AWS AMI 以使用环境创建实例。

尝试在 Docker 容器上使用 AMI 的原因

我必须在我的 Docker 容器中的 m4.xlarge 实例中对一些文本文件运行计算密集型 ML 任务。但是,使用 Docker,实例的 CPU 利用率达到 100%,脚本被提前终止。

但是,它在 Docker 外部的同一实例中运行良好。


所以,我想从 Docker 迁移到 AMI,但是我也想利用 Docker 来创建环境并提高它在我的本地启用的测试速度。

那么,是否可以从我测试并部署到我的 ECS 注册表的 Docker 映像中创建一个 AMI

【问题讨论】:

这是构建 AMI 的标准工具:packer.io。我很确定它符合您的描述。 听起来你在 CPU 资源限制下运行。这是运行 Docker 还是 AWS ECS 的 EC2 实例?谈论 ECR 意味着您可能正在使用 ECS。 ECS 将每台主机划分为 1024 个 cpu “份额”。如果您在配置硬 cpu 限制的情况下运行,总份额低于总份额,您应该不会看到问题 【参考方案1】:

虽然有一个开源工具可以从 docker 文件创建/构建 AWS AMI,但没有直接的方法可以直接从 docker 映像创建 AWS AMI,但仅支持的指令是 ENV、RUN、COPY 和 ADD,其他指令将被忽略。

从 Docker 文件构建 AWS AMI 的开源工具

https://github.com/mickep76/docker-build-ami

https://pypi.python.org/pypi/docker-build-ami/0.1.3

所以如果你真的有兴趣尝试从你的 docker 镜像创建一个合适的 docker 文件。为此,您可以参考以下链接

Is it possible to extract the Dockerfile from a docker container

How to generate a Dockerfile from an image?

【讨论】:

【参考方案2】:

docker 镜像或 docker 似乎存在问题或配置错误。 您提到实例在 docker 之外运行相同的脚本没有问题? 然后最好使用运行脚本创建实例的 AMI,您根本不需要 docker。 在 docker 中运行脚本最多意味着 docker 配置限制了 CPU,但并不意味着主机 CPU 达到 100% 并终止脚本。 您应该尝试使用相同的映像运行 docker 容器,但在 sleep10000 上运行,这样您就可以进入容器,运行感兴趣的脚本并查看失败的原因。

【讨论】:

以上是关于是否可以从 Docker 映像创建 AWS AMI?的主要内容,如果未能解决你的问题,请参考以下文章

Docker和AMI之间的区别

AWS:如何使用 Boto3 从实例创建公共 AMI?

指导我将黄金映像更新到我现有的AMI

AWS Elastic Beanstalk 与 AMI2 和 docker-compose.yml

如何在AWS中将Windows EC2实例复制到S3存储桶?

如何使用Cloudformation解析AWS上的免费层RHEL AMI ID?