gpt4 book ai didi

amazon-web-services - 从 ECS 容器实例运行 docker

转载 作者:行者123 更新时间:2023-12-02 19:32:19 26 4
gpt4 key购买 nike

我已经有一个 ECS 集群设置,其中包含在 ECS 容器实例上运行我的应用程序的任务。
现在,给定一个 docker 镜像,我需要能够从我的应用程序内部运行它,并且它必须在我的应用程序运行的同一个 EC2 实例上运行。

我读到不建议在 docker 中运行 docker,最好的做法是创建同级 docker。
这意味着我的 EC2 实例应该运行 2 个容器:

  • 我的应用程序,维护为 ECS。
  • 我的应用程序决定运行的 docker 镜像。

  • 我如何实现这样的设置? ECS 支持吗?

    最佳答案

    我有几个想法。我不知道这些是否可行,但我将其写为答案,因为它很长!

    一个想法

    容器 A:您的容器始终在运行。
    容器 X:不总是运行的各种不同容器之一。

    首先为 A 和所有不同类型的 X 定义任务定义。

    运行任务时可以做的一件事是指定某些约束。在容器 A 上,您可以使用 API 来确定容器正在运行哪个 EC2 实例,然后在运行其中一种 X 类型的任务时将其指定为约束。

    https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-constraints.html

    您可能会尝试运行约束不可能的任务(如果实例已经完全提交资源),但至少您会收到错误。

    更简单的想法
    让容器 A 任务为自己预留足够的资源以及一些容器 X。然后只需通过在容器内安装 docker 套接字并与之通信来手动启动实例。您必须手动确保您没有过度使用资源。

    两个 的问题

    我在关于资源分配的评论中得到的是,无论你这样做,如果你是负载平衡容器 A,负载平衡器无法知道它们路由到的容器 A 没有能力启动额外的容器Xs。假设一个 EC2 实例有 4 个 CPU 和 8GB 的​​ RAM,而容器 A 使用了其中的一半。假设容器 X 使用 1 个 CPU 和 2GB 的 RAM。一旦 2 个容器 X sibling 在同一个实例上运行,就没有空间开始更多了,但是负载均衡器在将用户流量路由到容器 A 时不会知道这一点。希望这是有道理的。因此,您可能需要将面向公众的接口(interface)提取到不执行任何其他操作的容器、lambda 等。这一层可以知道哪些容器 A 实例具有启动容器 X 的备用容量。

    关于amazon-web-services - 从 ECS 容器实例运行 docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50100505/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com