将多个 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多容器环境

如何将多个服务部署到 AWS ECS?

将文件从 docker 容器写入 AWS 上的主机实例

无法将多容器 docker 部署到 ElasticBeanstalk

docker多个容器连接 将 Rails 程序部署到 Docker 容器中

将 django docker 容器部署到弹性 beantalk