Docker网络原理

news2024/11/19 17:21:15

Docker网络概述

1.桥接模式介绍

bridge模式是docker的默认网络模式。

桥接模式是一种用于连接两个不同网络段的设备,使它们能够共享通信的一种方式
桥接设备工作在OSI模型的第二层,即数据链路层,通常基于MAC地址进行帧转发

物理层连接: 桥接设备通常有两个或多个网络接口,用于连接不同的物理网络。
这些接口可以是以太网接口,Wi-Fi接口等。

MAC地址学习: 当桥接设备启动时,它开始学习连接的网络上设备的MAC地址。
桥接设备通过观察网络流量并记录源MAC地址来建立MAC地址表。

帧转发: 当设备发送帧(数据包)时,桥接设备查看目标MAC地址。
如果目标MAC地址在桥接设备的MAC地址表中,它会将帧仅发送到相应接口。
如果目标MAC地址不在表中,桥接设备会将帧发送到所有其他接口

桥接模式在物理和数据链路层上工作通过学习和转发MAC地址,连接不同的网络,从而使它们看起来像是一个单一的网络。这种模式通常用于局域网的扩展和连接。

2.Docker网络实现原理

桥接模式是一种网络模式,它在 Docker 中的工作方式可以分为以下几个步骤:

  • 虚拟网络桥创建: 当您启动 Docker 守护进程时,Docker 创建一个虚拟网络桥(通常称为 docker0),它是一个虚拟的网络设备,类似于物理网络设备的交换机。
  • 分配唯一的 IP 地址: 每次您运行一个容器时,Docker 分配一个唯一的 IP 地址给该容器。这个 IP 地址是在桥接模式网络的子网中。
  • 连接容器到桥接网络: 当容器启动时,Docker 将容器的虚拟网络接口(veth pair)连接到虚拟网络桥上。其中一个端点位于容器内,而另一个端点位于主机上。
  • 容器与主机通信: 通过桥接模式,容器可以直接与主机通信。这意味着容器可以访问主机上运行的服务,而主机也可以通过容器的 IP 地址访问容器内的服务。
  • 容器之间的通信: 如果有多个容器在相同的桥接网络上运行,它们可以通过各自的 IP 地址直接通信。Docker 会自动在桥接网络上设置路由,使得容器之间可以直接交流。
  • NAT(网络地址转换): 默认情况下,Docker 使用 Network Address Translation(NAT)技术,将容器的私有 IP 地址映射到主机上的公共 IP 地址。这样,容器可以与外部网络通信,而外部网络看到的是主机的 IP 地址。

Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过 Container-IP 访问到容器。
如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即 docker run 创建容器时候通过 -p 或 -P 参数来启用访问容器的时候就通过[宿主机IP]:[容器端口]访问容器。

示例:

docker run -itd --name test1 -P nginx:1.22.0 /bin/bash
#随机映射端口(从32768开始)

docker run -itd --name test2 -p 43000:80 nginx:1.22.0	/bin/bash
#指定映射端口
宿主机端口:主机上用于接收来自外部请求的端口。在这个例子中,它是43000。
容器端口:Docker容器内部正在监听的端口。在这个例子中,它是80,因为NGINX通常默认监听80端口。

#使用 docker run -p 时,docker实际是在iptables做了DNAT规则,实现端口转发功能。
可以使用iptables -t nat -vnL 查看。

docker exec -it test1 bash
cd /usr/share/nginx/html/
echo this is test1 > index.html
cd /bin/
nginx

docker exec -it test2 bash
cd /usr/share/nginx/html/
echo this is test2 > index.html
cd /bin/
nginx

浏览器访问:
20.0.0.10:32768
20.0.0.10:43000

Docker网络模式详解

安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host

//查看docker网络列表
docker network ls
或
docker network list

docker network ls 
NETWORK ID     NAME      DRIVER    SCOPE
3dab1f670163   bridge    bridge    local
4f62ba81b69c   host      host      local
4fef7ef6a38b   none      null      local
-------------------------------------------------------------------------------------------
NAME: 是Docker网络的名称。在这里,你列出了三个网络,它们的名称分别是bridge、host和none。
NETWORK ID: 每个Docker网络都有一个唯一的网络ID。
DRIVER: 这是Docker使用的网络驱动程序。在这里,bridge表示使用的是桥接网络,host表示使用的是主机网络,而none表示没有网络。
SCOPE: 表示网络的作用范围。local表示该网络仅在本地主机上可用。
-------------------------------------------------------------------------------------------

//使用docker run创建Docker容器时,可以用 --net 或 --network 选项指定容器的网络模式
host模式:使用 --net=host 指定。
none模式:使用 --net=none 指定。
container模式:使用 --net=container:NAME_or_ID 指定。
bridge模式:使用 --net=bridge 指定,默认设置,可省略。

1.Host

主机模式:
容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
在主机模式下,容器与主机共享同一个网络命名空间,直接使用主机的网络栈。
这使得容器可以使用主机的 IP 地址和端口,从而不需要进行额外的端口映射。

docker run -itd --name test1 --network host nginx /bin/bash
docker exec -it test1 bash

root@pup1:/bin# cd /usr/share/nginx/html/
root@pup1:/usr/share/nginx/html# echo this is nginx > index.html 

cd /bin/
root@pup1:/bin# nginx
#开启容器nginx服务时需要关闭宿主机的nginx服务,防止端口冲突

浏览器访问本机地址:20.0.0.10

2.Container

这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。 
新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。
两个容器的进程可以通过lo网卡设备通信。

docker run -itd --name test2 --net=container:test1 nginx /bin/bash
docker exec -it test2 bash

cd /usr/share/nginx/html/
echo this is nginx2 > index.html
nginx

#需要先关闭容器test1的nginx服务
exec -it test1 bash
nginx -s stop

浏览器访问本机地址:
20.0.0.10

docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
8daac0b47a21   nginx     "/docker-entrypoint.…"   13 minutes ago   Up 13 minutes             test2
08f7a9d0ddc9   nginx     "/docker-entrypoint.…"   59 minutes ago   Up 59 minutes             test1

docker inspect -f '{{.State.Pid}}' 8daac0b47a21
47563

ls -l /proc/47563/ns
#查看可以发现两个容器的 net namespace 编号相同

3.None

该模式关闭了容器的网络功能。
使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。 也就是说,这个Docker容器没有网卡、IP、路由等信息。
这种网络模式下容器只有lo回环网络,没有其他网卡。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。

docker run -itd --name test3 --net=none nginx /bin/bash
docker exec -it test3 bash
nginx

cd /usr/share/nginx/html/
echo this is nginx3 > index.html

cd /etc
cat hosts
curl 127.0.0.1

 

4.Bridge

默认为该模式,此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,
通过docker0网桥以及iptables nat 表配置与宿主机通信。

5.自定义网络

直接使用bridge模式,是无法支持指定IP运行docker的,例如执行以下命令就会报错:

docker run -itd --name test3 --network bridge --ip 172.17.0.10 nginx:latest /bin/bash
//创建自定义网络
#可以先自定义网络,再使用指定IP运行docker
docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1"  mynetwork
-------------------------------------------------------------------------------------------
#docker1 为执行 ifconfig -a 命令时,显示的网卡名,如果不使用 --opt 参数指定此名称,
那你在使用 ifconfig -a 命令查看网络信息时,看到的是类似 br-110eb56a0b22 这样的名字,这显然不怎么好记。

#mynetwork 为执行 docker network list 命令时,显示的bridge网络模式名称。
-------------------------------------------------------------------------------------------
docker run -itd --name test4 --net mynetwork --ip 172.18.0.10 nginx:latest /bin/bash

进入虚拟机访问172.18.0.10

补充

查看容器的输出和日志信息

docker logs 容器的ID/名称
#创建容器时不加/bin/bash

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

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

相关文章

VUE+THREE.JS 点击模型相机缓入查看模型相关信息

点击模型相机缓入查看模型相关信息 1.引入2.初始化CSS3DRenderer3.animate 加入一直执行渲染4.点击事件4.1 初始化renderer时加入监听事件4.2 触发点击事件 5. 关键代码分析5.1 移除模型5.2 创建模型上方的弹框5.3 相机缓入动画5.4 动画执行 1.引入 引入模型所要呈现的3DSprite…

Python 案例实训教学,课程展示及结课存档优化|ModelWhale 版本更新

大雪时节,仲冬如约而至,我们也迎来了 ModelWhale 新一轮的版本更新。 本次更新中,ModelWhale 主要进行了以下功能迭代: 优化 课程大纲展示(团队版✓)优化 作业批量导出存档(团队版✓&#xff…

Windows本地如何添加域名映射?(修改hosts文件)

1. DNS(域名系统) Domain Name System(域名系统):为了加快定位IP地址的速度, 将域名映射进行层层缓存的系统. 目的:互联网通过IP(10.223.146.45)定位浏览器建立连接,但是我们不易区别IP,为了方便用户辨识I…

基于SpringBoot+maven+Mybatis+html慢性病报销系统(源码+数据库)

一、项目简介 本项目是一套基于SpringBootmavenMybatishtml慢性病报销系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 项目都经过严格调试&a…

C程序设计—输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。

#include <stdio.h> #include <ctype.h> // 包含ctype.h头文件&#xff0c;用于判断字符类型 int main() { char str[100]; // 定义字符数组&#xff0c;用于存储输入的字符串 int i, letters 0, space 0, digit 0, others 0; // 定义变量&#xff0c…

护眼灯有效果吗?考研必备护眼台灯推荐

据统计&#xff0c;中国人口的近视率约为10%至20%。 国家卫健委发布的中国首份眼健康白皮书显示&#xff0c;我国小学生近视率为47.2%&#xff0c;初中生近视率为75.8%&#xff0c;大学生近视率超过90%。据世界卫生组织统计数据显示&#xff0c;目前全球约有14亿近视人口&#…

反射加载SDK完成统一调用

文章目录 1、需求背景2、接口抽象类具体实现类3、疑问4、存在的问题5、通过反射加载SDK并完成调用5、补充&#xff1a;关于业务网关7、补充&#xff1a;关于SDK的开发 关键点&#xff1a; 接口抽象类&#xff08;半抽象半实现&#xff09;具体实现类业务网关反射加载SDK&#…

C++新经典模板与泛型编程:策略技术中的算法策略

策略技术中的算法策略 在之前博客中funcsum()函数模板中&#xff0c;实现了对数组元素的求和运算。求和在这里可以看作一种算法&#xff0c;扩展一下思路&#xff0c;对数组元素求差、求乘积、求最大值和最小值等&#xff0c;都可以看作算法。而当前的funcsum()函数模板中&…

H3.3K27M弥漫性中线胶质瘤的反义寡核苷酸治疗

今天给同学们分享一篇实验文章“Antisense oligonucleotide therapy for H3.3K27M diffuse midline glioma”&#xff0c;这篇文章发表在Sci Transl Med期刊上&#xff0c;影响因子为17.1。 结果解读&#xff1a; CRISPR-Cas9消耗H3.3K27M恢复了H3K27三甲基化&#xff0c;并延…

PHPstorm可选择版本的链接

PHPstorm可选择版本的链接 链接&#xff1a;https://www.jetbrains.com/phpstorm/download/other.html

class060 拓扑排序的扩展技巧【算法】

class060 拓扑排序的扩展技巧【算法】 算法讲解060【必备】拓扑排序的扩展技巧 2023-12-7 22:23:02 code1 P4017 最大食物链计数 // 最大食物链计数 // a -> b&#xff0c;代表a在食物链中被b捕食 // 给定一个有向无环图&#xff0c;返回 // 这个图中从最初级动物到最顶…

游戏被攻击怎么办

随着科技的进步和互联网的普及&#xff0c;游戏行业也正在经历前所未有的变革。玩家们不再满足于传统的线下游戏&#xff0c;而是转向了线上游戏。然而&#xff0c;随着游戏的线上化&#xff0c;游戏安全问题也日益凸显。游戏受到攻击是游戏开发者永远的痛点&#xff0c;谈“D“…

Linus:我休假的时候也会带着电脑,否则会感觉很无聊

目录 Linux 内核最新版本动态 关于成为内核维护者 代码好写&#xff0c;人际关系难处理 内核维护者老龄化 内核中 Rust 的使用 关于 AI 的看法 参考 12.5-12.6 日&#xff0c;Linux 基金会组织的开源峰会&#xff08;OSS&#xff0c;Open Source Summit&#xff09;在日…

Enterprise Architect 12版本使用教程

Enterprise Architect 12版本使用教程 1.下载安装Enterprise Architect 122.Enterprise Architect原始DDL模板配置及存在的问题1.DDL Column Definition原始模板&#xff08;没有default值&#xff1a;可忽略&#xff09;2.DDL Data Type原始模板&#xff08;timestamp等时间字…

Diffusion 公式推导

Diffusion&#xff1a;通过扩散和逆扩散过程生成图像的生成式模型 中已经对 diffusion 的原理进行了直观地梳理&#xff0c;本文对其中的数学推导进行讲解&#xff0c;还是基于 DDPM。 目录 一. 预备知识1. 重参数技巧2. 高斯分布的可加性3. 扩散递推式的由来 二. 扩散过程1. 背…

企业计算机服务器中了360勒索病毒如何解密,勒索病毒解密数据恢复

网络技术的不断应用与发展&#xff0c;为企业的生产运营提供了极大便利&#xff0c;但随之而来的网络安全威胁也不断增加。近期&#xff0c;云天数据恢复中心接到很多企业的求助&#xff0c;企业的计算机服务器遭到了360后缀勒索病毒攻击&#xff0c;导致企业的所有数据被加密&…

AtCoder ABC周赛2023 11/4 (Sat) E题题解

目录 原题截图&#xff1a; 原题翻译 题目大意&#xff1a; 主要思路&#xff1a; 代码&#xff1a; 原题截图&#xff1a; 原题翻译 题目大意&#xff1a; 给你一个数组&#xff0c;给你一个公式&#xff0c;让你选k个元素&#xff0c;用公式算出最终得分。 主要思路&am…

云数据库与自建数据库有什么不同?

「自购服务器搭建数据库服务」&#xff0c;涉及到云服务器和物理机服务器的选择。这两者之间存在一定的差别。首先&#xff0c;物理机服务器需要更多的部署及维护操作&#xff0c;而云服务器则通过虚拟化技术提供了更便捷的资源管理和弹性伸缩能力。 总体来说&#xff0c;部署在…

移动云荣获OpenInfra社区“算力基础设施技术突破奖”

近日&#xff0c;一年一度的 OpenInfra Days China在北京召开&#xff0c;大会汇聚了全球各大云厂商的技术专家&#xff0c;共同分享全球前沿基础设施技术的展望和实践经验。在本次大会上&#xff0c;移动云荣获OpenInfra社区颁发的“算力基础设施技术突破奖”&#xff0c;表明…