将多个 docker 容器部署到 AWS ECS
Posted
技术标签:
【中文标题】将多个 docker 容器部署到 AWS ECS【英文标题】:Deploying multiple docker containers to AWS ECS 【发布时间】:2018-04-13 06:40:45 【问题描述】:我使用 docker-compose 创建了一个 Docker 容器。在我的本地环境中,我可以毫无问题地启动我的应用程序。
现在我想将我所有的 docker 容器部署到 AWS EC2 (ECS)。在查看了 ECS 文档后,我发现我们可以使用相同的 docker-compose 使用 ECS-CLI 在 ECS 中进行部署。但 ECS-CLI 目前不适用于 windows 实例。所以现在我不确定如何使用我的 docker-compose 使用单个命令构建我的所有图像并将其从 Windows 实例部署到 ECS。
看来我必须按照以下步骤将我的 docker 容器一一部署到 ECS,
-
在 ECS 控制面板中,创建 Docker 映像存储库。
将本地 Docker 客户端与 ECS 中的 Docker 凭据连接:
复制并粘贴上一步中的 Docker 登录命令。这将使您在 24 小时内登录
在本地标记您的图像以准备推送到您的 ECS 存储库 - 使用第一步中的存储库 URI
将镜像推送到您的 ECS 存储库\
使用 Web UI 创建任务,或手动创建为 JSON 文件
使用 Web UI 创建集群。
运行您的任务,指定要在其上运行的 EC2 集群
还有其他方法可以在 ECS 中运行 docker 容器吗?
【问题讨论】:
只需启动一个 Ubuntu EC2 实例,在那里安装 ecs-cli,使用 ecs-cli 使用 docker-compose 文件部署您的服务。成功部署后,终止 Ubuntu EC2 实例。 【参考方案1】:当你使用 ECS 时,Docker-Compose 在这个地方是错误的。
您可以在一个任务定义中配置多个容器,如CloudFormation docs 中所示:
ContainerDefinitions
是 AWS::ECS::TaskDefinition 资源的一个属性,用于描述 Amazon EC2 Container Service (Amazon ECS) 容器的配置
Type: "AWS::ECS::TaskDefinition"
Properties:
Volumes:
- Volume Definition
Family: String
NetworkMode: String
PlacementConstraints:
- TaskDefinitionPlacementConstraint
TaskRoleArn: String
ContainerDefinitions:
- Container Definition
只需在此处列出多个容器,所有容器将在同一台机器上一起启动。
【讨论】:
是的。这是正确的。当我提出这个问题时,我一开始并不知道。现在我正在使用 AWS 任务定义来启动我的 2 个 docker 容器。但是我在 ECS 代理的帮助下启动 docker 容器时遇到了问题。我将为此创建一个单独的问题。我将在此处链接该问题 感谢您的反馈。请使用复选标记将此问题标记为已解决。随意添加您了解的有关 ECS 的其他信息,以帮助解决问题的主题。 正如我在之前的评论中提到的,我在运行任务时遇到了问题。我为此创建了一个单独的问题。 ***.com/q/47127132/4435358 。如果可以的话,也请看看这个问题。再次感谢。【参考方案2】:我遇到了和你一样的情况。解决此问题的一种方法是使用Terraform 将我们的容器部署为AWS ECS 上的任务定义。
所以,我们使用 docker-compose.yml 在本地运行,而 terraform 是我们 docker-compose 在 AWS 上的一种镜像。
另外一个选项是 Kubernetes,您可以将其从 docker-compose 转换为 Kubernetes resources。
【讨论】:
以上是关于将多个 docker 容器部署到 AWS ECS的主要内容,如果未能解决你的问题,请参考以下文章
如何配置github操作将docker容器部署到aws elasticbeanstalk多容器环境
无法将多容器 docker 部署到 ElasticBeanstalk