欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > Docker容器间通信

Docker容器间通信

2024/10/27 5:11:37 来源:https://blog.csdn.net/yyfloveqcw/article/details/143194351  浏览:    关键词:Docker容器间通信

在 Docker 中,使用 YAML 文件(通常是 docker-compose.yml)来定义和管理多个容器及它们之间的网络链接。docker-compose 是一个工具,它允许你用一个 YAML 文件来配置应用程序的服务、网络和卷,简化容器的启动和管理。

使用 docker-compose.yml 控制 Docker 容器和容器间链接。

version: '3'  # 指定Compose文件的版本
services:     # 定义多个服务(容器)service1:   # 第一个服务(容器)image: my_image_1:latest  # 使用的镜像ports:- "8080:80"             # 暴露的端口:宿主机:容器内networks:- my_network            # 关联到的网络service2:   # 第二个服务(容器)image: my_image_2:latestports:- "9090:90"networks:- my_network            # 与 service1 共享网络depends_on:- service1              # 定义依赖关系,service2 在 service1 启动后再启动networks:      # 定义网络my_network:driver: bridge  # 使用 bridge 网络驱动
  • services:定义了多个容器(或服务),每个容器在 docker-compose.yml 文件中用不同的服务名表示,例如 service1service2。每个服务都可以有自己的配置,如镜像、端口等。

  • ports:用于将容器内的端口映射到宿主机的端口,格式为 "宿主机端口:容器端口"。例如,"8080:80" 表示将宿主机的 8080 端口映射到容器的 80 端口。

  • networks:指定容器之间的网络。在上面的例子中,my_network 是自定义网络,多个容器共享这个网络,这样它们可以通过服务名相互通信。例如,service1 可以通过 service2:9090 的地址访问 service2

  • depends_on:声明服务之间的启动顺序。depends_on 确保 service2service1 启动后才启动,但不保证服务启动完成后才开始启动下一个服务。

 

容器间通信

docker-compose 中,不需要明确地暴露内部网络使用的端口,因为容器在同一个网络内时,可以通过服务名互相通信。比如,service1 可以直接通过 http://service2:90 访问 service2 的服务,无需通过宿主机端口。

网络配置

你也可以对网络进行更详细的配置,例如指定子网和 IP 范围:

networks:my_network:driver: bridgeipam:config:- subnet: 192.168.1.0/24

 

启动和管理

启动容器:使用以下命令通过 docker-compose.yml 文件启动定义好的服务:

docker-compose up -d

停止容器

docker-compose down

 查看容器日志

docker-compose logs

前后端连接的Web应用

version: '3'
services:frontend:build: .ports:- 80:80links:- backendbackend:image: backend-imageports:- 8080:8080

定义了两个服务(frontend和backend)。frontend服务将构建当前目录下的应用代码,并将容器的80端口映射到主机的80端口。backend服务使用预先构建的镜像,并将容器的8080端口映射到主机的8080端口。

通过links关键字,我们将frontend容器连接到了backend容器。这样,frontend容器就可以直接使用backend容器的主机名作为域名来访问后端服务。

在这个例子中,假设在同一个网络中运行了这两个服务,它们可以使用主机名进行通信。
 

在前端容器中使用Docker Links连接到后端容器。

from flask import Flask
import requestsapp = Flask(__name__)@app.route('/')
def hello():backend_url = 'http://backend:8080/api'response = requests.get(backend_url)return response.text

在Flask应用中使用requests库来发送HTTP请求。我们使用了http://backend:8080/api作为后端服务的URL,在容器内部,backend是一个有效的主机名。

 

前端容器发送了一个HTTP GET请求给后端容器的/api端点,并收到了响应。 

YAML文件中使用Docker Links的完整流程 

 

整个过程分为四个步骤:定义YAML文件、使用Docker Compose启动容器、容器建立链接、以及容器之间的通信。 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com