如何从不同的编排文件中连接两个容器

120 阅读3分钟

使用Docker容器使我们能够创建独立于主机的封装应用程序,并包含所有必要的库和依赖。Docker-compose经常被用来配置和管理容器。当几个容器在docker-compose文件中构建时,它们会自动连接到一个共同的网络,并可以相互通信。

在大多数情况下,每个项目都会有自己的docker-compose文件。对于这样的配置,一个docker-compose的容器将无法连接到另一个的容器。除非我们之前已经创建并配置了一个共享网络。在这种情况下,有必要在compose中使用docker网络。在这篇博客中,我们将看一下一个例子,如何在不同的docker-compose文件中设置网络。这样,单个项目和其中的容器在本地机器上运行时,就可以连接到一个网络中。

如何连接docker-compose网络?

让我们来看看下面的情况:我们有两个项目是容器化的。我们有单独的docker-compose文件来构建这些项目。我们的目标是创建一个docker-compose网络,在这个网络中,两个项目都被连接起来,其中有所有的容器。

为了实现这个目标,我们提出了三个主要步骤。

  • 在一个项目的docker-compose中定义一个公共网络。
  • 在另一个项目的docker-compose中设置要连接的网络。
  • 为我们想要连接的所有服务设置网络。

代码。

现在我们将详细解释每个步骤是什么,并举例说明如何实现它们。

让我们看看两个项目,一个是包含PostgreSQL数据库,另一个是使用该数据库的应用程序。第一个项目的文件夹名称是database_app,另一个是user_app。Docker-compose文件有以下代码。

文件1:数据库_app/docker-compose.yml

version: "3.3"
services:
  db_service:
    image: db_svc_image
    ports:
      - "5001: 5001"
    networks:
      - common_network
  postgres_db:
    image: postgres
	ports:
	  - "5432: 5432"
	networks:
	  - common_network
networks:
  common_network:

文件2:secondary_app/docker-compose.yml

version: "3.3"
services:
  flask_service:
    image: flask_svc_image
    ports:
      - "5000: 5000"
    networks:
      - database_app_common_network
networks:
  database_app_common_network:
     external: true

第1步:要在docker-compose中创建一个自定义网络,你需要将其添加到database_app项目的compose文件中。

使用docker-compose构建后,将创建一个网络,名称如下:database_app_common_network。这很重要,因为为了将其他容器连接到这个网络,它们需要知道它的整个名称。

所以我们已经有了我们的自定义网络,我们可以将其他的编译项目连接到这个网络上。

第2步为了将其他项目连接到第一个项目,我们需要输入要连接的网络的名称。在这里,需要提到的是,这个网络是当前docker-compose的外部网络。要连接到步骤1中的网络。

通过这种方式,第二个项目将连接到第一个项目的网络。

第3步为了能够连接到一个共同的网络,两个项目的docker-compose文件中定义的所有服务必须知道是哪一个。因此,对于第一个项目的每个服务,必须添加以下命令。

networks: - common_network

这样,组合文件中定义的服务将连接到我们的网络。这必须发生在我们想要连接到网络的每个容器上,否则,它将只连接到当前docker-compose文件的默认网络。

对于docker服务中的第二个项目,我们也要单独输入网络,使用它的全名,如步骤2。

networks:
- database_app_common_network

总结

在这篇博客中,我们看了docker-composer网络的一些功能。用于连接docker compose的不同项目和容器的Docker桥网络。