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

Docker网路模型(四)使用 bridge 网络

使用 bridge 网络

在计算机网络中,一个 bridge(网桥)是一个链路层设备,负责在不同的网段之间转发信息。 bridge 可以是真实的硬件设备也可以是由宿主机底层提供的软件模拟设备。

在 Docker 中,bridge 网络使用了软件虚拟的网桥,让连接到同一个桥上的容器能互相通讯的同时,也隔离了没有连接到同一个桥上的容器。Docker 的 bridge 网络驱动会自动在宿主机上安装好防火墙规则,隔离开不同网桥之间的直接通讯。

bridge 网络适用于同一个 Docker daemon 宿主机下的容器,对于不同主机之间的通讯,你可以自己在操作系统层面设置路由规则,或者是用 overlay 网络。

当你启动 Docker 的时候,一个默认的bridge网络 (也叫 bridge) 会自动创建(参考下文),跟着所有后面启动的容器除非自己有指定,否则都会自动连接到上面。你也可以创建一个自定义的 bridge 网络。用户定义的 bridge 网络要优于默认的 bridge  网络。

用户定义的 bridge 跟默认 bridge 的区别

  • 用户定义的 bridge 提供容器之间的自动 DNS 解析。

    在默认 bridge 下的容器只能通过 IP 地址访问彼此,除非使用 --link 选项,此选项已经标记为遗弃状态。而在用户定义的 bridge 网络,容器间可以通过主机名或者别名来解析彼此的地址。

    想象有一个应用栈,包含了一个网页前端跟一个数据库后端。假设你分别命名两种容器为 web 和 db ,无论应用栈在哪个 Docker 宿主机跑着,web 容器都能够连接 db 容器里面的数据库。

    如果你把这种应用栈跑在默认的 bridge 网络上,你就要手动给两种不同的容器加上链接(用遗弃的 --link 标志)。这些链接在链接的两个方向都要进行设置,可以想象超过两个以上的容器的情况会变得多么复杂。此外,你也可以修改容器里面的 /etc/hosts 文件,但这会产生难以调试的问题。

  • 用户定义的 bridge 提供了更好的隔离。

    所有不用 --network 标志的容器都会连接到默认的 bridge 网络上。这是有风险的,这种情况下不相关的 应用栈/服务/容器 能够直接通讯。

    而用户定义的 bridge 网络就能够提供限定范围的网络,只有连接到各自的 bridge 上的容器才能互通。

  • 容器能在用户定义的 bridge 上即时插拔。

    在容器的生命周期内,你可以在用户定义的 bridge 上即时插拔它们。而你要在默认的 bridge 上删除某个容器时,就需要先停掉容器,然后再重新用不同的网络选项去创建它。

  • 用户定义的网络提供了能灵活配置的 bridge。

    如果你的容器使用的是默认的 bridge,你也可以配置,但所有的容器都会使用同一个设置,比如 MTU 大小和 iptables 规则。此外,配置默认 bridge 网络是在 Docker 之外进行的,这就需要 Docker 来一次重启。

    而用户定义得 bridge 使用  docker network create 来创建和配置。如果有几组不同的应用需要用到不同的网络,你可以分别给他们创建和配置不同的 bridge。

  • 在默认 bridge 上所有的容器共享环境变量。

    一开始,在两个不同的容器之间共享环境变量,只有用 --link 标志一个办法。这样的变量在用户定义的 bridge 上是共享不了的。但是,我们有更好的办法去共享环境变量。举例:

    • 复数个容器可以用 Docker volume (卷),把共享信息挂载到容器里的某个文件或者路径下。

    • 复数个容器可以用 docker-compose 一起启动,然后可以在 compose file 里面定义共享的变量。

    • 你可以用 swarm 编排工具来管理容器,而不是单独启动,然后可以用上 swarm 的 secrets 和 configs 共享。

所有连接到同一个用户定义的 bridge 都有效地对彼此暴露所有端口。要想让在不同的网络上的容器或者非 Docker 主机能访问到某个端口,需要将此端口用 -p 或者--publish 标志给公开出来。

管理用户定义 bridge

用 docker network create 命令来创建一个用户定义 bridge 网络。

$ docker network create my-net

你可以指定子网掩码、IP地址范围、默认网关跟其他的选项。详情参考 docker network create 文档或者 docker network create --help 的输出。

使用 docker network rm 命令来移除一个用户定义 bridge 网络。如果上面有连着的容器,请先参考下文断连它们。

$ docker network rm my-net

这中间发生了什么?

当你创建或移除用户定义的 bridge 或在用户定义的 bridge 上连接或断开某些容器时,Docker 使用操作系统特有的工具来管理底层网络设施(比如在Linux上添加或移除网桥设备或配置  iptables 规则)。这些细节应看作是实现细节,让 Docker 来管理你的用户定义网络就好。

将某个容器连接到一个用户定义的 bridge 上

当你创建一个新的容器时,可以指定一个或者多个 --network 标志。此例子把一个 Nginx 容器连在了 my-net 网络上。同时把80端口公开在了宿主机的8080端口上,这样外部的客户端能够访问到这个端口。任何同样连接到 my-net 网络的其他容器,都能够访问到 my-nginx  容器的所有端口,反之亦然。

$ docker create --name my-nginx \--network my-net \--publish 8080:80 \nginx:latest

要将一个正在运行的容器连接到一个已有的用户定义 bridge,可使用 docker network connect 命令。下面的命令将一个已经跑起来的 my-nginx 容器连到了一个已有的 my-net 网络:

$ docker network connect my-net my-nginx

将某个容器从用户定义的 bridge 上断开

要将一个正在运行的容器从用户定义断开,可使用 docker network disconnect 命令。下面的命令将 my-nginx 容器从 my-net 网中断掉。

$ docker network disconnect my-net my-nginx

使用 IPv6

如果你在 Docker 容器中需要IPv6,那么在创建任意的 IPv6 网络跟给容器分配 IPv6 地址之前, 需要在 Docker daemon 层面 打开对应的选项 并重载配置。

在创建你的网络时,可以用 --ipv6 标志来开启 IPv6。你不能选择性地禁用默认 bridge 网络的 IPv6 支持。

启用从 Docker 容器到外部的转发功能

默认情况下,连接到默认 bridge 的容器的网络流量,不会转发到外部。要想启用转发,你需要修改两处设定。它们不是 Docker 命令,而是在 Docker 的宿主机的内核上生效的。

  1. 配置 Linux 内核,允许 IP 转发(IP forwarding)。

    $ sysctl net.ipv4.conf.all.forwarding=1
    
  2. 修改 iptables 的 FORWARD 策略,从 DROP 修改为 ACCEPT

    $ sudo iptables -P FORWARD ACCEPT
    

这些设置重启之后就没了,所以你可能需要把它们加到启动脚本里。

使用默认的 bridge 网络

默认的 bridge 网络可以看作是一个 Docker 快被遗弃的细节,不建议在生产环境中使用。配置它属于手动操作,而且它有技术缺陷(参考上面提到的两种 bridge 的不同)。

将某个容器连接到默认 bridge 上

如果你不用 --network 标志指定网络,而又指定了网络驱动,你的容器就会连接到默认 bridge 网络。连接到默认的 bridge 网络的容器是可以通讯的,但只能用 IP 地址来进行。除非你用准备遗弃的 --link 标志来连接他们。

配置默认的 bridge 网络

要配置默认的 bridge 网络, 你需要在 daemon.json 中指定选项。下面是一个指定了几个选项的  daemon.json 示例。只指定你需要改动的设置。

{"bip": "192.168.1.1/24","fixed-cidr": "192.168.1.0/25","fixed-cidr-v6": "2001:db8::/64","mtu": 1500,"default-gateway": "192.168.1.254","default-gateway-v6": "2001:db8:abcd::89","dns": ["10.20.1.2","10.20.1.3"]
}

重启 Docker 让这些改动生效。

在默认 bridge 网络上使用 IPv6

如果你将 Docker 配置了支持IPv6(参见上面的使用IPv6),默认 bridge 网络也会自动配置为IPv6。与用户定义的 bridge 不同,你不能在默认网桥上选择性地禁用IPv6。

接下来

  • 通关 独立的网络教程
  • 学习 容器视角的网络
  • 学习 overlay 网络
  • 学习 Macvlan 网络

相关文章:

Docker网路模型(四)使用 bridge 网络

使用 bridge 网络 在计算机网络中,一个 bridge(网桥)是一个链路层设备,负责在不同的网段之间转发信息。 bridge 可以是真实的硬件设备也可以是由宿主机底层提供的软件模拟设备。 在 Docker 中,bridge 网络使用了软件…...

数据结构与算法之美 | 排序(2)

归并排序(Merge Sort) 基本思想: 如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。 def merge_sort…...

【外企面试系列】必备口语短语与例句 - A系列

a big headache令人头痛的事情 I have a big headache from all the noise. (我因为噪音而头痛。)The paperwork is a big headache for me. (对我来说,文书工作是件头痛的事情。) a fraction of 一部分 She ate only a fraction of her meal. (她只吃了一部分饭…...

Java使用Opencv进行大图找小图并使用其找图功能进行bilibili视频下载案例

Java使用Opencv进行大图找小图并使用其找图功能进行bilibili视频下载案例 一、Opencv大图找小图说明二、Opencv的window安装1.下载windows下的安装包2.安装3.Java中Opencv加载测试 三、Java中通过Opencv进行模板匹配大图找小图四、进行多图查找五:案例下载bilibili视…...

肠道健康从核心菌属开始:肠道菌群的关键

谷禾健康 5月29日,是世界肠道健康日。肠道是人体最重要的消化系统之一,与人体健康紧密相关。而肠道菌群作为肠道重要组成部分,在肠道健康中发挥着重要的作用。 编辑​ 由于基因、环境、饮食、药物等因素的影响,每个人的肠道菌群都…...

深度学习实战37-NASNet(具有自动搜索能力的神经网络模型)的搭建与实战应用

大家好,我是微学AI,今天给大家介绍一下深度学习实战37-NASNet(具有自动搜索能力的神经网络模型)的搭建与实战应用,NASNet是由Google Brain团队开发的一种具有自动搜索能力的神经网络模型,利用强化学习和进化算法等技术来自动地搜索最优的神经网络架构。NASNet模型的设计灵感…...

碳排放预测模型 | Python实现基于机器学习回归分析的碳排放预测模型——随机森林、决策树、KNN 和多层感知器 (MLP) 预测分析

文章目录 效果一览文章概述研究内容环境准备源码设计KNNRandom ForestDecision TreeMLPModel Evaluation学习总结参考资料效果一览...

人体检测技术之毫米波雷达

人体检测技术之毫米波雷达 1.概述 智能人脸/视频锁领域的人体检测需求是要求远距离达到1m左右即可,一旦在此距离内检测人,则锁唤醒进行人脸识别,视频录制等操作。所以,人体检测技术非常关键。 选型主要是几个维度: 1.支持检测的距离范围,能否准确输出距离信息 2.支持…...

“Chain of Thought Reasoning“ 和 “Chain Prompts“ 是什么

"Chain of Thought Reasoning" 和 "Chain Prompts" 是什么 1. "Chain Prompts" 是什么2. “Chain of Thought Reasoning” 是什么 1. “Chain Prompts” 是什么 “Chain Prompts” 是指一系列相关的提示,它们之间有逻辑上的联系和依赖关系。用户…...

signal

读信号,dqs 是对齐到dq的边沿, 写信号,dqs 的边沿是对到中间的。 spec 就是这样规定的。我们在dq的最中间的采样,肯定是最安全的。 dqs 是对齐到dq的边沿 , 在silicon 内部,还是通过移位完成的。 rl: re…...

深度研究微软的资产负债表和财务状况以及未来投资价值

来源:猛兽财经 作者:猛兽财经 微软股票的关键指标 猛兽财经认为,微软公布的2023财年第三季度财务业绩,有三个关键指标值得投资者关注。 第一个关键指标是利息收入。微软的利息收入目前已经同比增长了44%,从2022财年第…...

Mac电脑删除第三方软件工具CleanMyMac X

经常使用Mac的人都知道,Mac除了可以在AppStore下载应用程序,还有许多软件是需要在网页上搜索下载的第三方软件。那么这类第三方软件软件除了下载方式不同之外还有什么是和从App store下载的软件有区别的吗?答案是肯定的,那就是这些…...

leetcode174. 地下城游戏(java)

地下城游戏 leetcode174. 地下城游戏题目描述 动态规划解题思路代码 动态规划专题 leetcode174. 地下城游戏 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/dungeon-game 题目描述 恶魔们抓住了公主并将她关在了地下城 …...

信号与系统复习笔记——傅里叶变换

信号与系统复习笔记——傅里叶变换 周期信号的傅里叶级数表示 特征函数 假设LTI系统的输入为 x ( t ) e s t x(t) e^{st} x(t)est 输出为: y ( t ) e s t ∗ h ( t ) ∫ − ∞ ∞ e s ( t − τ ) h ( τ ) d τ e s t ∫ − ∞ ∞ e − s τ h ( τ ) d…...

Allegor17.2版本WIN11系统CIS配置提示错误解决方案

错误提示: ERROR(ORCIS-6250): Unable to continue. Database access failed. Contact the database administrator to correct the following error(s), and then retry. ODBC Error Code: -1 Description: 在指定的 DSN 中,驱动程序和应用程序之间的体…...

Java设计模式七大原则-合成聚合复用原则

🧑‍💻作者:猫十二懿 ❤️‍🔥账号:CSDN 、掘金 、个人博客 、Github 🎉公众号:猫十二懿 合成-聚合复用原则 1、合成-聚合复用原则介绍 合成/聚合复用原则(Composition/Aggregatio…...

SOFA Weekly|可信基础设施技术分论坛、Layotto 社区会议回顾与预告、社区本周贡献...

SOFA WEEKLY | 每周精选 筛选每周精华问答,同步开源进展 欢迎留言互动~ SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件&am…...

Melody 监控(四十九)

当新的世界出现,请立即向他奔去 上一章简单介绍了Spring Boot Actuator详解(四十八), 如果没有看过,请观看上一章 一. JavaMelody 一.一 什么是 Java Melody JavaMelody是一个方便的Java或JavaEE Web 应用程序监控工具。 它允许自动存储由 Web 应用程序的实际操…...

Shell脚本管道符常用搭配命令

1.sort sort命令——以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。 sort [选项] 文件名 cat file | sort [选项] 常用选项 选项作用-n按照数字进行…...

基于html+mysql+Spring+mybatis+Springboot的Springboot宠物医院管理系统

运行环境: 最好是java jdk 1.8,我在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以,如果编译器的版本太低,需要升级下编译器,不要弄太低的版本 tomcat服务器环…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...

【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解

一、前言 在HarmonyOS 5的应用开发模型中&#xff0c;featureAbility是旧版FA模型&#xff08;Feature Ability&#xff09;的用法&#xff0c;Stage模型已采用全新的应用架构&#xff0c;推荐使用组件化的上下文获取方式&#xff0c;而非依赖featureAbility。 FA大概是API7之…...

Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合

无论是python&#xff0c;或者java 的大型项目中&#xff0c;都会涉及到 自身平台微服务之间的相互调用&#xff0c;以及和第三发平台的 接口对接&#xff0c;那在python 中是怎么实现的呢&#xff1f; 在 Python Web 开发中&#xff0c;FastAPI 和 Django 是两个重要但定位不…...