docker 自定义网桥作用

Docker 自定义桥接网络(User-defined Bridge Network)提供了许多优于默认桥接网络的功能和特性。以下是自定义桥接网络的主要特性和优势的总结:

1. 容器名称解析

  • 内置 DNS 服务:自定义桥接网络中,Docker 提供了一个内置的 DNS 服务器,允许容器通过名称互相通信,而不需要知道对方的具体 IP 地址。
  • 自动更新 :即使容器重启后其 IP 地址发生变化,内置 DNS 会自动更新映射关系,确保名称解析始终有效。

2. 隔离性

  • 网络隔离 :每个自定义桥接网络是相互独立的,默认情况下只有属于同一网络的容器才能互相通信。这提高了安全性,并减少了潜在的冲突。
  • 防止广播风暴:由于网络是隔离的,广播流量不会跨越不同的自定义桥接网络,从而减少网络拥塞。

3. 简化服务发现

  • 无需手动配置 :在同一个自定义桥接网络中的容器可以通过名称直接访问其他容器的服务,无需手动配置或使用 --link 参数。
  • 易于扩展:你可以轻松地将新的容器加入到现有的自定义桥接网络中,并立即能够通过名称进行通信。

4. 更好的网络控制

  • IP 地址管理 :你可以在创建自定义桥接网络时指定子网和网关,从而更好地控制 IP 地址的分配。
  • 子网划分:可以根据需要创建多个自定义桥接网络,并为每个网络分配不同的子网,以避免 IP 地址冲突。

5. 外部连接选项

  • 端口映射 :虽然自定义桥接网络提供了更好的内部通信方式,但你仍然可以通过 -p--publish 参数将容器的端口映射到主机上,以便从外部访问。
  • 跨主机通信:结合 Docker 的 overlay 网络功能,可以实现跨主机的容器通信,这对于分布式应用非常有用。

6. 网络驱动支持

  • 插件支持:除了基本的桥接网络,Docker 还支持第三方网络驱动插件,可以满足更复杂的网络需求。
  • Macvlan 和 IPvlan:这些高级网络模式允许容器直接连接到物理网络,提供更高的性能和灵活性。

7. 容错性

  • 动态更新:如果容器重启或重新创建,Docker 会自动为其分配新的 IP 地址,并更新内置 DNS 服务中的记录,确保名称解析不受影响。
  • 高可用性:自定义桥接网络的设计使得容器之间的通信更加稳定和可靠,减少了因 IP 变化导致的通信中断问题。
示例

假设你有两个容器 webappdb,并且它们都连接到了一个名为 my_bridge_network 的自定义桥接网络。你可以这样启动这两个容器:

javascript 复制代码
# 创建自定义桥接网络
docker network create my_bridge_network

# 检查是否创建成功
docker network ls

# 查看具体的网卡信息
docker inspect my_custom_network

# 启动 db 容器并连接到自定义桥接网络
docker run -d --name db --network my_bridge_network mysql:latest

# 启动 webapp 容器并连接到相同的自定义桥接网络
docker run -d --name webapp --network my_bridge_network my_webapp_image

像上面这种情况:

  • webapp 容器可以通过 db 这个名称直接访问 MySQL 数据库服务,而不需要知道它的具体 IP 地址。(ping db)
  • 如果 db 容器重启后 IP 地址发生变化,内置 DNS 服务会自动更新映射关系,确保 webapp 容器仍能通过 db 名称访问数据库。
示例

假设你想要创建一个名为 my_custom_network 的自定义桥接网络,并希望使用 192.168.10.0/24 作为子网,192.168.10.1 作为网关地址。

javascript 复制代码
docker network create \
  --driver bridge \
  --subnet=192.168.10.0/24 \
  --gateway=192.168.10.1 \
  my_custom_network
相关推荐
chen_note2 小时前
Dockerfile及其部署镜像步骤
docker·容器·镜像·dockerfile
Jy_06223 小时前
K8s中,deployment 是如何从 yaml 文件最终部署成功 pod 的
云原生·容器·kubernetes
mobº3 小时前
K8s 集群环境搭建 - yaml 版本(一)
云原生·容器·kubernetes
终端行者3 小时前
K8s中部署Minio集群 如何部署minio集群
云原生·容器·kubernetes·1024程序员节
杨浦老苏8 小时前
开源云文件存储服务器MyDrive
docker·群晖·网盘
PellyKoo8 小时前
Docker容器中中文文件名显示乱码问题完美解决方案
运维·docker·容器
无妄无望8 小时前
在没有网络的环境下安装包pymysql
学习·docker
奥尔特星云大使9 小时前
Docker 拉取 MySQL 5.7 镜像、启动容器并进入 MySQL
数据库·mysql·docker·容器
big男孩9 小时前
Docker使用环境变量的整理
docker
安卓开发者10 小时前
Docker与Nginx:现代Web部署的完美二重奏
前端·nginx·docker