Docker 在 AWS ECS 中运行

Posted

技术标签:

【中文标题】Docker 在 AWS ECS 中运行【英文标题】:Docker run in AWS ECS 【发布时间】:2022-01-19 22:30:12 【问题描述】:

我目前正在从我的操作系统运行一个命令来运行一个 docker 容器,该容器接受一个文件作为参数并返回一些输出。

docker run --rm -v $pwd:/dir IMAGE [COMMAND] [ARGS]

这使我可以在每次获取新文件、获取输出并关闭容器时运行此容器。我想将其移至 AWS,但我有点不确定如何复制此命令的临时性质? AWS 是否支持docker run

【问题讨论】:

docker run 命令也可以在 AWS 上运行。迁移到 AWS 的问题是有多个选项支持不同的要求。您已经提到了用于运行 docker 容器的 AWS ECS,但它假设映像和参数或多或少是固定的。如果没有,还有其他方法可以使用动态参数运行容器(在 EC2 上,作为 AWS Batch 作业......) ECS 是一个远程云环境,没有像docker run -v 选项那样直接启动安装本地文件系统的 ECS 容器的方法。如果你想在这里使用 ECS,你需要重组你的应用程序以其他方式接受它的输入(HTTP POST、S3 中的文件、SQS 消息……)。 【参考方案1】:

正如其他人所描述的那样,您可以通过多种方式重构您的应用程序以在 AWS 上运行。如果您不想走这条路,那么与您已经在笔记本电脑上所做的最接近的架构可能是使用 AWS ECS + EFS 集成(如this blog 中所述)。您可以定义挂载 EFS 共享的任务(使用容器)。通过使用您需要的文件填充 EFS 共享,容器将访问该文件并对其进行处理,就像在您的笔记本电脑上进行本地操作一样。

【讨论】:

【参考方案2】:

因此,简短的回答是否定的,您无法像平时那样在 ECS 上执行此操作。但是,您可以构建它,以便在 S3 中上传文件时动态启动任务。

你想做的是:

S3 事件通知 => EventBridge => StepFunction => ECS RunTask API

通过这样的设置,您将能够在每次上传文件时运行任务来处理文件 有用的链接: https://aws.amazon.com/blogs/aws/new-use-amazon-s3-event-notifications-with-amazon-eventbridge/

https://aws.amazon.com/blogs/compute/introducing-the-amazon-eventbridge-service-integration-for-aws-step-functions/

https://docs.aws.amazon.com/step-functions/latest/dg/connect-ecs.html

【讨论】:

EventBridge 可以直接运行 ECS 任务。此处不需要 StepFunctions。 docs.aws.amazon.com/eventbridge/latest/userguide/…

以上是关于Docker 在 AWS ECS 中运行的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS ECS EC2 集群中运行 docker 镜像

我们可以在 AWS ECS docker 容器上挂载 EFS 吗?

在 AWS ECS 中将带有卷参数的 docker 容器作为任务定义或服务运行

AWS Elastic Beanstalk 与 EC2 容器服务 (ECS) - Docker

通过 AWS ECS 在一个 EC2 实例中的多个 docker 容器

Amazon AWS ECS Docker 端口未正确绑定