Docker网络架构介绍
本文主要介绍了Docker容器的单机网络架构与集群网络架构,辅以演示,并简单介绍了网络管理中的命令。
前文:
Docker的安装与简单操作命令-CSDN博客
docker网络原理介绍
与ovs类似,docker容器采用veth-pair + linux bridge (虚拟交换机)的通信方式
以Bridge类型举例
容器外的if20连接了容器cm01的if21网卡
容器外的if22连接了容器cm02的if22网卡
数字不固定,一般宿主机是偶数,容器内是奇数
容器内的ip地址通过vRouter的NAT转换成宿主机地址
#二层mac表寻址
docker run -dit --name cm01 alpine
docker run -dit --name cm02 alpine
#互ping后
brctl showmacs docker0
port no mac addr is local? ageing timer1 02:42:ac:11:00:02 no 0.142 02:42:ac:11:00:03 no 0.142 36:5c:3a:ff:64:14 yes 0.002 36:5c:3a:ff:64:14 yes 0.001 ae:84:17:1c:93:6c yes 0.001 ae:84:17:1c:93:6c yes 0.00
docker网络类型介绍
docker默认创建了三种网络类型
docker network ls
NETWORK ID NAME DRIVER SCOPE
a21005000639 bridge bridge local
e6a21ab3e3b4 host host local
6725e5c3cb83 none null local
docker network inspect a21005000639 #查看网络类型详细信息
docker共有5种网络类型,各有特点
1、none 只有loopback,容器内部无网卡
2、host 容器使用宿主机网络,类似于VMwareworkstation的桥接网络
——直接共享宿主机的网络状态
——不同容器之间需要使用不同的IP地址
——直接访问,效率更高3、bridge (容器默认使用并连接到docker0网桥) 最常用的方式
——通过NAT进行访问,外部访问即指定端口号
——二层通过linux Bridge mac表进行交换
——三层通过iptables和路由表进行转发
——经过NAT装换,效率相对较低4、container 共享容器命名空间
——主机和主机共享命名空间
——不同容器之间可以使用相同的IP地址
——k8s打包pod时使用
5、vxlan cluster 集群网络
——用于集群内容器实现大二层通信——通过安装etcd实现
Bridge网络
创建新的网桥br1
docker network create
-d #指定网络类型
--gateway #指定网关
--subnet #指定子网docker network create -d bridge br1 #添加了类型为Bridge的网桥
docker network rm br1 #删除网桥
#如果指定子网创建
docker network create -d bridge --subnet 192.168.1.0/24 -- gateway 192.168.1.1 br1
通过查看docker network ls和brctl show,可以发现都多了一个网桥br1
没有指定子网的情况下,子网会顺延创建,默认的docker0使用的是172.17网段,br1使用172.18网段
创建新的容器并指定网络
docker run -itd --name cm04 --network br1 alpine
docker exec -it cm04 ash
ip a
能看到新的容器已经获得了地址
新的br上增加了一个interface
查看iptables
将容器切换网桥
docker network disconnect bridge cm01 #断开连接
docker network connect br1 cm01 #重新连接
docker network inspect br1 #查看br1状态,可以看到有两个容器获得了地址
自定义网桥的域名访问
在用户自定义的网络类型中,自带了域名解析功能,可以使用域名直接进行访问
host网络
复制宿主机网络状态,与宿主机共用同一个网络命名空间
docker run -itd --name cm05 --network host alpine
docker exec -it cm05 ash
ip a #看到了所有网络的网卡
none网络
docker run -itd --name cm08 --network none alpine
docker exec -ti cm08 ash
ip a
container网络
复制另外容器的网络状态,与另外容器共用同一个网络命名空间
docker run -itd --name cm06 --network container:cm01 alpine
docker exec -it cm06 aship a #与cm01使用的网络一样
vxlan cluster网络
#docker版本为Docker 20.10.6,如果不是这个版本可能会报错
集群场景下,两个宿主机要跨网段进行大二层交换,需要安装etcd分布式数据库,构建etcd集群,用以同步网络信息
集群场景下,两个宿主机要跨网段进行大二层交换,需要安装etcd分布式数据库,构建etcd存储,用以同步网络信息
注意:docker版本为Docker 20.10.6,如果不是这个版本可能会报错
#下载etcd
wget https://github.com/coreos/etcd/releases/download/v3.0.12/etcd-v3.0.12-linux-amd64.tar.gz
#如果报错也可以用迅雷下载后传到宿主机中
我将其放在了根目录下
tar -zxvf etcd-v3.0.12-linux-amd64.tar.gz#创建etcd集群,宿主机1
cd /etcd-v3.0.12-linux-amd64/
nohup ./etcd --name docker-node1 --initial-advertise-peer-urls \
http://192.168.8.150:2380 \
--listen-peer-urls http://192.168.8.150:2380 \
--advertise-client-urls http://192.168.8.150:2379 \
--listen-client-urls http://192.168.8.150:2379,http://127.0.0.1:2379 \
--initial-cluster-token etcd-cluster \
--initial-cluster docker-node1=http://192.168.8.150:2380,docker-node2=http://192.168.8.148:2380 \
--initial-cluster-state new&#创建etcd集群,宿主机2
cd /etcd-v3.0.12-linux-amd64/
nohup ./etcd --name docker-node2 --initial-advertise-peer-urls \
http://192.168.8.148:2380 \
--listen-peer-urls http://192.168.8.148:2380 \
--advertise-client-urls http://192.168.8.148:2379 \
--listen-client-urls http://192.168.8.148:2379,http://127.0.0.1:2379 \
--initial-cluster-token etcd-cluster \
--initial-cluster docker-node1=http://192.168.8.150:2380,docker-node2=http://192.168.8.148:2380 \
--initial-cluster-state new&创建完之后再单开一个terminal
#验证
ps -ef | grep etcd
#root 2655 2428 9 03:37 pts/1 00:00:00 ./etcd --name docker-node2 --initial-advertise-peer-urls http://192.168.8.148:2380 --listen-peer-urls http://192.168.8.148:2380 --advertise-client-urls http://192.168.8.148:2379 --listen-client-urls http://192.168.8.148:2379,http://127.0.0.1:2379 --initial-cluster-token etcd-cluster --initial-cluster docker-node1=http://192.168.8.150:2380,docker-node2=http://192.168.8.148:2380 --initial-cluster-state new#检查健康状态
cd /etcd-v3.0.12-linux-amd64/
./etcdctl cluster-health
#member 55bbbb082228277b is healthy: got healthy result from http://192.168.8.150:2379
#member fd79a45b0c14607d is healthy: got healthy result from http://192.168.8.148:2379
#cluster is healthy#docker关联etcd
#宿主机1
systemctl stop docker.service
systemctl stop docker.socket
/usr/bin/dockerd -H tcp://0.0.0.0:2375 \
-H unix://var/run/docker.sock \
--cluster-store=etcd://192.168.8.150:2379 \
--cluster-advertise=192.168.8.150:2375&
#宿主机2
systemctl stop docker.service
systemctl stop docker.socket
/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \
--cluster-store=etcd://192.168.8.148:2379 \
--cluster-advertise=192.168.8.148:2375&#集群主机中创建network
#在宿主机1创建与查看
docker network create -d overlay etcd_network
docker network ls
#NETWORK ID NAME DRIVER SCOPE
#80e52b011080 bridge bridge local
#47b97959e9a3 etcd_network overlay global
#736b5705ffbf host host local
#cc7dfdbc929a none null local
docker inspect etcd_network在宿主机2查看与宿主机1一致
docker network ls
#NETWORK ID NAME DRIVER SCOPE
#80e52b011080 bridge bridge local
#47b97959e9a3 etcd_network overlay global
#736b5705ffbf host host local
#cc7dfdbc929a none null local
相关文章:

Docker网络架构介绍
本文主要介绍了Docker容器的单机网络架构与集群网络架构,辅以演示,并简单介绍了网络管理中的命令。 前文: Docker的安装与简单操作命令-CSDN博客 docker网络原理介绍 与ovs类似,docker容器采用veth-pair linux bridge (虚拟交…...
Android studio新版本aar包导入项目中配置
目录 1、so、aar导入在项目build.gradle中配置 2、新版本迁移到setting.grade配置 1、so、aar导入在项目build.gradle中配置 repositories {flatDir {dirs libs} }2、新版本迁移到setting.grade配置 flatDir {dirs libs } 如下图所示 pluginManagement {repositories {gra…...

HBase-架构与设计
HBase架构与设计 一、背景二、HBase概述1.设计特点2.适用场景2.1 海量数据2.2 稀疏数据2.3 多版本数据2.4 半结构或者非结构化数据 三、数据模型1.表逻辑结构2.RowKey3.Column Family4.TimeStamp5.存储结构 四、HBase架构图1.Client2.Zookeeper3.HMaster4.HRegionServer5.HRegi…...
SpringBoot基础系列:工具类使用
断言 Assert // 要求参数 object 必须为非空(Not Null),否则抛出异常,不予放行 // 参数 message 参数用于定制异常信息。 void notNull(Object object, String message) // 要求参数必须空(Null)ÿ…...
使用 nohup java - jar 不输出日志
要在使用nohup java -jar命令时不输出日志,可以将标准输出和标准错误输出重定向到特殊设备文件/dev/null。这样做将会丢弃所有的输出。 以下是在Linux中使用nohup java -jar命令并禁止输出日志的示例: 复制代码 nohup java -jar your-application.jar …...

前端开发学习 (五) 生命周期函数、Ajax请求
关于vue实例的声明周期,从Vue实例创建、运行、到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期 (https://cn.vuejs.org/v2/guide/instance.html#实例生命周期 ) 而声明周期勾子就是生命周期…...

TypeScript中的单件设计模式
基本概念 (1) 了解设计模式 设计模式通俗的讲,就是一种更好的编写代码方案,打个比喻:从上海到武汉,你可以选择做飞机,做轮船,开车,骑摩托车多种方式,把出行…...

【无标题】安装环境
这里写目录标题 清华镜像加速 安装cuda11.3 PyTorch 1.10.1https://pytorch.org/get-started/previous-versions/[如果没有可以点Previous pyTorch Versions,这里面有更多的更早的版本](https://pytorch.org/get-started/locally/) 复制非空文件夹cp: -r not specif…...

一. 初识数据结构和算法
数据结构与算法是一个达到高级程序员的敲门砖。当你脱离了语言的应用层面,去思考他的设计层面时,你就依旧已经开始初识数据结构与算法了 数据结构 什么是数据结构 对于数据结构的定义官方并没有统一的解释,在各个百科以及算法的书中…...
qt 使用百度在线地图 方法1
在使用Qt和百度在线地图时,你需要从百度地图开放平台获取API密钥,并使用该密钥在Qt应用程序中集成百度地图。以下是一个简单的示例,演示了如何在Qt中使用百度在线地图: 1,首先,从百度地图开放平台获取API密…...

轻快小miniconda3在linux下的安装配置-centos9stream-Miniconda3 Linux 64-bit
miniconda与anaconda的区别: Miniconda 和 Anaconda 是用于管理环境和安装软件包的 Python 发行版。它们之间的主要区别在于以下几点: 1. 安装内容和大小: Anaconda: Anaconda 是一个完整的 Python 数据科学平台,包含…...

C语言——字符函数和字符串函数(一)
📝前言: 这篇文章对我最近学习的有关字符串的函数做一个总结和整理,主要讲解字符函数和字符串函数(strlen,strcpy和strncpy,strcat和strncat)的使用方法,使用场景和一些注意事项&…...

15.Java程序设计-基于SSM框架的微信小程序校园求职系统的设计与实现
摘要: 本研究旨在设计并实现一款基于SSM框架的微信小程序校园求职系统,以提升校园求职流程的效率和便捷性。通过整合微信小程序平台和SSM框架的优势,本系统涵盖了用户管理、职位发布与搜索、简历管理、消息通知等多个功能模块,为…...

蓝桥杯航班时间
蓝桥杯其他真题点这里👈 //飞行时间 - 时差 已过去的时间1 //飞行时间 时差 已过去的时间2 //两个式子相加会发现 飞行时间 两段时间差的和 >> 1import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public cl…...
openEuler学习05-kernel升级
周末没事,尝试下openEuler的kernel升级 [rootlocalhost ~]# more /etc/os-release NAME"openEuler" VERSION"20.03 (LTS-SP3)" ID"openEuler" VERSION_ID"20.03" PRETTY_NAME"openEuler 20.03 (LTS-SP3)" ANSI_…...

Linux-centos上如何配置管理NFS服务器?
Linux/centos上如何配置管理NFS服务器? 1 NFS基础了解 NFS(Network File System)即文件操作系统;NFS允许网络中不同计算机相互之间共享资源。 1.1 NFS概述 1980年由SUN发展出来的在UNIX&Linux系统间实现文件共享的一种方法…...

自然语言处理第2天:自然语言处理词语编码
☁️主页 Nowl 🔥专栏 《自然语言处理》 📑君子坐而论道,少年起而行之 文章目录 一、自然语言处理介绍二、常见的词编码方式1.one-hot介绍缺点 2.词嵌入介绍说明 三、代码演示四、结语 一、自然语言处理介绍 自然语言处理…...
ES6中的Promise
Promise 是一种异步编程解决方案,Promise是一个容器,保存着将来才会执行的代码;从语法角度来说Promise是一个对象,可以用来获取异步操作的消息。异步操作,同步解决,避免了层层嵌套的回调函数,可…...

载入了名字空间‘htmltools’ 0.5.6,但需要的是>= 0.5.7解决方案
解决方案:删除之前的旧版本安装包,安装新的包 1.卸载之前的安装包 2.关闭R,重新打开 3. # install.packages("htmltools") library(htmltools)...
Cisco 思科路由交换网络设备 安全基线 安全加固操作
目录 账号管理、认证授权 本机认证和授权ELK-Cisco-01-01-01 设置特权口令 ELK-Cisco-01-02-01 ELK-Cisco-01-02-02 登录要求 ELK-Cisco-01-03-01 ELK-Cisco-01-03-02 ELK-Cisco-01-03-03 日志配置 ELK-Cisco-02-01-01 通信协议 ELK-Cisco-…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...