Docker网络架构介绍

news2024/11/30 2:37:03

本文主要介绍了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 timer
  1     02:42:ac:11:00:02       no                 0.14
  2     02:42:ac:11:00:03       no                 0.14
  2     36:5c:3a:ff:64:14       yes                0.00
  2     36:5c:3a:ff:64:14       yes                0.00
  1     ae:84:17:1c:93:6c       yes                0.00
  1     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 ash

ip 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1299780.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CPU设计——Triumphcore——MP_work版本

该版本用作系统寄存器的实现,M/S/U状态的实现与切换,以及load/store的虚实地址转换 设计指标 2023.12.8 2023.12.9 不实现mideleg和medeleg,因此一旦出现异常,直接切换至M态, 调试记录 到存储区中取PTE要额外至少…

hive 命令行中使用 replace 和nvl2 函数报错

1.有时候在命令行的情况下使用 replace 函数时会报错 这个时候可以使用 translate 代替 2.有时候使用 nvl2() 函数的时候会报错 这个时候可以用 case when 来代替

IO / day06 作业

1.使用有名管道&#xff0c;完成两个进程的相互通信 代码&#xff1a; // 使用有名管道&#xff0c;完成两个进程的相互通信#include <myhead.h>// task sender void *tasks(void *arg) {printf("I am tasks\n");int fdw -1;const char **ppargv (const c…

Redis核心知识点总结

1.Redis介绍 Redis 是 NoSQL&#xff0c;但是可处理 1 秒 10w 的并发&#xff08;数据都在内存中&#xff09; 使用 java 对 redis 进行操作类似 jdbc 接口标准对 mysql&#xff0c;有各类实现他的实现类&#xff0c;我们常用的是 druid 其中对 redis&#xff0c;我们通常用 J…

链表面试题的总结和思路分享

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

Vite4、Vue3、Axios 针对请求模块化封装搭配自动化导入(简单易用)

针对请求模块化封装搭配自动化导入&#xff08;简单易用&#xff09; 目标目录目标代码前提步入正题src / utils / index.jssrc /api / index.jssrc /api / request.jssrc /api / service.jssrc /api / utils.jssrc /api / modules / demo.js 自动化配置vite.config.jseslint 校…

《PySpark大数据分析实战》-01.关于数据

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

VSCode安装与使用

VS Code 安装及使用 1、下载 进入VS Code官网&#xff1a;地址&#xff0c;点击 DownLoad for Windows下载windows版本 注&#xff1a; Stable&#xff1a;稳定版Insiders&#xff1a;内测版 2、安装 双击安装包&#xff0c;选择我同意此协议&#xff0c;再点击下一步 选择你…

jquery实现省市区三级联动

一、技术: 前端采用的是jsp页面 后端采用springmvc+mybatis+mysql8 效果图 二、cascadeSelect.jsp页面 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%String path = request.getContextPath();String basePath = r…

流程画布开发技术方案归档(G6)

&#x1f3a8; 在理想的最美好世界中&#xff0c;一切都是为最美好的目的而设。 —— 伏尔泰 如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; 一、技术选型 •从可维护性和可拓展性出发 •基本满足 1&#xff1a;链接: https://github.com/hukaibaihu/vue-org…

Java 手写设计HashMap源码,让面试官膜拜

Java 手写HashMap源码&#xff0c;让面试官膜拜 一&#xff0c;手写源码 这是一个模仿HashMap的put&#xff0c;get功能的自定义的MyHashMap package cn.wxs.demo;import java.io.Serializable; import java.util.*; import java.util.function.BiConsumer;class MyHashMap&…

【解密考研英语:Python数据分析与可视化】

解密考研英语&#xff1a;Python数据分析与可视化 背景数据集技术选型功能实现创新点 大家好&#xff0c;欢迎阅读我的CSDN博客&#xff01;今天我将分享一项有关考研英语真题的数据分析与可视化项目&#xff0c;希望对考研学子提供更有针对性的复习帮助。 背景 作为考研学子…

【TwinCAT学习笔记 1】TwinCAT开发环境搭建

写在前面 作为技术开发人员&#xff0c;开启任何一项开发工作之前&#xff0c;首先都要搭建好开发环境&#xff0c;所谓磨刀不误砍材工&#xff0c;一定要有耐心&#xff0c;一次不行卸载再装。我曾遇到过一个学生&#xff0c;仅搭建环境就用了两周&#xff0c;这个过程也是一…

Docker容器的可视化管理工具—DockerUI本地部署与远程访问

文章目录 前言1. 安装部署DockerUI2. 安装cpolar内网穿透3. 配置DockerUI公网访问地址4. 公网远程访问DockerUI5. 固定DockerUI公网地址 前言 DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基…

3接上篇 我的自定义GPTs的改进优化 与物理世界连接成功 GPTs的创建与使用定义和执行特定任务的功能模块 通过API与外部系统或服务的交互

https://blog.csdn.net/chenhao0568/article/details/134875067?spm1001.2014.3001.5502 从服务器日志里看到请求多了一个“location” 23.102.140.123 - - [08/Dec/2023:14:02:20 0800] "GET /getWeather.php?location&locationNewYork HTTP/1.1" 200 337 &…

公式识别任务各个链条全部打通

目录 引言公式识别任务是什么&#xff1f;公式识别任务解决方案初探使用建议写在最后 引言 随着LaTeX-OCR模型转换问题的解决&#xff0c;公式识别任务中各个链条已经全部打通。小伙伴们可以放开膀子干了。 解决业界问题的方案&#xff0c;并不是单独训练一个模型就完事了&am…

Spring Bean基础

写在最前面: 本文运行的示例在我github项目中的spring-bean模块&#xff0c;源码位置: spring-bean 前言 为什么要先掌握 Spring Bean 的基础知识&#xff1f; 我们知道 Spring 框架提供的一个最重要也是最核心的能力就是管理 Bean 实例。以下是其原因&#xff1a; 核心组件…

data_loader返回的每个batch的数据大小是怎么计算得到的?

data_loader是一个通用的术语&#xff0c;用于表示数据加载器或数据批次生成器。它是在机器学习和深度学习中常用的一个概念。 一、data loader 数据加载器&#xff08;data loader&#xff09;是一个用于加载和处理数据集的工具&#xff0c;它可以将数据集划分为小批次&#…

Oracle 中换行chr(10)、回车chr(13)

一、前言 chr(n)&#xff1a;返回 ascii 值对应的字符。 ascii(char)&#xff1a;返回字符 char对应的ascii 值。 chr(n) 和 ascii(char) 作用刚好是相反的。 SQL> select chr(65) from dual; 控制台显示&#xff1a;ASQL> select ascii(A) from dual; 控制台显示&am…

Oracle高可用一家老小全在这里

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…