使用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桥网络。