Docker 基础使用 (4) 网络管理

文章目录

  • Docker 网络管理需求
  • Docker 网络架构认识
  • Docker 常见网络类型
    • 1. bridge 网络
    • 2. host 网络
    • 3. container 网络
    • 4. none 网络
    • 5. overlay 网络
  • Docker 网路基础指令
  • Docker 网络管理实操

其他相关链接
Docker 基础使用(0)基础认识
Docker 基础使用(1)使用流程概览
Docker 基础使用(2)镜像与容器
Docker 基础使用(3)存储卷

Docker 网络管理需求

在操作系统的学习过程中,可以了解网络通信,本质上通常是两个进程的通信。Docker运行容器的本质通常是隔离了更多资源或属性的进程,隔离的资源就包括网络资源,容器的网络默认与宿主机及其他容器都是相互隔离。

但容器在实际应用场景下,也是需要进行网络(进程)间通信的。 通常需要考虑的通信场景有:

  1. 多个容器之间是如何通信的
  2. 容器和宿主机是如何通信的
  3. 容器和外界主机是如何通信的
  4. 容器中要运行一些网络应用(如 nginx、web 应用、数据库等),如果要让外部也可以访问这些容器内运行的网络应用应该如何实现
  5. 容器需要更高的定制化网络(如定制特殊的集群网络、定制容器间的局域网)应该如何实现

为了满足上述需求,便有了学习容器网络管理的需求。

Docker 网络架构认识

Docker 容器网络是为应用程序所创造的虚拟环境的一部分,它能让应用从宿主机操作系统的网络环境中独立出来,形成容器自有的网络设备、IP 协议栈、端口套接字、IP 路由表、防火墙等等与网络相关的模块。 Docker为了实现容器网络,主要采用Libnetwork与驱动作为架构。

CNM
Docker 网络架构采用的设计规范是 CNM(Container Network Model)。CNM 中规定了 Docker 网络的基础组成要素:Sandbox、Endpoint、Network。

Sandbox:提供了容器的虚拟网络栈,即端口、套接字、IP 路由表、防火墙、DNS 配置等内容。主要用于隔离容器网络与宿主机网络,形成了完全独立的容器网络环境。

Network:Docker 内部的虚拟子网,使得网络内的参与者能够进行通讯。

Endpoint:就是虚拟网络的接口,就像普通网络接口一样,Endpoint 的主要职责是负责创建连接。Endpoint 类似于常见的网络适配器,那也就意味着一个 Endpoint 只能接入某一个网络, 当容器需要接入到多个网络,就需要多个 Endpoint。 如下图当两Endpoint同时接入同一个Network中即可实现容器间的通信。

Libnetwork
CNM是一种架构, Libnetwork 是 CNM 的一个标准实现。Libnetwork 是开源库,采用 Go 语言编写(跨平台的),也是 Docker 所使用的库,Docker 网络架构的核心代码都在这个库中。Libnetwork 实现了 CNM 中定义的全部三个组件以及其他额外的功能。

在这里插入图片描述

驱动

驱动指的是一种用于与底层系统或基础设施交互的插件,说的直白一点就是驱动是操作对应硬件的软件。 例如显卡驱动、显示器键盘鼠标的驱动(基础驱动装机自带,所以对电脑没有过多需求的用户不知道驱动是什么)。

Docker网络相关的驱动也是驱动的一种,驱动主要负责实现数据层相关内容,例如网络的连通性和隔离性是由驱动来处理的。驱动通过实现特定网络类型的方式扩展了 Docker 网络栈,例如桥接网络和覆盖网络。Docker 内置了若干驱动,通常被称作原生驱动或者本地驱动。例如 Bridge Driver、Host Driver、Overlay Driver、MacVLan Driver、IPVLan Driver、None Driver 等等。每个驱动负责创建其上所有网络资源的创建和管理。

(补充:网络栈是一种计算机网络的概念,用于描述网络协议栈的层次结构。它包括多个层次,每个层次都负责不同的功能,具体来说就是网络通信模型中的某一层,例如物理层、数据链路层、网络层、传输层和应用层。)

Docker 常见网络类型

1. bridge 网络

bridge 驱动会在 Docker 管理的主机上创建一个 Linux 网桥。默认情况下,网桥上的容器可以相互通信。也可以通过 bridge 驱动程序配置,实现对外部容器的访问。Docker 容器的默认网络驱动.当我们需要多个容器在同一个 Docker 主机上通信时,桥接网络是最佳选择。

在这里插入图片描述
bridge 网络默认网桥

在创建容器时,默认情况下(即创建的容器在没有使用–network参数指定要加入的 docker 网络时)都是加入 Docker 默认的单机桥接网络。默认的 bridge 网络会被映射到内核中为 docker0 的网桥上,一个docker bridge 对应一个 Linux bridge (内核网桥)。bridge 是 Docker 对网络的命名,而 docker0 是内核中网桥的名字。通过 docker network ls 指令查询出的名为bridge网络即为默认网络。 当两个相同的容器连接同一个网桥,即可进行通信。此外用户可定义自定义,例如使用docker network create -d bridge new-bridge 指令,创建一个名为new-bridge自定义网桥。

值得注意是的,docker提供的默认bridge网络无法使用DNS域名解析服务。而自定义的bridge网络可以。
!

bridge 网络端口问题

docker 容器有和主机网络交互的需求,为此,需要对端口号进行专门的处理。通常容器要想和外部
主机或其他主机进行通信有两种策略。

① 暴露所有端口号, 在启动容器时,可以使用指令参数 -P暴露主机所有端口号

② 端口转发, 身端口转发(Port Forwarding)本身是一种网络配置,允许将来自外部网络的流量路由到局域网中的特定设备或服务。通常用于使外部用户能够访问局域网中的服务器或服务,如Web服务器或游戏服务器。 使用-p参数将主机端口号与容器端口号建立映射关系,主机指定端口号接收到的网络数据会发给容器的指定端口号。

端口转发

在这里插入图片描述

2. host 网络

对于独立容器,移除容器和 Docker 主机之间的网络隔离,并直接使用主机的网络。当网络堆栈不应该与 Docker 主机隔离,但是希望容器的其他资源被隔离时,主机网络是最佳选择

Docker 容器运行默认都会分配独立的 Network Namespace 隔离子系统, 但是如果基于 host 网络模式,容器将不会获得一个独立的 Network Namespace,而是和宿主机共用同一个 Network Namespace,容器将不会虚拟出自己的网卡,IP 等,而是直接使用宿主机的 IP 和端口。

连接到 host 网络的容器共享宿主机的网络栈,容器的网络配置与宿主机完全一样。用户可以在启动容器时通过 --network=host 指定使用 host 网络。

在这里插入图片描述
bridge 网络在通信的时候需要进行端口转发以及 NAT 地址转换,这势必会消耗掉一些资源以及性能。而直接使用 host 网络最大的好处就是性能好,如果容器对网络传输效率有较高的要求,建议选择 host 网络。当然也会牺牲一些东西,比如要考虑端口冲突问题,其他服务已经被占用的端口就不能再使用了。

3. container 网络

这个模式指定新创建的容器和已存在的一个容器共享一个网络 ,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 ip,而是和一个已存在的、指定的容器共享 ip,端口等。两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 LO网卡(127.0.0.1,通常被称为本地回环地址(Loop back address))设备通信。

Docker Container 的 other container 网络模式是 Docker 中一种较为特别的网络的模式。之所以称为“other container 模式”,是因为这个模式下的 Docker Container,会使用其他容器的网络环境。之所以称为“特别”,是因为这个模式下容器的网络隔离性会处于 bridge 桥接模式与 host 模式之间。Docker Container 共享其他容器的网络环境,则至少两个容器之间不存在网络隔离,而这两个容器又与宿主机以及除此之外其他的容器存在网络隔离

在这里插入图片描述
other container 网络模式的创建方式如下:

1. 创建一个 busybox 容器 (任意带网络通信的容器均可)
docker run -itd --name netcontainer1 busybox
2. 使用 netcontainer1 的网络创建另外一个容器
docker run -itd --name netcontainer2 --network container:netcontainer1 busybox

这样创建的两个容器的ip、mac地址完全一样。

4. none 网络

Docker 容器拥有自己的 Network Namespace,但是,并不为 Docker 容器进行任何网络配置。也就是说,这个 Docker 容器没有网卡、IP、路由等信息。容器完全网络隔离。

在运行容器的时候,可以通过–network=none 参数来指定容器使用 none 网络。

5. overlay 网络

借助 Docker 集群模块 Docker Swarm 搭建的跨 Docker Daemon 网络。将多个Docker 守护进程连接在一起,使集群服务能够相互通信。当我们需要运行在不同Docker 主机上的容器进行通信时,或者当多个应用程序使用集群服务协同工作时,覆盖网络是最佳选择。

Docker 网路基础指令

创建自定义网络
docker network create [OPTIONS] NETWORK

○ -d, --driver:网络驱动
○ --gateway:网关地址
○ --subnet:表示网段的 CIDR 格式的子网
○ --ipv6:启用 ipv6
查看网络详情 
docker network inspect [OPTIONS] NETWORK [NETWORK...]

用于将容器连接到网络。可以按名称或 ID 连接容器。
 一旦连接,容器可以与同一网络中的其他容器通信。
docker network connect [OPTIONS] NETWORK CONTAINER

断开网络
docker network disconnect [OPTIONS] NETWORK CONTAINER

删除不使用的网络
docker network prune [OPTIONS]

删除 1 个或者多个网络
docker network rm

列出网络
docker network ls

Docker 网络管理实操

创建网络
docker network create --subnet=172.18.0.0/16 mynetwork

列出已创建的网络
docker network ls
在这里插入图片描述
启动容器mynginx1并以名为mynetwork的网络启动
docker run -itd --name mynginx1 --network mynetwork nginx:1.24.0
在这里插入图片描述
docker inspect mynginx1:
在这里插入图片描述

启动容器2
docker run -itd --name mynginx2 nginx:1.24.0

查看容器2发现除了本地网络之外,没有其他的网络连接
docker inspect mynginx2
在这里插入图片描述
将创建的网络与容器2连接
docker network connect mynetwork mynginx2

再次查看容器2的网络,发现有新的网络
docker inspect mynginx2
在这里插入图片描述

完整执行流程

# 创建网络
docker network create --subnet=172.18.0.0/16 mynetwork

# 列出已创建的网络
docker network ls 

# 启动容器mynginx1并以名为mynetwork的网络启动
docker run -itd --name mynginx1 --network mynetwork nginx:1.24.0

#查看容器1的信息
docker inspect mynginx1

#启动容器2
docker run -itd --name mynginx2 nginx:1.24.0

# 查看容器2发现除了本地网络之外,没有其他的网络连接
docker inspect mynginx2

# 将创建的网络与容器2连接
docker network connect mynetwork mynginx2

# 再次查看容器2的网络,发现有新的网络
docker inspect mynginx2

# 断开容器2的网络连接
docker network disconnect mynetwork mynginx2

docker inspect mynginx2

# 尝试删除网络,但删除失败,因为任然有容器1在使用该网络。
docker network rm mynetwork

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构---树与二叉树

个人介绍 hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的…

TalkingData 是一家专注于提供数据统计和分析解决方案的独立第三方数据智能服务平台

TalkingData 是一家专注于提供数据统计和分析解决方案的独立第三方数据智能服务平台。通过搜索结果,我们可以了解到 TalkingData 的一些关键特性和市场情况,并将其与同类型产品进行比较。 TalkingData 产品特性 数据统计与分析:提供专业的数…

复数乘法IP核的使用

一、IP核解析 在这张图片中,我们看到的是一个“Complex Multiplier (6.0)” IP 核的配置界面。以下是各个配置参数的详细说明: 1.1 Multiplier Construction Use LUTs: 选择这个选项时,乘法器将使用查找表(LUTs)来实现…

TiDB-从0到1-配置篇

TiDB从0到1系列 TiDB-从0到1-体系结构TiDB-从0到1-分布式存储TiDB-从0到1-分布式事务TiDB-从0到1-MVCCTiDB-从0到1-部署篇TiDB-从0到1-配置篇 一、系统配置 TiDB的配置分为系统配置和集群配置两种。 其中系统配置对应TiDB Server(不包含TiKV和PD的参数&#xff0…

显示子系统,显示子前后端,linuxfb,wayland

显示前端 显示前端通常指的是在图形系统中负责生成图形数据的部分或组件。它负责接收来自应用程序或图形引擎的图形数据,并将其转换成适合显示的格式,以便发送到显示后端进行处理和输出。 显示前端的功能通常包括以下几个方面: 图形数据生…

好书推荐之《生成式 AI 入门与亚马逊云科技AWS实战》

最近小李哥在亚马逊云科技峰会领到了一本关于如何在云计算平台上设计、开发GenAI应用的书,名字叫:《生成式 AI 入门与亚马逊云科技AWS实战》,今天仔细看了下,发现这本书讲的真的很好!他涵盖了当下AI领域所有热门的技术…

探究IOC容器刷新环节初始化前的预处理

目录 一、IOC容器的刷新环节快速回顾 二、初始化前的预处理prepareRefresh源码分析 三、初始化属性源 (一)GenericWebApplicationContext初始化属性源 (二)StaticWebApplicationContext初始化属性源 四、初始化早期事件集合…

31、matlab卷积运算:卷积运算、二维卷积、N维卷积

1、conv 卷积和多项式乘法 语法 语法1:w conv(u,v) 返回向量 u 和 v 的卷积。 语法2:w conv(u,v,shape) 返回如 shape 指定的卷积的分段。 参数 u,v — 输入向量 shape — 卷积的分段 full (默认) | same | valid full:全卷积 ‘same…

简记:为Docker配置服务代理

简记 为Docker配置服务代理 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/art…

NLP实战入门——文本分类任务(TextRNN,TextCNN,TextRNN_Att,TextRCNN,FastText,DPCNN,BERT,ERNIE)

本文参考自https://github.com/649453932/Chinese-Text-Classification-Pytorch?tabreadme-ov-file,https://github.com/leerumor/nlp_tutorial?tabreadme-ov-file,https://zhuanlan.zhihu.com/p/73176084,是为了进行NLP的一些典型模型的总…

论文阅读——MIRNet

项目地址: GitHub - swz30/MIRNet: [ECCV 2020] Learning Enriched Features for Real Image Restoration and Enhancement. SOTA results for image denoising, super-resolution, and image enhancement.GitHub - soumik12345/MIRNet: Tensorflow implementation…

idea打开hierarchy面板

hierarchy:查看类层级关系图 不同版本的IDEA的快捷键不一样,同时如果修改了IDEA快捷键,也可能会不一样,具体查看可通过IDEA上方的Navigate来查看navigate--Type Hierarchy,就可以看见其快捷键了,我的快捷键…

简单记录玩4399游戏flash插件问题

一、因谷歌浏览器默认禁止flash插件自动运行,所以玩家在使用谷歌浏览器,访问www.4399.com平台页面或者4399小游戏(flash资源)时,可能会出现加载异常的情况。今天教大家如何开启flash插件 二、下载falsh官方插件 地址:Flash Player官方下载中心-Flash中国官网 三、如果您…

【IoT NTN】3GPP R18中关于各类IoT设备在NTN中的增强和扩展

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G技术研究。 博客内容主要围绕…

动态路由协议RIP(思科、华为)

#交换设备 动态路由协议RIP 路由协议 静态路由 需要管理员手动配置 动态路由 是在路由器上启用某动态路由协议,进行自己直连网段的宣告,从而相邻的路由器就可以学习的相邻的路由器所宣告的网段,每一台路由器都把自己直连的网段宣告出去&am…

LINUX网络FTP服务

一、FTP服务 FTP服务:file transfer protocol :文件传输协议。在网络上进行双向传输,也是一个应用程序。不同的操作系统有不同的FTP软件,但使用的协议是一样的。 FTP协议基于TCP协议,有两个端口,即20和21。 20端口&…

《大道平渊》· 拾壹 —— 商业一定是个故事:讲好故事,员工奋发,顾客买单。

《大道平渊》 拾壹 "大家都在喝,你喝不喝?" 商业一定是个故事,人民群众需要故事。 比如可口可乐的各种故事。 可口可乐公司也只是被营销大师们, 作为一种故事载体,发挥他们的本领。 营销大师们开发故事…

《精通ChatGPT:从入门到大师的Prompt指南》第11章:Prompt与AI的未来

第11章:Prompt与AI的未来 11.1 技术发展的新方向 在迅速发展的人工智能领域,Prompt工程作为与AI模型交互的核心方式,正处于技术创新的前沿。未来几年,Prompt工程将沿着多个新方向发展,这些方向不仅会改变我们与AI互动…

SOA的设计模式_2.企业服务总线模式

1.企业服务总线(|Enterprise Service Bus,ESB) 在企业基于SOA实施EAI、B2B和BMP的过程中,如果采用点对点的集成方式存在着复杂度高,可管理性差,复用度差和系统脆弱等问题。企业服务总线(…

(南京观海微电子)——温度对TFT影响及改善方式

温度如何损坏 LCD? 这个工作温度范围会影响设备内的电子部分,超出范围会导致 LCD 技术在高温下过热或在寒冷时变慢。 至于液晶层,如果放在高温下,它会变质,导致它和显示器本身出现缺陷。 LCD 温度限制: 什…