【问题标题】:How could one use Docker Compose to synchronize container execution?如何使用 Docker Compose 来同步容器执行?
【发布时间】:2016-08-31 21:40:34
【问题描述】:

如何使用Docker Compose 来同步容器执行?

我要解决的问题类似于Docker Compose wait for container X before starting Y。我使用 Docker Compose 来启动多个容器,都在同一主机上运行,其中三个是 PostgreSQL、Liquibase 和一个在 Tomcat 中运行的 Web 应用程序 servlet。 PostgreSQL 和 Web 应用程序容器都是长期运行的,而 Liquibase 容器是短暂的。容器不仅必须按顺序启动,而且每个容器还必须等待前一个容器可用或完成。尤其是 PostgreSQL 服务器必须在 Liquibase 容器运行之前准备好处理 SQL 命令,并且 Liquibase 架构迁移任务必须在 Web 应用程序启动之前完成,以确保数据库架构处于有效状态。

我知道我可以使用两个wrapper "wait-for" scripts that poll for certain conditions(这可能是唯一可用的选项)来实现这种同步,其中第一个将轮询 PostgreSQL 服务器的可用性以处理命令,而第二个将只运行在 Web 应用程序之前,可以轮询特定数据库对象的存在。但是,就像进程同步一样,我认为容器同步是一个常见问题,可以通过更通用的inter-process communicationsemaphores 等同步原语来解决。 Docker Compose 可能会从此类同步机制中获益最多,但 Docker 容器可能会发现它们也很有用,例如,在容器内建立多个同步点。

【问题讨论】:

  • 这个问题有点奇怪。容器只是一个过程。进程生命周期由 docker 管理这一事实并不重要。您是在问什么是分布式软件的简单 IPC 机制?
  • 我不同意你的“容器只是一个过程”的前提。如果容器只是一个进程,我们就不需要容器了。我的问题的目的是为类似于stackoverflow.com/questions/31746182/…github.com/docker/compose/issues/374 的问题找到一个简单、标准的Docker(或Docker Compose)特定解决方案。我希望 Docker 可能已经有一个我不知道的 IPC 机制。
  • 一些容器编排系统如 docker-compose 允许你指定一个依赖关系,以便你得到一个有意义的启动顺序。然而,这有点hacky。像这样的设置往往不是容错的,因为如果某些依赖项失败,进程就会卡住。设计良好的软件通常会通过诸如 zookeeper、etcd 或 consul 之类的服务来处理它自己的服务发现和故障恢复。您具体要完成什么?魔鬼在细节中。
  • 我重新表述了我的问题,并包含了我要解决的特定问题。
  • 使用同步机制的另一种方法是组合或绑定 PostgreSQL 和 Liquibase 容器(或 Liquibase 和 Web 应用程序容器),以便每个容器按顺序运行,但 Docker Compose 和 Docker 都没有提供这样的设施。除了单一继承之外,容器组合在许多方面都非常有用。

标签: docker synchronization docker-compose docker-container


【解决方案1】:

在 Docker Compose 或 Docker 支持容器同步原语(类似于 process synchronization primitives,但可从 shell 访问)之前,Dependencies for docker-compose with inotify 是我发现的 Docker Compose 容器同步问题更好的解决方案之一。

【讨论】:

    【解决方案2】:

    除了consuletcdZooKeeper 之外,MQTT 保留消息是 Docker 容器可能用来协调活动的另一种简单机制。 Mosquito 是 MQTT 的轻量级开源实现。

    【讨论】:

      【解决方案3】:

      我得出的结论是,Docker Compose 并不是最适合容器同步的工具。 KubernetesMarathon 等工具有助于实现更复杂的容器同步。 What is the best Docker Linux Container orchestration tool? 比较可用的容器同步工具。

      【讨论】:

        猜你喜欢
        • 2022-11-13
        • 1970-01-01
        • 1970-01-01
        • 2017-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-25
        • 1970-01-01
        相关资源
        最近更新 更多