Docker网络学习

文章目录

  • Docker容器网络
    • 1.Docker为什么需要网络管理
    • 2. Docker网络简介
    • 3. 常见的网络类型
    • 4. docker 网络管理命令
    • 5.两种网络加入差异
    • 6.网络讲解
      • docker Bridge 网络
      • docker Host 网络
      • docker Container 网络
      • docker none 网络


Docker容器网络

1.Docker为什么需要网络管理

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

2. Docker网络简介

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

CNM

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

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

Libnetwork

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

3. 常见的网络类型

  1. bridge网络

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

  2. host网络

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

  1. container网络

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

  2. none网络

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

  3. overlay网络

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

另外,在 Docker 安装时,会自动安装一块 Docker 网卡称为 docker0,它是一个网
桥设备,主要用于 Docker 各容器及宿主机的网络通信

[root@aliyun ~]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255ether 02:42:6e:f7:9f:92  txqueuelen 0  (Ethernet)RX packets 728  bytes 83656 (81.6 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 915  bytes 77233 (75.4 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

4. docker 网络管理命令

命令别名功能
docker network create创建网络
docker network connect连接网络
docker network disconnect断开网络
docker network lsdocker network list列出网络
docker network prune删除不使用的网络
docker network inspect查看网络详情
docker network rmdocker network remove删除 1 个或者多个网络

docker network create

功能:创建网络

docker network create [OPTIONS] NETWORK

关键参数
○ -d, --driver: 网络驱动
○ --gateway: 网关地址
○ --subnet: 表示网段的 CIDR 格式的子网
○ --ipv6: 启用 ipv6

[root@aliyun ~]# docker network create --driver=bridge --subnet=192.168.1.0/24 net1

docker network inspect

功能:查看网络详情

docker network inspect [OPTIONS] NETWORK [NETWORK...]

关键参数
○ -f,–format:指定格式

[root@aliyun ~]# docker network inspect net1

docker network connect

功能:将容器连接到网络。可以按名称或 ID 连接容器。 一旦连接,容器可以与同
一网络中的其他容器通信

docker network connect [OPTIONS] NETWORK CONTAINER

关键参数
○ --ip: 指定 IP 地址
○ --ip6: 指定 IPv6 地址

将正在运行的容器连接到网络
[root@aliyun ~]# docker network connect net1 tmpfs_test
容器启动时将容器连接到网络
[root@aliyun ~]# docker run --network=net1 nginx
指定容器ip,ip必须是网段下的IP
[root@aliyun ~]# docker network connect --ip 192.168.1.10 net1 test

docker network disconnect

功能:断开网络

docker network disconnect [OPTIONS] NETWORK CONTAINER

关键参数

  • -f:强制退出

docker network prune

功能:删除不使用网络

docker network prune [OPTIONS]

关键参数
○ -f, --force : 不提示

docker network rm

功能:删除 1 个或者多个网络

docker network rm NETWORK [NETWORK...]

关键参数
○ -f:强制退出

docker network ls

功能:列出网络列表

docker network ls [OPTIONS] 别名 docker network list

关键参数
○ -f, --filter:指定过滤条件
○ --format:指定格式
○ --no-trunc:不截断
○ -q, --quiet :仅仅显示 id

5.两种网络加入差异

创建容器再指定网络

[root@aliyun ~]# docker run -d --name test nginx:latest
[root@aliyun ~]# docker network connect net1 test
[root@aliyun ~]# docker inspect test
"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"NetworkID": "6bc4a0a0d86299aea2951a3be2f0c0bc2a2fce2d4f8ca2480f41b0e8673df2df","net1": {"IPAMConfig": {},"Links": null,"Aliases": ["cdc5c617ea77"],"NetworkID": "b444785e73a714682b22eeaf1ea49d217573685c7ed78da035e293e4d57d9729",

创建容器时指定网络

[root@aliyun ~]# docker run -itd --name demo --network net1 nginx:latest
92dd23a7de980a4dcb314c1f26bfc201e42d63acbfdec37f5cfdefef8e2babb7
[root@aliyun ~]# docker inspect demo"net1": {"IPAMConfig": null,"Links": null,"Aliases": ["92dd23a7de98"],"NetworkID": "b444785e73a714682b22eeaf1ea49d217573685c7ed78da035e293e4d57d9729","EndpointID": 
]

先创建容器再指定网络容易会有一个默认的bridge网络,而创建时指定网络则不会有。

6.网络讲解

docker Bridge 网络

Docker Bridge 网络采用内置的 bridge 驱动, bridge 驱动底层采用的是 Linux 内核中Linux bridge 技术。就网络而言, bridge 网络是在网络段之间转发流量的链路层设备,而网桥可以是在主机内核中运行的硬件设备或软件设备;就 Docker 而言,桥接网络使用软件网桥 docker0,它允许连接到同一网桥网络的容器进行通信,同时提供与未连接到该网桥网络容器的隔离。默认情况下,创建的容器在没有使用–network 参数指定要加入的 docker 网络时,默认都是加入 Docker 默认的单机桥接网络

在这里插入图片描述

默认的 bridge 网络会被映射到内核中为 docker0 的网桥上。Docker 默认的 bridge 网络和 Linux 内核中的 docker0 网桥是一一对应的关系。bridge 是 Docker 对网络的命名,而 docker0 是内核中网桥的名字

在这里插入图片描述

这里的bridge和虚拟机里的桥接网络类型不太一样。可以把这个看作与虚拟机里的NAT类型相似。宿主机能上公网,那么连接此网络的容器也可以上公网。此为默认网络类型(也就是说运行容器时不指定网络,默认都属于这种
类型)。宿主机上的docker0网卡就是属于此网络.

但容器停止或者删除时会自动和docker0断开连接。

创建自定义 bridge

[root@aliyun ~]# docker network create -d bridge new-bridge

DNS 解析
Docker 自定义桥接网络是支持通过 Docker DNS 服务进行域名解析的, 也就是说我们可以直接使用容器名进行通信,因为 DNS 服务可以解析容器名到 IP 地址的映射, 但是默认的 bridge 网络是不支持 DNS 的。也就是说指定自定义的bridge才能使用ping命令,ping容器名。

docker Host 网络

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

在这里插入图片描述

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

docker Container 网络

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

在这里插入图片描述

使用场景

在这种模式下的 Docker Container 可以通过 localhost 来访问 namespace 下的其他容
器,传输效率较高。但是两个容器之间存在依赖,如果依赖容器重启了,会导致另外
一个服务的网络不可用

docker none 网络

none 网络就是指没有网络。挂在这个网络下的容器除了 lo(本地回环),没有其他任何网卡 。连接此网络的容器没有IP地址等信息,只有lo本地回环网卡。无法连接公网网络。


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

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

相关文章

自动生成bug异常追踪-SRE与开发自动化协同

作者&#xff1a;观测云 数据智能部 产品方案架构师 范莹莹 简介 生产环境 bug 的定义&#xff1a;RUM 应用和 APM 应用的 error_stack 信息被捕捉后成为 bug。 以 APM 新增错误巡检为例&#xff0c;当出现新错误时&#xff0c;在观测云控制台的「事件」模块下生成新的事件报…

基于matlab实现的电力系统稳定性分析摆幅曲线代码

完整程序&#xff1a; clear; clc; t 0; tf 0; tfl 0.5; tc 0.5; % tc 0.05, 0.125, 0.5 sec for 2.5 cycles, 6.25 cycles & 25 cycles resp ts 0.05; m 2.52 / (180 * 50); i 2; dt 21.64 * pi / 180; ddt 0; time(1) 0; ang(1) 21.64; pm 0.9; pm1 2.44;…

java 字符串只保留数字、字母、中文

public static void main(String[] args) {String str "测 试 WG23-D";// 只留字母String s1 str.replaceAll("[^a-zA-Z]", "");// 只留数字String s2 str.replaceAll("[^0-9]", "");// 只留中文String s3 str.replaceA…

骨传导耳机有害处吗、骨传导耳机真的不好用吗?

骨传导耳机没有害处。 骨传导耳机是通过将声音传递到颅骨&#xff0c;再由颅骨传递到内耳&#xff0c;从而达到听声音的效果&#xff0c;与传统的耳机不同。 因此&#xff0c;骨传导耳机不会直接对人的身体健康、耳朵产生压力和损伤&#xff0c;也不会影响耳道和中耳的正常功能…

Jmeter性能实战之分布式压测

分布式执行原理 1、JMeter分布式测试时&#xff0c;选择其中一台作为调度机(master)&#xff0c;其它机器作为执行机(slave)。 2、执行时&#xff0c;master会把脚本发送到每台slave上&#xff0c;slave 拿到脚本后就开始执行&#xff0c;slave执行时不需要启动GUI&#xff0…

题目 1057: 二级C语言-分段函数

有一个函数如下&#xff0c;写一程序&#xff0c;输入x&#xff0c;输出y值。 保留两位小数 样例输入 1 样例输出 1.00 这道题的思路很简单&#xff0c;我直接用if判断输入的X对应的函数Y的区间&#xff0c;代入对应的函数&#xff0c;求出结果。记得变量用浮点型&#xff…

【毕设选题】opencv 图像识别 指纹识别 - python

文章目录 0 前言1 课题背景2 效果展示3 具体实现3.1 图像对比过滤3.2 图像二值化3.3 图像侵蚀细化3.4 图像增强3.5 特征点检测 4 OpenCV5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往…

计算机竞赛 机器视觉的试卷批改系统 - opencv python 视觉识别

文章目录 0 简介1 项目背景2 项目目的3 系统设计3.1 目标对象3.2 系统架构3.3 软件设计方案 4 图像预处理4.1 灰度二值化4.2 形态学处理4.3 算式提取4.4 倾斜校正4.5 字符分割 5 字符识别5.1 支持向量机原理5.2 基于SVM的字符识别5.3 SVM算法实现 6 算法测试7 系统实现8 最后 0…

基于springboot+vue的问卷调查系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

Day42:网易云项目,路由进阶

网易云项目 创建、启动项目并配置路由 npm init vite npm i npm i vue-router npm i sass -D 在main.js中 import router from ./router createApp(App).use(router).mount(#app) 在index中配置路由 import {createRouter,createWebHistory} from vue-router import H…

【第200篇原创文章】解决低于1%概率出现的芯片VPSS模块跑飞的问题

在发布SDK内测的时候&#xff0c;我们发现在切换视频分辨率的时候有低概率出现VPSS模块跑飞的情况&#xff0c;概率低于1%&#xff0c;试个两三百次&#xff0c;能出1~2次。切换视频分辨率这个功能在安防产品上也确实存在需求&#xff0c;网络带宽不大好的地方分辨率可以适当下…

【LeetCode-面试经典150题-day24】

目录 35.搜索插入位置 74.搜索二维矩阵 162.寻找峰值 33.搜索旋转排序数组 35.搜索插入位置 题意&#xff1a; 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请…

Verdi实现信号的平移

在Verilog/System verilog中&#xff0c;# xxx可以实现延迟指定时间的功能&#xff0c;而在使用verdi查看信号波形并进行分析时&#xff0c;同样也可以实现类似的功能。 (注&#xff1a;这种信号平移是有其应用场景的&#xff0c;例如&#xff0c;在某些仿真模型中&#xff0c;…

【100天精通Python】Day63:Python可视化_Matplotlib绘制子图,子图网格布局属性设置等示例+代码

目录 1 基本子图绘制示例 2 子图网格布局 3 调整子图的尺寸 4 多行多列的子图布局 5 子图之间的共享轴 6 绘制多个子图类型 7 实战&#xff1a; 绘制一个大图&#xff0c;里面包含6个不同类别的子图&#xff0c;不均匀布局。 绘制子图&#xff08;subplots&#xff09;…

趣谈网络协议_1

趣谈网络协议_1 第1讲 | 为什么要学习网络协议&#xff1f;第4讲 | DHCP与PXE&#xff1a;IP是怎么来的&#xff0c;又是怎么没的&#xff1f;动态主机配置协议&#xff08;DHCP&#xff09; 第5讲 | 从物理层到MAC层&#xff1a;如何在宿舍里自己组网玩联机游戏&#xff1f;第…

C# 随机数生成 Mersenne Twister 马特赛特旋转演算法 梅森旋转算法

NuGet安装MathNet.Numerics 引用: using MathNet.Numerics.Random; /// <summary>/// 包括lower&#xff0c;不包括upper/// </summary>/// <param name"lower"></param>/// <param name"upper"></param>/// <para…

【深度学习】 Python 和 NumPy 系列教程(十一):NumPy详解:3、数组数学(元素、数组、矩阵级别的各种运算)

目录 一、前言 二、实验环境 三、NumPy 0、多维数组对象&#xff08;ndarray&#xff09; 多维数组的属性 1、创建数组 2、数组操作 3、数组数学 1. 元素级别 a. 直接运算 b. 加法&#xff1a;np.add()函数 c. 减法&#xff1a;np.subtract()函数 d. 乘法&#xf…

HarmonyOS/OpenHarmony应用开发-DevEco Studio新建项目的整体说明

一、文件-新建-新建项目 二、传统应用形态与IDE自带的模板可供选用与免安装的元服与IDE中自带模板的选择 三、以元服务&#xff0c;远程模拟器为例说明IDE整体结构 1区是工程目录结构&#xff0c;是最基本的配置与开发路径等的认知。 2区是代码开发与修改区&#xff0c;是开发…

Ubuntu下高效Vim的搭建(离线版)

软件界面 可以看到界面下方有一些常用提示信息&#xff1a;文件路径、format、文件类型、光标所在的坐标(x,y)、进度条(百分比)、日期时间 会提示已定义的变量名词(快速补全) 搭建方法 下载资源文件 把Vim 和 .vimrc 拷贝到家目录下&#xff0c;并执行tar -xvf Vim 即可。 …

【深度学习】Pytorch 系列教程(十四):PyTorch数据结构:6、模块(Module):前向传播

目录 一、前言 二、实验环境 三、PyTorch数据结构 0、分类 1、张量&#xff08;Tensor&#xff09; 2、张量操作&#xff08;Tensor Operations&#xff09; 3、变量&#xff08;Variable&#xff09; 4、数据集&#xff08;Dataset&#xff09; 5、数据加载器&#x…