【问题标题】:Docker Container interacting with 2 applicationsDocker 容器与 2 个应用程序交互
【发布时间】:2016-06-10 14:30:19
【问题描述】:

我目前在一个容器中有一个 Java 应用程序 (.jar),我正在使用 docker-compose.yml 在第二个容器中创建一个 mysql 数据库实例。

我想知道容器 1 是否有可能与容器 2 交互,并能够从 mysql 数据库读取/写入数据

如果可能的话,我会怎么做?

【问题讨论】:

    标签: java mysql docker docker-compose dockerfile


    【解决方案1】:

    每个容器都像是在您的实际机器中运行的虚拟机。他们有一个连接所有这些的虚拟网络。它们可以像真实网络上的真实机器一样相互通信。

    当您在 yaml 中指定链接时,例如来自documentation 的示例:

    web:
      links:
       - db
    

    结果将是在web 容器内,主机名db 将解析为db 容器的虚拟IP。您实际上可以在web 容器中执行ping db,您应该会看到db 容器的答案。

    对于 mysql,假设您在示例中将 mysql 容器命名为 db 并像上面一样将您的应用程序链接到它,您只需编写假定此主机名的代码。例如。你会连接到jdbc:mysql://db:3306/databasename。端口取决于您使用的图像所公开的内容。

    如果您想让容器在实际不同的机器上运行,这会变得很棘手,因为您需要一种方法来访问这些机器内的虚拟容器网络。有诸如代理、转发端口、覆盖网络之类的方法……但这超出了 compose 的能力。

    【讨论】:

    • docker-compose 格式的 v2 支持网络和覆盖网络。您可以启动compose definition on a swarm
    • @Matt True,但它本质上是 swarm 读取 compose 文件并完成它的事情。并不是真正的撰写功能。
    • 与 swarm master 相比,compose 在普通 docker 上启动某些东西并没有太大区别。
    • Compose 读取 yaml 配置并将其映射到使用 Docker Remote APIDocker Swarm API 的适当 API 请求,除了一些节点信息之外,它们大部分是相同的 API。 compose 的端点是一个普通的 docker daemon 或一个 docker swarm master。
    【解决方案2】:

    从代码来看,交互是一样的。

    Docker 中的 MySQL 在特定主机名和端口上公开服务。使用它的程序使用该主机名和端口。 Docker 使您能够在 MySQL 之外进行配置,但 Java 代码是相同的。

    【讨论】:

      【解决方案3】:

      是的,通过网络链接容器是标准功能。 正如 Peter Lawrey 所提到的,您只需像往常一样使用 Java 中的数据库连接配置您想要连接的服务或 docker 容器的名称。

      version: "2"
      
      services:
        web:
          image: myapp
          networks:
            - myapp
        db:
          image: mysql
          networks:
            - myapp
      
      networks:
        myapp:
          driver: bridge
      

      那么你有一个网络可以连接

      $ docker-compose start
      Starting composenetworks_web_1
      Starting composenetworks_db_1
      
      $ docker exec composenetworks_web_1  ping db
      PING mysql (172.22.0.3): 56 data bytes
      64 bytes from 172.22.0.3: seq=0 ttl=64 time=0.093 ms
      

      【讨论】:

        猜你喜欢
        • 2019-06-06
        • 2018-01-15
        • 1970-01-01
        • 2014-02-11
        • 1970-01-01
        • 1970-01-01
        • 2022-11-16
        • 1970-01-01
        • 2012-11-15
        相关资源
        最近更新 更多