代码之家  ›  专栏  ›  技术社区  ›  Scott Davidson

如何在微服务架构中使用docker compose为本地开发最好地处理共享服务?

  •  4
  • Scott Davidson  · 技术社区  · 6 年前

    试图建立一个有效的模式,允许我的所有服务之间进行通信,并允许同时在多个服务上进行本地开发。我目前正在使用docker compose为我的应用程序设置本地开发。我的 docker-compose.yml 看起来像这样。

    version: '3'
    services:
      web: 
        <web_config>
      worker:
        <worker_config>
      service-a:
    

    我在问如何处理 service-a

    服务-a 是我正在运行的任何本地应用程序所必需的。因此,如果我同时运行这个应用程序和另一个应用程序,它们都需要与 服务-a

    应该 服务-a 是否在其自己的compose实例中运行?如果是,是 networks 与我的所有应用程序通信的最佳方式 服务-a ?据我所知,这曾经是 links 但是 网络 现在是首选。我已经试过用 network_mode 主机,但遇到问题,因为我正在使用Docker for Mac。

    我已经看到了很多观点和解决方案,但我真的不确定哪种方法是最好的。我看到的一些解决方案包括:

    • 创建共享 network 并在自己的docker组件中分别运行它们
    • 使用 network_mode: 'host' 并在我的主机上运行所有内容(遗憾的是,我无法正常工作)
    • 运行所有其他服务所依赖的所有共享服务的单独组合

    如果你遇到这个问题,请告诉我,并有什么建议可以分享,谢谢!

    1 回复  |  直到 6 年前
        1
  •  3
  •   bluescores    6 年前

    每个docker compose都为其管理的服务建立了自己的网络。正如您所建议的,使用共享网桥网络将是确保每个不同服务堆栈在单独的docker compose中的最简单方法。yml将能够相互连接。

    You can tell docker-compose to look for and use a pre-existing network 。您可以使用创建此网络 docker network create 或者在您的服务中指定它—docker compose。yml作为具有静态名称的自定义网络:

    服务-docker compose。yml公司

    version: '3'
    services:
      service-a:
        ...
    
    networks:
      mynetwork:
        driver: bridge
    

    然后在其他docker compose中使用该网络。yml文件。您需要在 顶层 docker compose的。然后您可以告诉每个服务使用它:

    其他一些docker撰写。yml公司

    version: '3'
    services:
      web:
        ...
      networks:
        - mynetwork
    
    networks:
      mynetwork:
        external:
          name: mynetwork
    

    我只建议第二种选择,因为你说过任何其他应用程序都需要服务——不管怎样,都需要运行。