当前位置: 首页 > news >正文

[docker] container 通信 -- bridge

解决了容器运行的问题,之后就需要解决容器之间如何进行通信的问题

docker由于内部针对Linux内核进行封装,具有自己的网络,也有自身处理网络基本请求的方式,所以对于解决通信问题的手段是非常多的。

最基础最基础的方式就是上一篇将内部需要暴露的port宿主机的某个port绑定起来,但是这样还是有问题。

问题:可以解决外部访问容器内部的问题,但是无法解决容器内部访问外部的问题。

bridge

docker提供第一种解决方式是建立bridge

这个bridge感觉像一个虚拟的网络…


In terms of Docker, a bridge network uses a software bridge which lets containers connected to the same bridge network communicate, while providing isolation from containers that aren’t connected to that bridge network. The Docker bridge driver automatically installs rules in the host machine so that containers on different bridge networks can’t communicate directly with each other.

Bridge networks apply to containers running on the same Docker daemon host. For communication among containers running on different Docker daemon hosts, you can either manage routing at the OS level, or you can use an overlay network.

When you start Docker, a default bridge network (also called bridge) is created automatically, and newly-started containers connect to it unless otherwise specified. You can also create user-defined custom bridge networks. User-defined bridge networks are superior to the default bridge network.


比较关键的几句话:

  1. bridge可以通过hardware或者software实现
  2. docker选择使用software实现
  3. 需要运行在同一个daemon下面才能够使用bridge

个人见解,官方意思是并不是让容器内部的Linux内核完成了“物理层面”的网络连接,而是让docker通过bridge帮助他们进行通信。(不知道这个理解对不对)

但我也不知道是在通信那一层级docker截取了信息

default && user-defined

另外,docker 的bridge分为两种,第一种是使用系统default,另外一种是自己构造一个bridge

但二者有不同


User-defined bridges provide automatic DNS resolution between containers.

Containers on the default bridge network can only access each other by IP addresses, unless you use the --link option, which is considered legacy. On a user-defined bridge network, containers can resolve each other by name or alias.

User-defined bridges provide better isolation.

Containers can be attached and detached from user-defined networks on the fly.

Each user-defined network creates a configurable bridge.

Linked containers on the default bridge network share environment variables.


关键点:

  1. 用户自定义可以使用别名也可以使用ip,用default只能用ip
  2. 用户自定义可以随时选择连接网络与断开网络,但是default只能把容器删了重建(直接爆杀)
  3. default可以共享环境变量(有点逆天)

三点可以看的出来default跟普通user-defined实现应该是不太一样的,并没有提及性能是否有差异。

但第二点,感觉default可以捐了😂

use bridge

# 生成一个user-defined bridge
docker network create {bridge_name}# 将container加入bridge
docker network connet {bridge_name} {container alias/id}# 查看bridge信息,可以看到那个container用了那个ip
docker network inspect [bridge_name]

加入bridge之后,这些container在内部服务的时候就好像在同一个网络了,可以直接用ip通信或者直接用别名

别名一般就是container名字

别名具体实现还未知,但可以发现不是用hosts实现的,在container内部查看hosts文件没有特别关于container name信息

所以感觉像daemon插足实现的???


http://www.mrgr.cn/news/69733.html

相关文章:

  • 真正的一站式视频出海解决方案
  • MYSQL隔离性原理——MVCC
  • Vue页面假死点不动现象Cannot read properties of undefined(reading ‘_wrapper‘)报错
  • 通过物流分拣系统来理解RabbitMQ的消息机制
  • 【C#/C++】C++/CL中String^的含义和举例,C++层需要调用C#层对象时...
  • Linux系统编译boot后发现编译时间与Windows系统不一致的解决方案
  • Java 8 特性
  • ROS1 Nodelets 与 ROS2 rclcpp_components 多节点运行以及功能插件
  • 手把手教你写Unity3D飞机大战(6)玩家子弹射击之瞄准程序(射线检测)
  • 平衡二叉树
  • 【含文档】基于ssm+jsp的旅游网站(含源码+数据库+lw)
  • 【数据结构实战】从零开始打造你的专属链表
  • FPGA 第5讲 点亮你的LED灯
  • AI重塑软件开发流程
  • A025-基于SpringBoot的售楼管理系统的设计与实现
  • 【网络安全】Nginx功能快速入门
  • 05_docker 安装常用软件
  • 【GPTs】EmojiAI:轻松生成趣味表情翻译
  • Linux服务器进程的控制与进程之间的关系
  • ReentrantLock【复习】
  • 微服务(二)
  • AI背后的“思考者“:LLM大语言模型是什么?
  • 使用热冻结数据层生命周期优化在 Elastic Cloud 中存储日志的成本
  • 一定要chatgpt吗?
  • 十八:Spring Boot 依赖(3)-- spring-boot-starter-data-jpa 依赖详解
  • 对静态资源加载失败的场景做降级处理