【问题标题】:Consul configuration in docker-composedocker-compose 中的 Consul 配置
【发布时间】:2020-12-15 22:59:52
【问题描述】:

我正在尝试使用 docker-compose 在本地设置一个 consul 集群,我的灵感来源(这是我与 consul 的第一次互动)是 consul.yml。此配置包含一些我第一次看到的语法。

我觉得这个

consul-agent-1: &consul-agent
    image: consul:latest

作为某种基础(如继承)?

这部分是派生的?我不知道怎么称呼它

consul-server-bootstrap:
    <<: *consul-agent

如果我对这个假设有误,请纠正我。

但我觉得很奇怪的是 consul-agent-1

中的这一部分
command: "agent -retry-join consul-server-bootstrap -client 0.0.0.0"

它通过 consul-server-bootstrap 服务做了“某事”(我不确定到底是什么)。

我不明白,我的意思是如果我是正确的 consul-agent-1 作为其他服务的一些基本模板,如果 consul-server-bootstrap使用模板,这不是循环引用吗?

【问题讨论】:

    标签: docker docker-compose yaml consul


    【解决方案1】:

    这是使用 YAML 的一个称为锚点和合并键的功能来模板/重用撰写文件中的一些配置。有关更多信息,请参阅此 StackOverflow 答案。

    Meaning of ampersand (&) in docker-compose.yml file

    【讨论】:

      【解决方案2】:

      是的,&amp;consul-agent&lt;&lt;: *consul-agent 是 YAML 文件的功能,它们允许 通过将它们与“基本字典”合并来重新使用某些部分(如 by Blake 所述)。这里有几篇额外的文章 展示 YAML 文件的 DRY, onetwo.

      但是,在这部分

      command: "agent -retry-join consul-server-bootstrap -client 0.0.0.0"
      

      consul-server-bootstrap 与 YAML 锚点无关 “继承/合并目录”。相反,它与 docker compose 固有的某种形式的 service discovery 有关,即 每个容器都被分配了可以在其他部分引用的特定主机名 docker compose 文件或在每个服务配置中进行通信 服务/容器。

      当你跑步时

      docker-compose up
      

      将有 3 个容器以“客户端”模式运行 consul 代理,还有 3 个容器运行 在"server" mode 中运行它。领事 以“客户端”模式在后端(或容器内)运行的代理向领事报告 服务器。

      服务器节点承担了成为 共识法定人数。这些节点参与 Raft 并提供强一致性和 故障情况下的可用性

      所以consul-server-1consul-server-2consul-server-bootstrap 携带相同 函数,后者只是等到specified number of servers 可用,即-bootstrap-expect 3,然后引导 consul 集群。

      有关consul agent 及其'的更多信息,请参阅官方文档 configuration.

      TLDR;

      注意,这里没有 YAML 锚定它们是 Consul 的演示设置 docker-compose.yml 看起来像:

      version: '3'
      )
      services:
        consul-agent-1:
          image: consul:latest
          networks:
            - consul-demo
          command: "agent -retry-join consul-server-bootstrap -client 0.0.0.0"
      
        consul-agent-2:
          # Complete copy of 'consul-agent-1'
          image: consul:latest
          networks:
            - consul-demo
          command: "agent -retry-join consul-server-bootstrap -client 0.0.0.0"
      
        consul-agent-3:
          # Complete copy of 'consul-agent-1'
          image: consul:latest
          networks:
            - consul-demo
          command: "agent -retry-join consul-server-bootstrap -client 0.0.0.0"
      
        consul-server-1:
          # Uses only image and networks from 'consul-agent-1'
          # while 'command' is overwritten
          image: consul:latest
          networks:
            - consul-demo
          command: "agent -server -retry-join consul-server-bootstrap -client 0.0.0.0"
      
        consul-server-2:
          # Complete copy of 'consul-server-1'
          image: consul:latest
          networks:
            - consul-demo
          command: "agent -server -retry-join consul-server-bootstrap -client 0.0.0.0"
      
        consul-server-bootstrap:
          # Uses only image and networks from 'consul-agent-1'
          # while 'command' is overwritten and 'ports' are defined
          image: consul:latest
          networks:
            - consul-demo
          ports:
            - "8400:8400"
            - "8500:8500"
            - "8600:8600"
            - "8600:8600/udp"
          command: "agent -server -bootstrap-expect 3 -ui -client 0.0.0.0"
      
      networks:
        consul-demo:
      

      【讨论】:

        猜你喜欢
        • 2020-07-11
        • 1970-01-01
        • 2018-08-10
        • 1970-01-01
        • 2021-12-21
        • 1970-01-01
        • 1970-01-01
        • 2018-10-25
        • 2016-02-02
        相关资源
        最近更新 更多