docker compose consul

官方地址:https://developer.hashicorp.com/consul/tutorials/docker/docker-compose-datacenter
以下是一个简单的docker-compose例子,展示了如何使用Consul在三个节点之间建立集群(也可以使用配置文件的写法,可以设置更多的参数):

version: '3'

services:
  consul1:
    image: consul:latest
    container_name: consul1
    volumes:
      - /opt/consul/data1:/consul/data
    command: consul agent -server -bootstrap-expect=3 -retry-join=consul2 -retry-join=consul3 -datacenter=dc1 -ui -client=0.0.0.0 -bind=0.0.0.0 -node=consul1 -data-dir=/consul/data
    ports:
      - "8500:8500"
      - "8600:8600/tcp"
      - "8600:8600/udp"
    networks:
      - consul-network

  consul2:
    image: consul:latest
    container_name: consul2
    volumes:
      - /opt/consul/data2:/consul/data
    command: consul agent -server -retry-join=consul1 -retry-join=consul3 -datacenter=dc1 -ui -client=0.0.0.0 -bind=0.0.0.0 -node=consul2 -data-dir=/consul/data
    networks:
      - consul-network

  consul3:
    image: consul:latest
    container_name: consul3
    volumes:
      - /opt/consul/data3:/consul/data
    command: consul agent -server -retry-join=consul1 -retry-join=consul2 -datacenter=dc1 -ui -client=0.0.0.0 -bind=0.0.0.0 -node=consul3 -data-dir=/consul/data
 
    networks:
      - consul-network

networks:
  consul-network:
    driver: bridge

参数解析

注意:参数的 = 号没有空格,如果有这个等于号会被识别成内容

  • -retry-join=consul2 加入某个节点,注意名称

  • -datacenter - 此标志控制运行代理程序的数据中心。如果未提供,则默认为“dc1”。Consul对多个数据中心拥有一流的支持,但它依赖于正确的配置。同一个数据中心内的节点应该位于单个局域网中。

  • -node - 集群中此节点的名称。这在集群内必须是唯一的。默认情况下,这是机器的主机名。

一,建立集群,并加入集群

在此示例中,我们定义了三个Consul节点:consul1,consul2和consul3。第一个节点作为主节点,使用了“-bootstrap-expect=3”参数来引导集群。其他两个节点通过“-retry-join=其他节点”参数加入了该集群。consul1为你的第一个节点的名称

二。端口对应

我们使用了Consul的默认端口8500,并将其映射到主机的8500端口。
,他可以使节点来通讯 的Docker网络来连接这三个节点。

三,数据卷持久化

每个节点都使用了名为“consul-data”的卷来存储其数据。这确保了即使容器被删除或重新创建,Consul的数据也能得到保留。

consul-data 是通过 Docker 的数据卷(Volume)来实现的,它将宿主机的一个目录挂载到容器内部用于存储 Consul 的数据。在上面的例子中,我们定义了一个名为 consul-data 的卷,并将其与每个服务的容器挂载到本地宿主机的 /opt/consul/data 目录。

这些卷实际上是在宿主机上创建的,因此 Consul 的数据实际上存储在宿主机上的目录中。这样做的好处是,即使容器被删除或重新创建,Consul 的数据也能得到保留,因为数据存储在宿主机上的目录中。

挂载数据卷还可以使多个容器共享相同的数据,这在构建分布式应用程序时非常有用。

注意:

上面的代码中,我们定义了一个名为 consul-data 的卷和一个名为 consul-net 的 Docker 网络。虽然它们后面没有任何内容,但它们是必需的,因为这些声明定义了 Docker 服务中使用的卷和网络。

如果您删除这些声明,Docker Compose 将无法创建卷或网络。在这种情况下,Docker Compose 将会抛出一个错误并停止服务的创建。

因此,尽管这些声明后面没有任何内容,但是为了 Docker Compose 正确地创建服务,您需要保留这些声明。

使用networks参数的优点:

  1. 更好的隔离:每个服务都可以分配到自己的网络,从而避免了不同网络之间的干扰。

  2. 更好的网络安全性:您可以使用网络层面的安全性来保护服务之间的通信,而不是依赖于应用程序层面的安全性。

  3. 更易于管理:您可以轻松地添加或删除服务,而不必担心它们如何与其他服务通信。

  4. 更好的性能:Docker Compose会自动为每个网络创建一个DNS服务器,从而提高了服务之间的通信速度。

虽然使用links参数可以达到相似的效果,但是它已经被认为是过时的方法。因此,使用networks参数是更好的选择。

network 和 端口 他们之间的区别及应用场景

端口映射:

  • 端口映射允许将容器内部的端口映射到主机上的端口,以便可以从主机上访问容器。这对于将多个容器连接到同一主机的情况非常有用。
  • 在Docker Compose文件中,可以使用“ports”关键字来指定端口映射。
  • 端口映射是比较简单的方式,但是可能会出现端口冲突问题。当多个容器试图将同一端口映射到主机上时,可能会出现冲突。

networks参数:

  • Networks参数允许在Docker Compose中定义网络。这些网络可以在多个容器之间共享,以便它们可以相互通。
  • 使用networks参数可以避免端口冲突问题,因为容器可以相互通信而不必使用映射端口。
  • 可以在Docker Compose文件中使用“networks”关键字来定义网络。
  • Networks参数需要更多的配置和设置,但是可以提供更好的安全性和可伸缩性。

综上所述,选择端口映射还是网络参数取决于具体的应用场景和需求。如果您希望简化配置和管理,并且只需要将容器连接到主机上,那么端口映射可能是更好的选择。如果您需要更好的安全性和可伸缩性,并且需要让多个容器相互通信而不必使用映射端口,那么networks参数可能更适合您的需求。

在上述示例中,我们有三个服务:consul-server-1,consul-server-2和consul-server-3。第一个服务是启动consul集群的引导服务器,它使用-bootstrap-expect=3参数来等待其他两个服务器加入集群。第二个和第三个服务使用-join参数来加入引导服务器。

在每个服务的command字段中,我们使用了一些Consul参数来设置服务节点的名称、数据中心、绑定IP地址和客户端地址等。我们还开放了8500和8600端口,以便在浏览器中访问Consul UI并允许DNS查询。

最后,我们使用network_mode: "host"将服务加入主机网络,以便它们可以使用宿主机的IP地址进行通信。

请注意,在实际使用中,您需要将<ip address of server X>替换为每个服务器的实际IP地址。此外,您可能需要添加其他参数来配置Consul集群,例如ACL,TLS等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容