docker 容器之间通信_四、Docker 网络原理、分类及容器互联配置

本文是《Docker必知必会系列》第四篇,原文发布于个人博客:悟尘纪。
上一篇:Docker必知必会系列(三):基于 Docker-registry/Nexus3 搭建本地仓库

Docker 网络配置

Docker 网络基本原理

要实现网络通信,机器需要至少一个网络接口(物理接口或虚拟接口)来收发数据包。如果不同子网之间要进行通信,需要路由机制。

Docker 中的网络接口默认都是虚拟接口,虚拟接口的优势之一是转发效率较高。 Linux 通过在内核中进行数据复制来实现虚拟接口之间的数据转发,发送接口的发送缓存中的数据包被直接复制到接收接口的接收缓存中。

当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥( Linux 的一个 bridge),它会在挂载到它的网口之间进行转发。同时,Docker 随机分配一个本地未占用的私有网段中的一个地址给 docker0 接口,此后启动的容器内的网口也会自动分配一个同一网段(172.17.0.0/16)的地址。

当创建一个 Docker 容器的时候,同时会创建了一对 veth pair 接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即 eth0;另一端在本地并被挂载到 docker0 网桥,名称以 veth 开头(例如 vethAQI2QT)。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。

v2-6ad909f2a7fdcd7026b1ea5ebdcf7dde_b.jpg

关于 Docker 网络的更多内容,可以访问:https://docs.docker.com/network/>

Docker 网络类型

Docker 创建一个容器的时候,会执行如下操作:

  • 创建一对虚拟接口,分别放到本地主机和新容器中;
  • 本地主机一端桥接到默认的 docker0 或指定网桥上,并具有一个唯一的名字,如 veth65f9;
  • 容器一端放到新容器中,并修改名字作为 eth0,这个接口只在容器的命名空间可见;
  • 从网桥可用地址段中获取一个空闲地址分配给容器的 eth0,并配置默认路由到桥接网卡 veth65f9。

完成这些之后,容器就可以使用 eth0 虚拟网卡来连接其他容器和其他网络。

可以在 docker run 的时候通过 --net 参数来指定容器的网络配置,有 4 个可选值:

  • --net=bridge 这个是默认值,连接到默认的网桥。
  • --net=host 告诉 Docker 不要将容器网络放到隔离的命名空间中,即不要容器化容器内的网络。此时容器使用本地主机的网络,它拥有完全的本地主机接口访问权限。容器进程可以跟主机其它 root 进程一样可以打开低范围的端口,可以访问本地网络服务比如 D-bus,还可以让容器做一些影响整个主机系统的事情,比如重启主机。因此使用这个选项的时候要非常小心。如果进一步的使用 --privileged=true,容器会被允许直接配置主机的网络堆栈。
  • --net=container:NAME_or_ID 让 Docker 将新建容器的进程放到一个已存在容器的网络栈中,新容器进程有自己的文件系统、进程列表和资源限制,但会和已存在的容器共享 IP 地址和端口等网络资源,两者进程可以直接通过 lo 环回接口通信。
  • --net=none 让 Docker 将新容器放到隔离的网络栈中,但是不进行网络配置。之后,用户可以自己进行配置。

外部访问容器

默认情况下,容器可以主动访问到外部网络的连接,但是外部网络无法访问到容器。想要允许外部访问容器,可以在 docker run 时候通过 -p-P 参数来启用(可以多次使用 -p 标记来绑定多个端口)。

使用 docker ps 可以看到,本地主机的 80 被映射到了容器的 80 端口。此时访问本机的 80 端口即可访问容器内 nginx 应用提供的界面。

docker ps
CONTAINER ID  IMAGE   COMMAND        CREATED        STATUS        PORTS               NAMES
bc533791f3f5  nginx   "nginx -g '…"  5 days ago     Up 4 days     0.0.0.0:80->80/tcp  nginx

容器间互联

先创建一个新的 Docker 网络:

docker network create -d bridge lixl-net
  • -d 参数指定 Docker 网络类型,有 bridgeoverlay。其中 overlay 网络类型用于 Swarm mode。

运行一个容器并连接到新建的 lixl-net 网络

docker run -it --rm --name busybox1 --network lixl-net busybox sh

打开新的终端,再运行一个容器并加入到 lixl-net 网络

docker run -it --rm --name busybox2 --network lixl-net busybox sh

再打开一个新的终端查看容器信息

docker psCONTAINER ID     IMAGE      COMMAND    CREATED            STATUS         PORTS     NAMES
b47060aca56b     busybox    "sh"       1 minutes ago      Up 1 minutes             busybox2
8720575823ec     busybox    "sh"       1 minutes ago      Up 1 minutes             busybox1

下面通过 ping 来证明 busybox1 容器和 busybox2 容器建立了互联关系。

busybox1 容器输入以下命令

/ # ping busybox2
PING busybox2 (172.19.0.3): 56 data bytes
64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.072 ms
64 bytes from 172.19.0.3: seq=1 ttl=64 time=0.118 ms

用 ping 来测试连接 busybox2 容器,它会解析成 172.19.0.3

同理在 busybox2 容器执行 ping busybox1,也会成功连接到。

/ # ping busybox1
PING busybox1 (172.19.0.2): 56 data bytes
64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.064 ms
64 bytes from 172.19.0.2: seq=1 ttl=64 time=0.143 ms

这样,busybox1 容器和 busybox2 容器建立了互联关系。

如果有多个容器之间需要互相连接,推荐使用 Docker Compose。

相关文章

  • 上一篇:Docker必知必会系列(三):基于 Docker-registry/Nexus3 搭建本地仓库
  • 下一篇:Docker必知必会系列(五):Docker 数据持久化存储与性能调优

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

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

相关文章

键盘与鼠标器是微型计算机上最常用的,2016年职称计算机考试WindowsXP考前预测试题5...

填空题1.3.5英寸磁盘的滑块小孔打开时,该盘只能(读),不能(写),称为(写保护)。2.软盘上的HD标记表示(双面高密度)。3.常用的双面高密度3.5英寸盘的容量为(1.44MB)。4.硬盘与软盘相比,具有(容量大)、(价格低)的特点。5.常见的光盘驱…

2020idea插件怎么同步_没有用过这些插件,别说你在用vscode

vscode 插件Rainbow Brackets编码过程中,尤其在我们使用js进行函数式编程时,代码里会有很多的花括号,想要保证它们对称十分困难,所以就出现了上面小粉同学的尴尬局面,相信很多人都遇到过类似的情况。Rainbow Brackets&…

画出微型计算机结构图,中级工792、画出计算机环形网络模式图.doc

中级工792、画出计算机环形网络模式图中级工792、画出计算机环形网络模式图。画出计算机总线网络模式图。画出计算机星形网络模式图。画出单工通信方式图。画出半双工通信方式图。画出全双工通信方式图。画出数据库访问程序框图。画出软件相互之间以及及计算机硬件的层次关系。…

python 删除特定行数据_怎么用 Python 做数据分析实例

01 生成数据表第一部分是生成数据表,常见的生成方法有两种,第一种是导入外部数据,第二种是直接写入数据。 Excel 中的文件菜单中提供了获取外部数据的功能,支持数据库和文本文件和页面的多种数据源导入。获取外部数据python 支持从…

html 地址 点击召唤高德,高德地图api 点聚合+海量点+点击事件(根据地区或坐标进行定位)...

javascript区划聚合海量点展现html,body,#container {width: 100%;height: 100%;margin: 0px;}#loadingTip {position: absolute;z-index: 9999;top: 0;left: 0;padding: 3px 10px;background: red;color: #fff;font-size: 14px;}#right {position: absolute;z-index: 9999;top…

python中集合运算_入门 | 一文带你了解Python集合与基本的集合运算

原标题:入门 | 一文带你了解Python集合与基本的集合运算 选自DataCamp 作者:Michael Galarnyk 参与:Geek Ai、思源 一般我们熟悉 Python 中列表、元组及字典等数据结构,但集合可能用得稍微少一点。但集合独特的元素唯一性与 O(1) …

湖北大学计算机复试笔试题型,2016年湖北大学计算机与信息工程学院计算机组成原理复试笔试最后押题五套卷...

一、选择题1. 一张CD —ROM 光盘的存储容量可达( )MB , 相当于( )多张1.44MB 的3.5英寸软盘。A.400, 600B. 600, 400C.200, 400D.400, 200【答案】B2. FTP 客户和服务器间传递FTP 命令时,使用的连接是( )。A. 建立在TCP 之上的控制连接B. 建立…

python中文本文件r_Python如何读写文本文件

展开全部 1.open使用open打开文件后一定要记2113得调5261用4102文件对象的close()方法。比如可以用try/finally语句来确保最后1653能关闭文件。 file_object open(thefile.txt) try: all_the_text file_object.read( ) finally: file_object.close( ) 注:不能把op…

计算机设备故障类型有哪些,计算机硬件故障有哪些

计算机硬件故障有哪些由于对计算机硬件相关知识了解不多,硬件发生故障时很难排除,由此给很多人带来困扰。计算机硬件故障有哪些呢?下面是小编的介绍,一起来看一下吧。1)CPU故障散热不良故障。接触不良故障下面将列举一些常见的CPU故障排除实…

python标准输入_Python 处理标准输入

python 处理标准输入使用 sys.stdin ,在 Linux 中,一切皆文件,标准输入也是一个文件,因此这里我们可以说 sys.stdin 用来打开标准输入这个文件,然后用 read() 方法来读取这个文件 In [10]: import sys In [11]: fd sys…

台式计算机性能清单是强制的吗,教你识别良心商家和奸商电脑配置清单区别以及如何选购台式电脑机箱...

我们想要组装一台电脑,由于隔行如隔山,无疑对硬件品牌型号都不太了解,会将自己的预算和大致的要求和商家说,而商家会根据预算与要求写具体的电脑配置清单,不同商家写出来的配置或多或少存在不同,含糊不清写…

mysql显示表已存在_MySQL数据库与数据表的相关操作

数据库相关操作:显示数据库:show databases;如果是0.00秒并不代表没有花费时间,而是时间非常短,小于0.01秒。创建数据库:Query OK表示创建成功,1行受到影响,处理时间为0、05秒。使用下面的命令查…

怎么用计算机算成250,万能计算器

彩票彩宝贝体彩排列五March 29, 2016彩票计划网站导航Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ultrices egestas nunc, quis venenatis orci tincidunt id. Fusce commodo blandit eleifend. Nullam viverra tincidunt dolor, at pulvinar dui.…

android怎样判断插入数据是否成功_MySQL一个表的自增id用完了,背井大佬让我用这些姿势再往里插数据...

点击上方"码之初"关注,选择"设为星标"与精品技术文章不期而遇在之前有篇文章中,和大家探讨了在MySOL数据库中,一个表的自增id用完,再插入数据有什么问题?评论处 背井 公众号的大佬建议我另开一篇再…

计算机硬件系统教具,计算机硬件系统 (2)

计算机硬件系统 (2) (3页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.9 积分计算机硬件系统克井一中杨致远教学目标:1、了解计算机的发展概况、特点以及种类2、理解计算机的工作原理3…

python 引入同一路径的类_Python入门 模块导入 import ...\from... import...

代码越来越多的时候,我们将代码写到一个.py 文件里,随着代码的增加,代码的维护越来越困难。如果将代码按照不同的功能拆分放到不同的.py文件中,每个.py文件就是一个模块。不同模块中的变量名可以相同,他们不会受影响。…

经典计算机实现量子逻辑门,量子计算机:对量子逻辑门的探讨

在分析了经典比特和量子比特的异同点之后,阐述了量子逻辑门的特点;然后具体介绍了几种常见的量子逻辑门:基本量子逻辑门,量子异或门,量子与门。最后又给出了更复杂的量子逻辑门的构建方法。维普资讯 http://doc.wendoc.com信息科学}J宋纳红侯丽敏科量子计算机&#…

命名空间中不存在名称_原木定制中不开裂的木材真的存在吗?

广大的读者朋友们大家好,之前壹信缅甸柚木高端全屋定制小编和大家讲解了为什么那么多人喜欢原木实木全屋定制护墙板,本文壹信小编将给大家讲讲原木整装中不开裂的木材真的存在吗。原木整装行业的从业人员都知道,最麻烦最让人担心的是木头的开…

电脑上交计算机作业怎么打开,上海交大计算机第一次作业-20210711011739.docx-原创力文档...

上海交大计算机第一次作业上海交大计算机第一次作业利用计算机进行数据处理的应用领域主要有事务处理、企业管理、______。a. 人工只能和办公自动化b. 办公自动化、信息资料检索 c. 信息资料检索和科学计算d. 事务处理和自动控制正确答案是:办公自动化、信息资料检索…

go 字符串替换_Go语言爱好者周刊:第 64 期 — goup 这个工具了解下

这里记录每周值得分享的 Go 语言相关内容,周日发布。本周刊开源(GitHub:polaris1119/golangweekly),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue 。鉴于大部分人可能没法坚持把英文文章看…