彩票网站制作开发/班级优化大师官网登录
Docker 的网络通信
- 1.Docker 容器网络通信的基本原理
- 1.1 查看 Docker 容器网络
- 1.2 宿主机与 Docker 容器建立网络通信的过程
- 2.使用命令查看 Docker 的网络配置信息
- 3.Docker 的 4 种网络通信模式
- 3.1 bridge 模式
- 3.2 host 模式
- 3.3 container 模式
- 3.4 none 模式
- 4.容器间的通信
- 4.1 通过 IP 地址进行通信
- 4.2 通过 Docker DNS Server 进行通信
- 4.3 通过 Joined 方式进行通信
- 4.4 容器间的跨节点通信
- 4.4.1 三种方式
- 4.4.2 Overlay 网络与注册中心
- 5. 容器的网络访问控制
- 5.1 容器内的应用访问外部网络
- 5.2 从外部网络访问容器内的应用
Docker 的容器运行在宿主机的虚拟机上。这些虚拟机彼此独立,彼此之间没有任何接口,即容器彼此之间是 逻辑隔离 的。
那么,如何实现容器的相互通信呢?容器又如何访问外部的网络呢?外部的网络如何才能访问部署在容器内的应用呢?本篇博客将带领大家了解这些问题。
1.Docker 容器网络通信的基本原理
Docker 容器中的网络接口默认都是 虚拟接口。虚拟接口的最大优势是转发效率极高。这是因为 Linux 通过在内核中进行数据复制来实现虚拟接口之间的数据转发,即发送接口缓存中的数据包会被直接复制到接收接口的缓存中,而无需通过外部的物理网络设备进行交换。
⭐ 虚拟接口和一个正常的以太网卡并无太大区别,只是它的速度比以太网卡快的多。
Docker 的网络很好地利用了 Linux 虚拟网络技术,在宿主机的物理网卡和容器内分别创建一个虚拟接口(veth
),并让它们通过宿主机的 docker0
网桥进行连接,我们把这样的一对 veth
叫做 veth pair
。
1.1 查看 Docker 容器网络
基于 CentOS 的镜像创建一个容器,并进入该容器内。
docker run -it centos /bin/bash
为了查看容器的网络信息,在容器内安装 net-tools
网络工具。
yum install -y net-tools
在宿主机打开一个命令行窗口,执行以下命令查看宿主机的 docker0
网桥信息。
ifconfig
在容器内执行以下命令查看容器网络信息。
ifconfig
容器内的网络地址和宿主机的网络地址具有相同的 flag
。这说明在创建容器时,会成对地创建 veth pair
,并且它们通过宿主机的 docker0
网桥进行通信。
1.2 宿主机与 Docker 容器建立网络通信的过程
2.使用命令查看 Docker 的网络配置信息
利用以下命令查看 Docker 的网络通信模式。
docker network ls
查看 bridge
模式的详细信息。
docker network inspect 20ca9d84d5b4
3.Docker 的 4 种网络通信模式
3.1 bridge 模式
bridge
模式是 Docker 默认的网络通信模式,是开发者最常用的模式。
在 bridge
模式下,Docker 引擎会创建独立的网络命名空间。这样就可以保证运行在每一个命名空间中的容器具有独立的网卡等网络资源。
利用 bridge
模式可以非常方便地实现容器与容器之间、容器与宿主机之间的网络隔离。通过使用宿主机上的 docker0
网桥,可以实现多个容器与宿主机(乃至外部网络)的网络通信。
3.2 host 模式
在使用 host
模式时,容器与宿主机共享同一个网络命名空间,容器的 IP 地址与宿主机的 IP 地址相同。如果宿主机具有公网的 IP 地址,则容器也拥有这个公网的 IP 地址。即这时容器可以直接使用宿主机的 IP 地址与外界进行通信,且容器内服务的端口也可以直接使用宿主机的端口,无需进行任何的转换。
由于在 host
模式下不再需要宿主机的转发,因此其性能得到了极大的提高。
尽管使用 host
模式可以很方便的通过 localhost
或者 127.0.0.1
实现容器与宿主机的相互访问,并且性能也比较好,但是这种模式也存在以下两个问题:
- 由于容器使用了宿主机的网络环境,因此网络环境的隔离性功能被减弱,从而造成宿主机和容器争用网络资源。容器本身也不再拥有所有的网络资源,而是与宿主机共享网络资源。
- 宿主机和容器使用了相同的 IP 地址,这不利于网络的配置和管理。
3.3 container 模式
在 container
模式下,容器之间会共享网络环境。即一个容器会使用另一个容器的网络命名空间。因此,在这种模式下,容器之间可以通过 localhost
或者 127.0.0.1
进行互相间的访问,从而提高了传输的效率。
⭐
container
模式节约了网络资源,但是运行在这种模式下的容器不存在网络隔离。Container 网络的隔离性处于bridge
网络与host
网络之间。
container
模式在一些特殊场景中非常有用。例如,在 K8s 中创建 Pod 时,会首先创建 Pod 基础容器;而 Pod 中的其他容器则采用 container
模式与基础容器进行通信。Pod 中的各个容器采用 localhost 或者 127.0.0.1
进行通信,从而将 Pod 中的所有容器形成一个逻辑整体。
3.4 none 模式
none
模式下的容器具有独立的网络命名空间,但不包含任何网络配置。只能通过 Local Loopback 网卡与容器进行通信,即只能使用 localhost
或者 127.0.0.1
访问容器。
在 none
模式下需要手动进行网络配置,例如使用 pipwork
工具指定容器的 IP 地址等。
4.容器间的通信
4.1 通过 IP 地址进行通信
在宿主机上创建一个容器时,Docker 守护进程会为每一个新创建的容器自动分配一个虚拟的 IP 地址。但是,外部的网络是无法通过这个虚拟 IP 地址访问容器内的应用的。
⭐ 这个虚拟 IP 地址只提供 Docker 内部各个容器相互通信使用。即通过这个 IP 地址实现了 Docker 内容器之间的互相连通。
4.2 通过 Docker DNS Server 进行通信
在实际的使用过程中,通过容器的虚拟 IP 地址进行容器间的相互通信非常不利于管理和维护。
从 Docker 1.10 版本开始,Docker 引擎自带了一个内嵌的 DNS Server。有了它,容器之间可以直接通过容器名称进行通信。这种通信方式的使用方法也非常简单,在启动容器时,使用 --name
参数为容器命名即可。
docker run -it --network=bridge2 --name box1 busybox
docker run -it --network=bridge2 --name box2 busybox
bridge2
是一个bridge
模式的自定义网络。busybox
是一个集成了一百多个最常用 Linux 命令和工具的软件工具箱。box1
、box2
是容器名称。
例如,在容器 box1
内执行 ping
命令,以确认是否能使用容器名称与对方进行通信。
ping box2
4.3 通过 Joined 方式进行通信
Joined 是 Docker 引擎提供的一种特殊的容器间通信方式,其本质上使用了 container
模式。因为在 container
模式下,多个容器共享同一个网络环境,也共享网卡的配置。因此,在 container
模式下,容器之间可以直接通过 localhost
或者 127.0.0.1
进行通信。
例如,在 box2
容器中,通过 wget 127.0.0.1
命令可以直接访问 box1
容器的 HTTP 服务。
4.4 容器间的跨节点通信
在同一台宿主机中,不同的多个容器可以借助 docker0
网桥直接进行通信。而在实际的项目中,一个复杂的系统往往需要部署多个组件,而为了提高组件的运行效率,往往将这些组件部署到不同的主机上。那么在 Docker 中如何实现容器间的跨节点通信呢?
4.4.1 三种方式
- 通过容器在宿主机上的端口映射来实现通信。使用这种方式实现容器间的跨节点通信,需要宿主机进行转发,所以使用起来非常不方便。
- 通过 Docker Overlay 网络来实现通信。这种方式可以直接使用容器本身的虚拟 IP 地址进行相互通信,这与运行在同一台宿主机上的不同容器间的通信方式完全一样。Docker 原生的 Overlay 网络是目前实现容器跨节点通信的主流方式。要使用 Overlay 网络,需要注册中心的支持。
- 通过第三方网络来实现容器间的跨节点通信。
4.4.2 Overlay 网络与注册中心
Overlay 网络是在不改变现有网络的前提下,对 IP 报文进行数据的封装,从而利用 IP 路由协议实现数据的转发功能。在 Overlay 网络中,通过拓展标识符可以支持 16M 的用户。
Docker 的 Swarm 集群便是 Overlay 网络的一个实现,而使用 Overlay 网络需要注册中心的支持。注册中心能够提供服务的注册与发现功能。Docker 支持的注册中心有 Zookeeper
、Consul
和 ETCD
。
5. 容器的网络访问控制
5.1 容器内的应用访问外部网络
在默认情况下,容器内的应用访问外部网络是通过宿主机上的 docker0
网桥来实现的。当容器内的应用需要访问外部网络时,需要宿主机进行转发。
执行以下指令可以确定宿主机的 Linux 是否开启了 IP 数据包转发功能。
sysctl net.ipv4.ip_forward
- 如果返回 1 1 1,则表示已开启。
- 如果返回 0 0 0,则表示未开启。
可以执行以下语句开启此功能。
sysctl -w net.ipv4.ip_forward=1
开启此功能的另一种方式是,在启动 Docker 服务时指定参数 --ip-forward=true
。这样 Docker 守护进程会自动将宿主机 ip_forward
参数设置为 1 1 1。
5.2 从外部网络访问容器内的应用
运行在宿主机上的容器,允许从外部网络访问其内部的应用,这主要是通过 -p
参数来实现的。
通过在创建容器时指定 -p
参数,可以将容器内的某个端口与宿主机绑定,来完成宿主机与容器的端口映射。基本质是:在宿主机 iptable
表中添加相应的路由转发规则,对访问外部 IP 地址的数据包进行转换,将其访问的目标地址修改为容器的 IP 地址和容器内的端口。
基于 Nginx 的镜像创建一个容器,并将容器的 80 80 80 端口映射到宿主机的 1234 1234 1234 端口。
docker run -d -p 1234:80 nginx
在宿主机上,通过以下命令来查看 iptable
表中的路由转发规则。
iptables -t nat -L -n | grep 1234
相关文章:

【云原生】Docker 的网络通信
Docker 的网络通信 1.Docker 容器网络通信的基本原理1.1 查看 Docker 容器网络1.2 宿主机与 Docker 容器建立网络通信的过程 2.使用命令查看 Docker 的网络配置信息3.Docker 的 4 种网络通信模式3.1 bridge 模式3.2 host 模式3.3 container 模式3.4 none 模式 4.容器间的通信4.…...

如何优雅的实现浏览器多标签通讯
前言 开发过程中无法避免遇到需要进行多标签通讯的情况,例如: 管理员登陆后,其他打开标签的页面登陆状态要变更课堂页面只能打开一个,另一个则通知失效等等。。。场景 然而实现该功能,我们需要使用页面能共同持有的…...

刷题之不相同的字符串(卡码网模拟)
卡码网不同的字符串 #include<vector> #include<string> #include<iostream> using namespace std; int main() {int n0;cin>>n;for(int i0;i<n;i){string s;cin>>s;vector<int>hash(26,0);for(int j 0;j < s.size();j)hash[s[j…...

JS-导入导出
export和export default是ES6中导出模块中变量的语法 导入导出变量 //导出方法(js文件中) export const 变量名值//导入方法 对应导入的变量,一定要加花括号 import {变量名} from js文件路径 导入导出函数 //导出方法(js文件中…...

【代码随想录——数组篇】
代码随想录——数组篇 2. 二分查找3. 移除元素4. 有序数组的平方5. 长度最小的子数组6. 螺旋矩阵II 2. 二分查找 力扣题目链接 前提: 有序数组数组中无重复元素 代码: (版本一)左闭右闭区间 class Solution {public int sea…...

使用 js 类封装项目中音频播放功能的工具方法utils
在前端开发中,音频播放功能是一个常见的需求,我们经常需要在项目中加入音频播放、音频提示等功能。为了提高开发效率和代码复用性,我们可以封装一个工具方法来管理音频播放功能。 在本文中,我将介绍如何封装项目中音频播放功能的…...

【超详细】R语言贝叶斯方法在生态环境领域中的高阶技术应用
查看原文>>>R语言贝叶斯方法在生态环境领域中的高阶技术应用 目录 专题一:前期资料 专题二:R和Rstudio入门和绘图(含ggplot) 专题三:R语言数据清洗-tidyverse包应用 专题四:贝叶斯回归模型-回…...

Python 正则表达式 re . 符号
Python 正则表达式 re . 符号 正文示例1示例2 正文 用法说明:(点号) 在默认模式下,匹配除换行符以外的任意字符。 如果指定了 flags 参数 DOTALL ,它将匹配包括换行符在内的任意字符。 示例1 import restr1 abcde print(re.search(., str…...

智慧监控 高效运维
随着企业IT建设的不断深入和完善,IT管理的重要性逐渐被重视,打通数据割裂,使业务更加充分融合。亟需一套统一的平台来实现跨品牌跨设备类型的集中监控和管理。 LinkSLA带外监控平台,不仅适用于大规模或超大规模的运维场景&#x…...

JAVA每日面试题(一)
Java面试问题及答案 1. 解释Java中的垃圾回收机制和如何优化它 问题: 在Java中,垃圾回收(Garbage Collection, GC)是如何工作的?作为一名Java开发者,你如何优化垃圾回收以提高应用性能? 答案…...

Java数组创建与使用
一.创建和初始化 1.数组是怎么创建的? 直接举例子: int[] arr new int[10]; 这里只简单的举一个int开辟数组的例子。 可见java数组的创建于C语言是不同的。前面是一个int[ ]就是一个数组的数据类型,后面的arr是数组名,最后[…...

EMAP如何建数据源
新建数据源: EMAP底座的数据源,名称为“DB_EMAP_BIZ_BASE",不可随意更改. 新建业务系统数据源,名称为”DB_STUDY_BIZ_BASE". 支持的数据库: 支持两种类型数据库:H2 和 oracle 新建H2数据源&am…...

在 Linux 中创建文件
目录 ⛳️推荐 前言 使用 touch 命令创建一个新的空文件 使用 echo 命令创建一个新文件 使用 cat 命令创建新文件 测试你的知识 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到…...

高德地图+HTML+点击事件+自定心信息窗体
代码如下 <!doctype html> <html><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"initial-scale1.0, user-scalableno, width…...

流畅的python-学习笔记_协议+继承优缺点
接口和协议 python动态语言,没有interface等概念,接口和协议方法有的也有替代品,所以类似于鸭子类型,只关注行为像鸭子,不关注它是不是鸭子。不是每个接口都得实现,这是允许的 猴子补丁 可动态给对象添加…...

哪个文件加密软件好?迅软加密软件特性解析
哪个文件加密软件好? 这里推荐一款好用的文件加密软件,迅软DSE加密软件,有17年的加密经验了,已为三十万企业解决信息安全问题。简单易用,兼容性强,各类型文件都可加密。完善的售后保障,各地有服…...

Ubuntu 根目录扩容
环境 物理机:MacBook Air M2 Sonoma 14.4.1 虚拟机:VMware Fusion Player 13.5.0 镜像:Jammy Desktop ARM64 步骤 删除所有快照,关闭镜像,在 vm 上找到该镜像的硬盘设置,进行扩容; 开启镜像&am…...

人证比对API接口如何对接
人证比对API接口全称叫人脸身份证比对API接口也叫人脸实名认证API接口、实人认证API接口,指的是输入姓名、身份证号码和头像照片,与公安库身份证头像进行权威比对,返回比较结果。那么人脸身份证比对API接口该如何对接呢? 首先我们…...

NIO(非阻塞I/O)和IO(阻塞I/O)详解
文章目录 一、NIO(Non-blocking I/O,非阻塞I/O)1、Channel(通道)2、Buffer(缓冲区)1、ByteBuffer 读取文件2、ByteBuffer 的常用方法2、ByteBuffer 的结构详解3、ByteBuffer 与字符串互转4、Sca…...

【网络】传输层的特点总结
1传输层协议 传输层主要有两个常见的协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP 提供可靠的、面向连接的通信服务,适用于对数据传输可靠性要求高的场景,如网页浏览、文件传输等。而 UD…...

Scala 多版本下载指南
Scala,这一功能丰富的编程语言,结合了面向对象和函数式编程的精华,为开发者提供了强大的工具来构建高效、可扩展的应用程序。随着Scala社区的不断壮大和技术的演进,多个版本的Scala被广泛应用于不同的项目与场景中。本文旨在为您提…...

已经安装tensorflow,仍报错No module named ‘tensorflow‘
在安装某些python虚拟环境的教程文章中,经常看到有评论区说安装了但是调用显示无模块,例如pytorch和tensorflow等等。 其实跟之前我写过的一篇文章解决方法类似,就是python项目中需要应用哪个虚拟环境,这个项目的python解释器就选…...

五一 作业
#include <iostream>using namespace std; class Num { private:int a; public:Num() {}Num(int a):a(a){}//设置a的值void set(int a){this->aa;}//1-a的和void Sum(){if(a<1){cout<<"a<1"<<endl;return;}int sum0;for(int i1;i<a;i)…...

TesseractOCR安装及使用
1. 基本概念 1.1 Tesseract Tesseract 是一款基于 C 语言开发并开源的光学识别工具,提供底层的文字识别能力。 1.2 Tess4J Tess4J 是对 Tesseract OCR API 的 Java 封装,有了 Tess4J 之后 Java 就可以直接调用本地安装的 Tesseract 进行文字识别。 …...

npm安装指定版本,npm删除依赖,卸载依赖
安装指定版本 npm中安装指定的版本号,格式为 ‘包名版本号’ npm install 包名称版本号 --save 例如安装jquery: npm install jquery3.0.0 --save在package.json里面可以看到对应的包: "jquery": "^3.0.0"注意:已有…...

从代码到洞察:使用API接口深入分析商品详情数据
在电子商务的世界中,商品详情数据是企业做出明智决策的基石。API(应用程序编程接口)提供了一种强大的方式来获取这些数据,不仅可以简化数据获取过程,还可以为深入分析和业务洞察提供丰富的信息。本文将探讨如何使用API…...

数字旅游以科技创新为核心:推动旅游服务的智能化、精准化、个性化,为游客提供更加贴心、专业、高效的旅游服务
目录 一、引言 二、数字旅游以科技创新推动旅游服务智能化 1、智能化技术的应用 2、提升旅游服务的效率和质量 三、数字旅游以科技创新推动旅游服务精准化 1、精准化需求的识别与满足 2、精准化营销与推广 四、数字旅游以科技创新推动旅游服务个性化 1、个性化服务的创…...

HTTP深度指南:协议结构、请求方法与状态码
详解HTTP HTTP教程HTTP消息结构HTTP状态码HTTP和HTTPS HTTP教程 HTTP(超文本传输协议,HyperText Transfer Protocol)是一种用于分布式、协作式、超媒体信息系统的应用层协议。* HTTP是一个基于TCP/IP通信协议来传递数据的(HTML文…...

负载或反向代理服务器如何配置XFF以获取终端真实IP
文章目录 XFF介绍工作原理注意事项 配置方式1. Nginx2. HAProxy3. F5 BIG-IP4. Radware注意事项 本文介绍如何在反向代理或负载中配置XFF,方便后端服务获取请求来源的真实IP XFF介绍 X-Forwarded-For(简称XFF)是一个非标准的HTTP头部字段&a…...

Satellite Communications Symposium(WCSP2022)
1.Power Allocation for NOMA-Assisted Integrated Satellite-Aerial-Terrestrial Networks with Practical Constraints(具有实际约束的 NOMA 辅助天地一体化网络的功率分配) 摘要:天地一体化网络和非正交多址接入被认为是下一代网络的关键组成部分,为…...