[Docker][Docker NetWork][上]详细讲解

news2024/11/23 0:24:35

目录

  • 1.为什么需要网络管理
  • 2.Docker 网络架构简介
    • 0.铺垫说明
    • 1.CNM
    • 2.Libnetwork
    • 3.驱动
  • 3.常见网络类型
    • 1.bridge 网络
    • 2.host 网络
    • 3.container 网络
    • 4.none 网络
    • 5.overlay 网络


1.为什么需要网络管理

  • 容器的网络默认与宿主机及其他容器都是相互隔离, 但同时也要考虑以下问题, 比如:
    • 多个容器之间是如何通信的
    • 容器和宿主机是如何通信的
    • 容器和外界主机是如何通信的
    • 容器中要运行一些网络应用(如 nginx、web应用、数据库等),如果要让外部也可以访问这些容器内运行的网络应用应该如何实现
    • 容器不想让它的网络与宿主机、与其他容器隔离应该如何实现
    • 容器根本不需要网络的时候应该如何实现
    • 容器需要更高的定制化网络(如定制特殊的集群网络、定制容器间的局域网)应该如何实现

2.Docker 网络架构简介

0.铺垫说明

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

1.CNM

  • Docker网络架构采用的设计规范是CNM(Container Network Model)
  • CNM中规定了Docker网络的基础组成要素
    • Sandbox
      • 提供了容器的虚拟网络栈
        • 即:端口、套接字、IP路由表、防火墙、 DNS配置等内容
      • 主要用于隔离容器网络与宿主机网络,形成了完全独立的容器网络环境
    • Network:Docker内部的虚拟子网,使得网络内的参与者能够进行通讯
    • Endpoint
      • 虚拟网络的接口,就像普通网络接口一样,Endpoint的主要职责是负责创建连接
      • Endpoint类似于常见的网络适配器,那也就意味着一个Endpoint只能接入某一个网络, 当容器需要接入到多个网络,就需要多个Endpoint
  • 如下图所示,容器B有两个Endpoint并且分别接入Networkd A和Network B。那么容器A和容器B之间是可以实现通信的,因为都接入了NetworkA。但是容器A和容器C不可以通过容器B的两个Endpoint通信
    请添加图片描述

2.Libnetwork

  • Libnetwork是CNM的一个标准实现
  • Libnetwork是开源库,采用Go语言编写(跨平台的),也是Docker所使用的库,Docker网络架构的核心代码都在这个库中。 Libnetwork实现了CNM中定义的全部三个组件,此外它还实现了本地服务发现、基于Ingress的容器负载均衡,以及网络控制层和管理层等功能

3.驱动

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

3.常见网络类型

1.bridge 网络

  • bridge驱动会在Docker管理的主机上创建一个Linux网桥
    • 默认情况下,网桥上的容器可以相互通信
    • 也可以通过bridge驱动程序配置,实现对外部容器的访问
  • Docker容器的默认网络驱动,当需要多个容器在同一个Docker主机上通信时,桥接网络是最佳选择
  • 另外,在Docker安装时,会自动安装一块Docker网卡称为docker0,它是一个网桥设备,主要用于Docker各容器及宿主机的网络通信

2.host 网络

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

3.container 网络

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

4.none 网络

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

5.overlay 网络

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

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

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

相关文章

Node污染 (Node.js)

🎼个人主页:金灰 😎作者简介:一名简单的大一学生;易编橙终身成长社群的嘉宾.✨ 专注网络空间安全服务,期待与您的交流分享~ 感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️ 🍊易编橙终身成长社群&#…

C语言指针(Pointer)

指针与底层硬件联系紧密,使用指针可操作数据的地址,实现数据的间接访问 问题:这好好的一个变量,我定义完之后为啥不用它名字直接访问呢?我非要用间接访问,这不没事找事吗? 为什么需要指针? …

18.C语言函数相关练习题2

函数相关练习题2 1.不同班级的平均分2.二维数组和函数的概念3.外部变量和全局变量4.全局变量的例子5.输入10个数&#xff0c;找出最大数及最大数的下标 1.不同班级的平均分 #include <stdio.h>void inityarry(int arr[],int len){int i;for(i0;i<len;i){printf("…

【第八天】DNS及其查询过程

DNS及其查询过程 什么是DNS&#xff1f; 一般我们的主机&#xff0c;服务器都有一个ip地址&#xff0c;例如10.10.10.1。在计算机层面&#xff0c;如果我们要发送请求的话&#xff0c;首先就要知道我们的目标&#xff0c;也就是对方的ip地址。而IP地址很难记&#xff0c;比如…

初学者编程指南:方法与资源推荐

一、引言 编程已成为当代大学生的必备技能&#xff0c;但面对众多编程语言和学习资源&#xff0c;新生们常常感到迷茫。如何选择适合自己的编程语言&#xff1f;如何制定有效的学习计划&#xff1f;如何避免常见的学习陷阱&#xff1f;编程不仅是技术领域的一项基本技能&#…

H.264编码中的16x16宏块分析

&#x1f60e; 作者介绍&#xff1a;欢迎来到我的主页&#x1f448;&#xff0c;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff08;领取大厂面经等资料&#xff09;&#xff0c;欢迎加我的…

快速索引alarm添加

快速索引alarm添加 添加预警alarm 文件夹和 temp_led.c , temp_led.h , humi_led.c, humi_led.h (1)点击品字, 添加alarm, 然后增加文件, 点进Source文件夹 (2)点击新建文件夹, 然后新建alarm文件夹 (3)把文件类型切换为all, 方便后续右键添加上述四个文件名字. (4)空白处, 右…

社区团购的全流程解析与开源AI智能名片S2B2C商城小程序的应用探索

摘要&#xff1a;随着互联网技术的飞速发展&#xff0c;社区团购作为一种新兴的电商模式&#xff0c;凭借其高效、便捷、低成本的优势迅速崛起。本文旨在深入探讨社区团购的交易全流程&#xff0c;并以开源AI智能名片S2B2C商城小程序为例&#xff0c;分析其在社区团购中的创新应…

Nginx进阶-常见配置

一、nginx Proxy 反向代理 1、代理原理 反向代理产生的背景&#xff1a; 在计算机世界里&#xff0c;由于单个服务器的处理客户端&#xff08;用户&#xff09;请求能力有一个极限&#xff0c;当用户的接入请求蜂拥而入时&#xff0c;会造成服务器忙不过来的局面&#xff0c…

计算机毕业设计选题推荐-预制菜平台-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

传输限速的方案那么多,却都没有这一个全面

在很多行业和领域&#xff0c;传输速度并不是无限制地越快越好&#xff0c;反而基于很多原因&#xff0c;在很多情况下&#xff0c;需要对传输的速度进行限制&#xff0c;原因如下&#xff1a; 带宽分配&#xff1a;在有限的网络资源下&#xff0c;对传输进行限速可以确保关键…

MIT-离散数学笔记

离散数学 PropositionEx 1:Ex 2:Ex 3:Ex 4:Ex 5:Ex 6:Ex 7:Ex 8: Proposition In mathematics, we have a mathematical proof is a verification of a proposition by a chain of logical deductions from a set of axioms. 在数学中&#xff0c;数学证明是通过一组公理的一系…

强化学习-alphazero 算法理论

一、算法简介 简单地说&#xff0c;AlphazeroMCTS SL(策略网络价值网络) Selfplay resnet。 其中MCTS指的是蒙特卡洛树搜索&#xff0c;主要用于记录所有访问过的棋盘状态的各种属性&#xff0c;包括该状态访问次数&#xff0c;对该状平均评价分数等。 SL指监督学习算法&…

PCDN技术如何提高数据传输的可靠性?

PCDN技术通过以下方式提高数据传输的可靠性: 1.负载均衡与故障转移: PCDN系统具备负载均衡的能力&#xff0c;可以根据节点的负载情况动态分配请求&#xff0c;避免单点故障和过载情况。此外&#xff0c;当某个节点发生故障时&#xff0c;PCDN可以迅速将流量转移到其他可用节…

OpenAI推出GPT-4o长输出版版本

&#x1f989; AI新闻 &#x1f680; OpenAI推出GPT-4o长输出版版本 摘要&#xff1a;OpenAI宣布正在测试每次请求可输出最多64K tokens的GPT-4o长输出版版本&#xff0c;目前仅Alpha测试参与者可使用。该版本推理成本较高&#xff0c;定价每百万tokens输入6美元&#xff0c;…

从微架构到向量化--CPU性能优化指北

引入 定位程序性能问题&#xff0c;相信大家都有很多很好的办法&#xff0c;比如用top/uptime观察负载和CPU使用率&#xff0c;用dstat/iostat观察io情况&#xff0c;ptrace/meminfo/vmstat观察内存、上下文切换和软硬中断等等&#xff0c;但是如果具体到CPU问题&#xff0c;我…

用于跟踪个人图书馆的BookLogr

什么是 BookLogr &#xff1f; BookLogr 是一款网络应用&#xff0c;旨在帮助您轻松管理个人图书馆。这项自托管服务可确保您完全控制数据&#xff0c;提供安全且私密的方式来跟踪您拥有、阅读或希望阅读的所有书籍。您也可以选择向公众自豪地展示您的图书馆&#xff0c;与您的…

申请流量卡不通过,这是什么原因呢,又该如何解决?

在申请流量卡时&#xff0c;有些人会出现被拒绝的情况&#xff0c;你知道这是怎么回事吗&#xff1f;申请流量卡被拒绝又该如何解决呢&#xff1f;下面这些问题都给你整理下了&#xff01; ​ 常见原因&#xff1a; 1.信息有误&#xff1a;收件人/办卡人&#xff1a;必须是同一…

How to specify the LangSmith project name for each Chain?

题意&#xff1a;如何为每个链指定LangSmith项目名称&#xff1f; 问题背景&#xff1a; According to the LangSmith documentation you need to set the LANGCHAIN_PROJECT environment variable to specify the project name in langsmith. 根据LangSmith的文档&#xff0…