Docker 之桥接网络(一)

2023-10-29

参考:https://docs.docker.com/network/bridge/

在网络方面,桥接网络是一个链路层设备,它在网络段之间转发流量。网桥可以是运行在主机内核中的硬件设备或软件设备。

就Docker而言,桥接网络使用软件桥,允许连接到同一桥接网络的容器进行通信,同时提供与没有连接到桥接网络的容器的隔离。Docker桥驱动程序自动在主机上安装规则,这样不同桥网络上的容器之间就不能直接通信了。

桥接网络适用于运行在同一Docker守护进程主机上的容器。对于运行在不同Docker守护进程主机上的容器之间的通信,您可以在操作系统级别管理路由,也可以使用覆盖网络。

启动Docker时,将自动创建一个默认的桥接网络(也称为桥接),除非另外指定,否则新启动的容器将连接到它。您还可以创建用户定义的桥接网络。用户定义的桥接网络优于默认的桥接网络。

一、用户定义的桥和默认桥之间的区别

1、用户定义的桥提供容器之间的自动DNS解析。

 默认桥接网络上的容器只能通过IP地址互相访问,除非使用 --link选项,它被认为是遗留的。在用户定义的桥接网络中,容器可以通过 名称或别名彼此解析。

设想一个应用程序,它具有web前端和数据库后端。如果您调用您的容器web和db, web容器可以在db上连接到db容器,不管应用程序堆栈运行在哪个Docker上。

如果在缺省网桥网络上运行相同的应用程序堆栈,则需要手动创建容器之间的链接(使用遗留的--link标志)。这些链接需要在两个方向上创建,所以您可以看到,如果有两个以上的容器需要通信,情况就会变得非常复杂。或者,您也可以在容器中操作/etc/hosts文件,但是这会产生难以调试的问题。

2、用户定义的桥提供了更好的隔离。

所有没有指定--network的容器都连接到默认的桥接网络。这可能是一种风险,因为不相关的栈/服务/容器可以进行通信。

使用用户定义的网络提供了范围限定的网络,其中只有连接到该网络的容器才能通信。

3、可以动态地从用户定义的网络中附加和分离容器。

在容器的生命周期内,可以动态地将其与用户定义的网络连接或断开连接。要从缺省网桥网络中删除容器,需要停止容器并使用不同的网络选项重新创建它。

4、每个用户定义的网络都创建一个可配置的网桥。

如果您的容器使用默认的桥接网络,您可以配置它,但是所有的容器都使用相同的设置,比如MTU和iptables规则。另外,配置默认的桥接网络发生在Docker本身之外,需要重新启动Docker。

使用docker network create创建和配置用户定义的桥接网络。如果不同的应用程序组有不同的网络需求,您可以在创建每个用户定义的桥接时分别配置它。

4、默认桥接网络上的链接容器共享环境变量。

最初,在两个容器之间共享环境变量的惟一方法是使用--link 标志将它们链接起来。这种类型的变量共享在用户定义的网络中是不可能的。然而,有更好的方法来共享环境变量。几个想法:

  • 多个容器可以使用Docker卷挂载包含共享信息的文件或目录。
  • 可以使用docker-compose 一起启动多个容器,而compose文件可以定义共享变量。
  • 您可以使用swarm services代替独立的容器,并利用共享的 secrets and configs.

连接到同一个用户定义的桥接网络的容器可以有效地相互公开所有端口。要使一个端口可被不同网络上的容器或非docker主机访问,必须使用-p或--publish标志发布该端口。

 

二、管理用户定义的桥

使用docker network  create 命令创建用户定义的桥接网络

$ docker network create my-net

您可以指定子网、IP地址范围、网关和其他选项。有关详细信息,请参阅 the docker network create reference or the output of docker network create --help for details.

使用docker network rm 命令删除用户定义的桥接网络。如果容器当前连接到网络,请首先断开它们。

$ docker network rm my-net

当您创建或删除用户定义的桥接或连接或断开用户定义桥接的容器时,Docker使用特定于操作系统的工具来管理底层网络基础设施(例如添加或删除桥接设备或在Linux上配置iptables规则)。这些细节应该考虑实现细节。让Docker为您管理用户定义的网络。

三、将容器连接到用户定义的桥

创建新容器时,可以指定一个或多个--network标志。本例将Nginx容器连接到my-net网络。它还将容器中的80端口发布到Docker主机上的8080端口,以便外部客户机可以访问该端口。连接到my-net网络的任何其他容器都可以访问my-nginx容器上的所有端口,反之亦然。

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

要将正在运行的容器连接到现有的用户定义桥,请使用docker network connect命令。下面的命令将一个已经运行的my-nginx容器连接到一个已经存在的my-net网络:

$ docker network connect my-net my-nginx

四、将容器从用户定义的桥断开

要从用户定义的桥断开正在运行的容器,请使用docker network disconnect命令。下面的命令从my-net网络断开my-nginx容器。

$ docker network disconnect my-net my-nginx

五、使用IPV6

https://docs.docker.com/network/bridge/#use-ipv6

 

六、允许从Docker容器转发到外部世界

默认情况下,来自连接到默认桥接网络的容器的流量不会转发到外部世界。要启用转发,您需要更改两个设置。这些不是Docker命令,它们影响Docker主机的内核。

1、配置Linux内核以允许IP转发。

$ sysctl net.ipv4.conf.all.forwarding=1

2、将iptables转发策略的策略从DROP更改为ACCEPT。

$ sudo iptables -P FORWARD ACCEPT

这些设置不会在重新启动时持续存在,因此您可能需要将它们添加到启动脚本中。

七、使用默认网桥

默认的桥接网络被认为是Docker的遗留细节,不建议在生产环境中使用。配置它是一个手工操作,并且它有技术缺陷。

八、将容器连接到默认网桥网络

如果没有使用--network标志指定网络,而指定了网络驱动程序,则默认情况下容器将连接到默认网桥网络。连接到缺省桥接网络的容器可以通信,但只能通过IP地址进行通信,除非它们使用遗留的--link 标志进行链接。

九、配置默认网桥网络

要配置默认网桥网络,可以在daemon.json中指定选项。下面是一个示例守护进程。指定了几个选项的json。只指定需要自定义的设置。

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

重新启动Docker以使更改生效。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 之桥接网络(一) 的相关文章

  • 安装了360天擎不能读u盘_关于硬盘/U盘/储存卡格式,你不得不知道的常识!

    https www zhihu com video 942459588977627136 情况一 你手里有一只U盘或者SD卡 存储容量有16G甚至32G 但用它来拷贝东西的时候你发现 文件超过4G之后 就无法拷贝 这时候 你到底该怎么办呢
  • 实现图片的裁剪和融合。

    请参考之前的博客链接 https blog csdn net Helloorld 1 article details 130107465 spm 1001 2014 3001 5502 如何实现裁剪图片 本文主要是讲述如何利用SAM Seg
  • OpenGL学习笔记(五)-投光物-多光源

    参考网址 LearnOpenGL 中文版 哔哩哔哩教程 2 5 投光物 2 5 1 平行光 1 当一个光源处于很远的地方时 来自光源的每条光线就会近似于互相平行 例如太阳 不论物体和 或者观察者的位置 看起来好像所有的光都来自于同一个方向
  • python Flask中返回图片流给前端展示

    场景需求 需要在Flask服务器的本地找一张图片返回给前端展示出来 问题疑点 通常前端的 img 标签只会接受url的形式来展示图片 没试过在返回服务器本地的一张图片给前端 因此写个记录一下这个看起来有点奇葩的场景 通常个人博客 个人网站没
  • centos 7.9 yum 安装最新版docker与dnf安装docker compose v2

    centos 7 9 yum 安装最新版docker与dnf安装docker compose v2 一 环境查看 1 系统内核 uname r 2 系统版本 cat etc redhat release 二 更新yum源 1 备份旧yum仓
  • 网站遭受攻击高防cdn进行防御的原理是什么?

    网站遭受攻击高防cdn进行防御的原理是什么 什么是高防cdn cdn的全称是Content Delivery Network 即内容分发网络 最近这几年 互联网络技术不断改进的同时 网络安全问题日益严峻 在这样的互联网环境下 高防cdn由此
  • 最小二乘法的一般形式和矩阵形式原理推导和代码实现

    转自 作者 金良 golden1314521 gmail com csdn博客 http blog csdn net u012176591 1 线性代数模型 首先给出最小二乘解的矩阵形式的公式 推导过程 条件 矩阵必须是列满秩矩阵 否则的逆
  • Git 命令图形化在线练习

    git 命令在线练习网址如下 http onlywei github io explain git with d3 在master上先提交2个commit 创建3个分支 分支1打5个commit 分支2打6commit 分支3commit
  • 欧式几何与非欧式几何

    欧氏几何 几何学的一门分科 公元前3世纪 古希腊数学家欧几里得把人们公认的一些几何知识作为定义和公理 在此基础上研究图形的性质 推导出一系列定理 组成演绎体系 写出 几何原本 形成了欧氏几何 在其公理体系中 最重要的是平行公理 由于对这一公
  • Java常见的十道语法题-详解

    1 判断 101 200 之间有多少个素数 并输出所有素数 代码如下 判断素数 public static void main String args boolean flag 定义标记语句 for int i 101 i lt 200 i

随机推荐

  • 区块链概述

    一 什么是区块链 区块链是一个信息技术领域的术语 区块链是借由密码学串接以保护内容的自增长的交易记录列表 又称区块 每一个区块包含了前一个区块的哈希值 本区块的时间戳记以及交易数据 通常用默克尔树结构的哈希值表示 这样的设计使得区块内容具有
  • Chromedriver安装和配置

    首先安装Chromedriver 下载网址 http npm taobao org mirrors chromedriver 找到与你chrome浏览器对应版本的下载 上面只是一部分 如果没有的可以上百度查一下 然后指定路径进行安装 这里我
  • 【Python编程】Python实现生产者消费者模式(多线程爬虫)

    Python实现生产者消费者模式 多线程爬虫 1 多组件的Pipeline技术架构 复杂的事情一般都不会一下子做完 而是会分很多中间步骤一步步完成 2 生产者消费者爬虫的架构 3 多线程数据通信的 queue Queue queue Que
  • Order By 和 Group By的适用场景

    Order By和Group By看起来很像 但实际上使用用途和适用场景实际上很大的不同 Order By Order By是排序根据所给字段进行排序 select from s order by sname desc sage desc
  • tensorflow 1.13.1 安装采坑

    环境 win10 x64位 cuda10 1 cudnn 7 5 vs2013 vs2015 distributed GTX1060 按照网上的教程安装 如下面博客 https blog csdn net huanyingzhizai ar
  • Android WebView打不开网页

    今天给公司前端同事打了个webview测试包 发现页面打不开 有两个原因 1 测试webview包没有配置好 特别是缓存没配置的同事用到h5缓存就打不开了 正确配置如下 设置支持javascript webView getSettings
  • Python第三方拓展包(安装下载方法)

    找到安装的位置 第一种方法 Anaconda集成环境 Anaconda集成环境 优点太多了 百度一大堆介绍 Anaconda的优点总结起来就八个字 省时省心 分析利器 省时省心 Anaconda通过管理工具包 开发环境 Python版本 大
  • JS点击计数存储案例

    项目功能要求 点击页面红色块默认不计数 点击开始按钮后再点击红色块则开始计数 点击结束按钮后再点击红色块则不计数 关闭页面并再次打开页面 界面会显示上次关闭页面时的计数值 代码设计 本项目结合了前端页面的设计和JS的使用 具体代码如下
  • 编译器工具 Flex Bison for Windows 简单入门例子

    最近从事一个系统仿真软件的开发 里面定义了自己的描述性语言MSL MSL语言经FlexBison转换成C语言 然后用C编译器来编译并计算仿真 现在领域驱动开发比较热门 有机会定义自己的语言对程序员来说是比较有成就感的 免不了要去学习编译原理
  • 笔记本电脑电池怎么拆_笔记本电脑电池的容量单位是Wh,手机是mAh,二者怎么比较?...

    Hello大家好 我是兼容机之家的小牛 目前很多轻薄本都搭载了全功能的Type C接口 大都支持PD充电 所以有的机友出门的时候就不会带上笔记本的 板砖 适配器了 往往会选择购买一个手机 电脑通用的PD充电器 大家平时都知道自己的手机电量是
  • steam创客教室

    人生不同阶段都有不同的使命 在学生阶段 学习掌握知识 为他们以后的人生获得成就的能力 就是他们这个阶段最重要的使命 格物斯坦小坦克的学生生涯也是这样做的 为了这个使命 他们必须要学习忍耐 学会放弃 学会付出 这不仅仅是学习的需要 也是人生的
  • 用 Python 爬取股票实时数据

    今天我们一起来学习一个 Python 爬虫实战案例 我们的目标网站就是东方财富网 废话不多说 开搞 网站分析 东方财富网地址如下 http quote eastmoney com center gridlist html hs a boar
  • 解读Android LOG机制的实现:(5)获取LOG的应用程序LogCat

    解读Android LOG机制的实现 5 获取LOG的应用程序LogCat 田海立 CSDN 2011 07 27 Android提供的LOG机制的实现贯穿了Java JNI 本地c c 实现以及LINUX内核驱动等Android的各个层次
  • 三步教你实现MyEclipse的debug远程调试

    MyEclipse远程调试程序是个神奇的东西 有时一个项目本地运行没问题可放到服务器上 同样的条件就是结果不一样 有时服务器上工程出点问题需要远程调测 于是就灰常想看一下程序在远程运行时候的状态 希望让程序在远程运行 还可以在本机打断点跟一
  • 执行力的关键在于中层,成败的关键在于细节

    编者注 这是一位国内著名企业总裁在一次工作会议上的讲话 文中说到完美的 细节 一定是完美执行力的结果 并且切中时弊的指出 执行力的关键在于中层 如何做到这一点 关键就是要建立一个保证中层执行力到位的强势文化 也许真正落实到位 不但首先会冲击
  • Nodejs

    一 是什么 中间件 Middleware 是介于应用系统和系统软件之间的一类软件 它使用系统软件所提供的基础服务 功能 衔接网络上应用系统的各个部分或不同的应用 能够达到资源共享 功能共享的目的 在NodeJS中 中间件主要是指封装http
  • 华为OD机试 - 阿里巴巴找黄金宝箱(IV)(Java)

    题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上 无意中发现了强盗集团的藏宝地 藏宝地有编号从0 N的箱子 每个箱子上面有一个数字 箱子排列成一个环 编号最大的箱子的下一个是编号为0的箱子 请输出每个箱了贴的数字之后的第一个比它大的数 如果不
  • java爱心效果代码来了

    爱心 代码来了 村上春树说 仪式是一件很重要的事 现实生活被琐事充斥 仪式感总是被人遗忘 凑合的晚饭 乱丢的衣物 杂乱无章的生活让原本平淡的生活过得一潭死水 找不到生活的乐趣 童话 小王子 里狐狸对小王子说 你最好在每天相同的时间来 比如你
  • scrapy提高爬取速度

    scrapy在单机跑大量数据的时候 在对settings文件不进行设置的时候 scrapy的爬取速度很慢 再加上多个页面层级解析 往往导致上万的数据可能爬取要半个小时之久 这还不包括插入数据到数据库的操作 下面是我在实验中测试并且验证爬取速
  • Docker 之桥接网络(一)

    参考 https docs docker com network bridge 在网络方面 桥接网络是一个链路层设备 它在网络段之间转发流量 网桥可以是运行在主机内核中的硬件设备或软件设备 就Docker而言 桥接网络使用软件桥 允许连接到