什么是桥接网络?
桥接网络是 Docker 默认创建的虚拟网络,允许同一主机上的容器相互通信,同时与外部世界交互。它本质上是一个主机内部的私有网络,容器通过此网络通信,但默认与主机和其他网络隔离,除非显式暴露端口。
桥接网络的关键特性:
1.默认网络:未指定网络时,容器自动连接到默认桥接网络。
2.隔离性:容器在桥接网络内可相互通信,但与主机或其他网络隔离,除非暴露端口。
3.IP 分配:容器被分配特定范围的 IP 地址(如172.17.x.x)。默认情况下,需使用 IP 地址通信,除非使用自定义网络支持容器名称解析。
4.端口暴露:需显式暴露端口(如容器内 8080 映射到主机端口)以与外部通信。
为什么使用桥接网络?
•简单性:便于同一主机上的容器通信,适合小型应用。
•开箱即用:无需额外配置,Docker 自动设置。
•网络隔离:容器与其他网络隔离,提升安全性。
使用场景:Spring Boot 应用与默认桥接网络
假设你构建一个包含以下组件的简单应用:
•用户服务:管理用户数据。
•MySQL 数据库:存储用户信息。
步骤:
1.启动 MySQL 容器:
docker run -d --name mysql-db -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=myapp mysql:8
MySQL 容器自动连接到默认桥接网络,分配 IP(如172.17.0.2)。
2.启动用户服务容器:
docker run -d --name user-service -p 8080:8080 user-service
用户服务容器也连接到桥接网络,分配 IP(如172.17.0.3)。
3.配置用户服务连接 MySQL:
在用户服务的application.properties中:
spring.datasource.url=jdbc:mysql://mysql-db:3306/myapp
spring.datasource.username=root
spring.datasource.password=root
使用容器名称mysql-db进行连接,桥接网络支持名称解析。
4.容器间通信:
用户服务通过mysql-db:3306访问 MySQL,桥接网络确保通信顺畅。
桥接网络的优势:
• 配置简单,无需手动网络设置。
• 容器通过名称通信,方便开发。
• 隔离性保护容器免受外部干扰。
局限性:
•仅限单主机:不支持跨主机名称解析,需自定义网络。
•功能有限:缺乏高级网络策略支持。
主机网络
主机网络模式下,容器不拥有独立网络接口,而是直接使用主机网络接口,共享主机的 IP 地址和端口。
主机网络的关键特性:
1.无隔离:容器与主机共享 IP 地址(如192.168.1.100),无需端口映射。
2.高性能:无虚拟网络层,通信更快。
3.无需端口映射:容器直接使用主机端口。
4.安全考虑:减少网络隔离,可能增加安全风险。
为什么使用主机网络?
•高性能:适合需要低延迟的实时应用(如金融交易、直播数据)。
•简单性:无需配置端口映射,直接使用主机网络。
使用场景:高性能 Web 服务器
假设你运行一个需要处理实时数据的 Web 应用(如体育直播更新),需极低延迟。
工作原理:
• 使用主机网络模式运行 Web 服务器容器。
• 容器共享主机 IP(如192.168.1.100),直接通过主机端口(如80)提供服务。
• 无需端口映射,减少网络开销,加速请求处理。
配置主机网络:
1.使用 Docker Compose:
version: '3.8'
services:
webserver:
image: nginx:latest
network_mode: host
ports:
- "80:80"
2.使用 docker run 命令:
docker run --name webserver --network host -d nginx:latest
Web 服务器直接通过http://192.168.1.100:80访问。
结果:
• 容器与主机共享 IP,无需端口映射。
• 通信更快,适合高性能场景。
上一条:docker是怎么实现cpu隔离的?
下一条:购软平台是Starburst软件代理商