详解 Macvlan 创建不同容器独立跑仿真(持续更新中)

news2024/11/24 14:22:45

一、概念介绍

1.1 什么是macvlan

        macvlan是一种网卡虚拟化技术,能够将一张网卡(Network Interface Card, NIC)虚拟出多张网卡,这意味着每个虚拟网卡都能拥有独立的MAC地址和IP地址,从而在系统层面表现为完全独立的网络接口。这些虚拟网卡可以直接连接到物理网络,就像是网络中单独的物理设备一样,而不像传统的网络桥接或VLAN那样需要一个共同的桥接接口来转发流量。可以简单理解为macvlan是docker容器中的一种网络模式,可以让容器直接连接到宿主机的物理网络。

1.2 什么是docker容器

        Docker容器是一种轻量级、可移植的软件封装技术,它允许开发者将应用程序及其所有的依赖包打包到一个独立的、可运行的包中。这个包可以在任何安装了Docker引擎的系统上运行,无论该系统是在开发、测试还是生产环境中,保证了应用运行环境的一致性。Docker容器利用操作系统的Namespace和Control Groups等技术,实现了资源的隔离和限制,使得每个容器都像是运行在一个独立的系统中,但实际共享着宿主机的内核。

1.3docker容器与虚拟机对比

  • 资源消耗:虚拟机运行在宿主机上的虚拟化层(如Hypervisor)上,每个虚拟机都需要自己的操作系统,这导致较高的资源开销。相比之下,容器直接运行在宿主机的操作系统上,共享宿主机的内核,因此资源消耗小得多。
  • 启动速度:容器由于不需要启动完整的操作系统,其启动速度远远快于虚拟机。
  • 隔离程度:虚拟机提供了更强的隔离性,每个虚拟机都有自己的硬件虚拟化层,包括CPU、内存、硬盘等,而容器共享宿主机的硬件资源,隔离性相对较弱,但通过命名空间和控制组仍能有效隔离。
  • 灵活性与便携性:容器镜像体积小,便于在网络上分发和快速部署,更适合动态扩缩容和快速迭代的开发模式。
  • 适用场景:虚拟机更适合需要高度隔离或需要运行完全不同操作系统环境的场景,而容器则更适合微服务架构、快速部署、轻量级隔离的场景。

1.4 docker的五种网络模式

Bridge (桥接模式)  ---默认模式

解释:Bridge模式是Docker的默认网络配置。每个使用此模式的容器都会得到一个独立的Network Namespace,Docker会为容器分配一个内部IP地址,并将其连接到一个名为docker0的虚拟网桥上。这意味着容器间可以相互通信,同时也能够通过宿主机的网络栈访问外部网络。

适用情况:当你需要容器之间能够直接通信,且容器需要访问互联网或者被外部网络访问时,使用Bridge模式最为常见。

Host (主机模式)

解释:在Host模式下,容器不会获得自己的Network Namespace,而是直接使用宿主机的网络堆栈。这意味着容器将共享宿主机的网络接口和端口,容器内的网络服务可以直接使用宿主机的IP地址和端口号对外提供服务。

适用情况:如果你的应用需要直接绑定到宿主机的网络接口,或者需要极低的网络延迟,可以考虑使用Host模式。但需要注意,这样做可能会导致安全风险和端口冲突问题。

None (无网络模式)

解释:None模式下,Docker不会为容器配置任何网络设施,容器将只有一个lo(loopback)接口,无法访问外部网络,也无法和其他容器通信,除非你手动配置网络。

适用情况:如果你的容器不需要网络连接,或者你计划完全自定义网络配置(例如,使用自定义网络接口或复杂的网络拓扑),可以选择None模式。

Container (容器模式)

解释:这种模式允许一个容器共享另一个容器的Network Namespace,而不是创建新的或使用宿主机的。这意味着两个容器将共享相同的网络配置,包括IP地址和端口空间。

适用情况:当多个容器需要共享相同的网络环境时,比如在Kubernetes中的Pods,所有容器需要共享同一套网络资源和配置时,这种模式非常有用。

Macvlan (MAC VLAN 模式) 

Macvlan 是一种网络虚拟化技术,允许在单个物理网络接口上创建多个虚拟以太网接口(每个都有独立的MAC地址),这些虚拟接口可以直接连接到物理网络,仿佛是直接连接到交换机上的独立物理设备。在 Docker 中使用 macvlan 模式,可以为每个容器提供一个直接与物理网络相连的网络接口,绕过 Docker 默认的网络桥接,从而获得更低的网络延迟和更接近物理机的网络行为。这种模式非常适合需要直接与外部网络交互,且要求低延迟或特定网络配置的场景。

二、 Docker的安装与使用

2.1  Docker的安装

安装教程:https://docker-practice.github.io/zh-cn/install/ubuntu.html

安装完后一定要添加镜像源:

比如我在广州或东莞:

{

      "registry-mirrors": ["https://cn-guangzhou.mirror.aliyuncs.com"]

 基础操作:

nano daemon.json  #进入文件,文件不存在时自动创建

ctrl + o  保存文件           ctrl + x 退出文件            rm -i 文件名   #删除文件

mkdir  目录名  #创建目录                   rmdir  目录名  #删除目录

更改文件前建议备份文件:

  • cp example.txt example.txt.backu       #假设要编辑的文件名为example.txt,cp命令创建一个副本
  • mv example.txt.backup example.txt    #如果修改后的文件已经保存,你可以直接用mv将备份文件覆盖回去
  • diff example.txt.example.txt.backup   #如果你不确定是否需要完全恢复,或者想查看具体哪些地方发生了变化,可以使用diff命令比较两个文件的差异,然后手动决定如何修改。

安装完上面后再拉取镜像 

docker pull ubuntu  #获取Ubuntu的最新长期支持版本(LTS)

docker pull ubuntu:20.04 #如果你需要特定版本,比如10.04

2.1.1 相关知识了解

   daemon.json是Docker守护进程(dockerd)的配置文件,它允许系统管理员自定义Docker守护程序的行为和参数。这个文件通常位于/etc/docker/目录下,并且在Docker Engine 1.12及更高版本中可以被使用。docker服务使用 systemctl start docker 命令启动失败时,考虑daemon.json的配置是否正确。

作用:

  1. 网络配置:通过daemon.json,你可以配置Docker的网络设置,比如桥接网络的子网、网关等。

  2. 日志记录:配置Docker日志的驱动、日志级别以及日志输出目标,比如将日志发送到syslog或文件系统。

  3. 存储驱动:选择或修改Docker使用的存储驱动(如overlay2、aufs等),这对于容器的存储性能和管理非常重要。

  4. 镜像加速:对于中国用户而言,可以在该文件中配置镜像加速器地址,以加快从Docker Hub拉取镜像的速度。

  5. 注册表镜像认证:配置私有注册表的认证信息,使得Docker守护进程能够无需交互式输入凭据就能拉取私有镜像。

  6. TLS配置:设定Docker守护进程的TLS加密和证书路径,增强Docker API的安全性。

  7. 资源限制:例如内存、CPU使用限制,可以在这里全局设置Docker容器可使用的最大资源量。

  8. live-restore:设置容器在Docker守护进程重启时不退出,保持容器持续运行。

  9. 其他高级选项:包括IPv6支持、容器默认的隔离技术、容器标签策略等。

2.2 Docker的基础使用命令

查看信息   --------------------------------------------------------------------------
 
docker ps   # 查看正在运行的容器
docker ps -a   # 查看所有容器
 
#查看容器相关信息(推荐使用这个)
#打印网络名称、容器名称、主机名及对应的IP地址
docker inspect --format '{{range $key, $value := .NetworkSettings.Networks}}{{$key}}: {{$.Name}} - {{$.Config.Hostname}} - {{$value.IPAddress}}{{println}}{{end}}' 容器名/ID
 
#查看存在的网络
docker network ls
 
#查看某个网络下连接的容器
docker network inspect 网络名或ID
 
#查看容器连接的网络
docker inspect  容器名/ID
 
ip addr show #列出系统中所有网络接口,包括IP地址、子网掩码、广播地址、网络接口的状态
 
ip route #展示系统的路由表。路由表是决定数据包在网络中如何转发
 
 
删除    ------------------------------------------------------------------------------
 
#将容器从指定网络断开
docker network disconnect my_network my_container
 
#删除网络(无容器连接时才可删除)
docker network rm my_network -f  (-f表示强制删除)
 
 
#删除容器
docker rm  容器名/ID      #(正在运行容器不能删除,除非加-f选项)
 
 
进入和退出容器   ------------------------------------------------------------------------
 
#进入容器前要先启动
docker start 容器名/ID       #启动容器
docker restart 容器名/ID       #重启容器
docker stop 容器名/ID         #停止正在运行的容器
 
# 进入容器,推荐exec        进入容器前要先启动容器
docker attach  容器名/ID  #使用attach进入后退出,容器停止运行
docker exec -it 容器名/ID /bin/bash  #使用exec进入后退出,容器不会停止
docker exec -it 容器名/ID bash
 
# 退出容器
exit    #直接退出
crlt + P 再按 ctrl + Q     #退出容器但是不终止运行
 
 
docker相关服务   ------------------------------------------------------------------------
systemctl start docker   #启动服务
systemctl status docker   #查看状态  active(runing)表示已启动
systemctl stop docker   #停止服务

ubuntu防火墙  ---------------------------------------------------------------------------
sudo ufw status  #查看防火墙状态,inactive是关闭,active是开启
sudo ufw enable  #开启防火墙
udo ufw disable  #关闭防火墙

三、创建macvlan网络连接的容器

3.1 创建macvlan网络

        创建容器时必须选择连接一个网络,如果不选择就是默认桥接模式brideg,可以使用docker network ls查看目前存在的网络。

sudo docker network create \
  --driver macvlan \
  --subnet=<你的宿主机子网,如192.168.0.0/24> \
  --gateway=<你的宿主机网关> \
  -o parent=物理接口名称,如ens33 \
  net-1

 参数介绍:

  •  --driver macvlan:指定网络类型为macvlan。
  • --subnet:192.168.1.0/24表示容器将会从这个子网范围内分配IP地址
  • --gateway: 通过宿主机网关容器知道如何路由到外部网络
  • -o parent: 指定macvlan网络将绑定到宿主机的哪个物理网络接口
  • net-1: 这个是你创建的网络名称

 3.2 查询创建网络时候的相关信息

docker network ls   #显示所有网络,如net-1

 ip addr  #查看所有网络接口的详细信息       ifconfig也可以

 查询信息如下列所示:

  我的物理网络接口为ens33,所以接口的IP地址配置显示为192.168.1.100/24。这里的/24就是子网掩码的CIDR表示形式,意味着网络部分有24个二进制的1,即子网掩码为255.255.255.0。因此,从这个输出中可以看出,该接口配置在一个子网为192.168.1.0/24的网络中,一般来说默认网关就是你的ip地址,比如这里的192.168.1.100。如果不确定则按下面步骤查询。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic ens33
       valid_lft 3444sec preferred_lft 3444sec

ip route  #查看路由表,网关,其中包括了目标网络、网关、接口、标志以及路由的优先级等信息。路由表来决定数据包应当通过哪个接口(网络接口卡,如 Ethernet 卡)以及下一跳的IP地址(通常是网关)来转发数据。

default via [网关IP] dev [网络接口名称] proto [协议] metric [数值]
  • [网关IP]:这部分显示的就是你的默认网关地址。
  • [网络接口名称]:表示数据包将通过哪个网络接口发送到默认网关。
  • [协议]:可能是dhcp, static, kernel, boot等,表示路由设置的来源。
  • [数值]:metric值,用于衡量路径的优先级,数值越小优先级越高。 

3.3 创建一个docker容器

sudo docker run -itd \
  --name container-1 \
  --network=net-1 \
  --ip=192.168.0.61  \
  -v /home/norten/Public/tools:/mnt \
  ubuntu

  参数介绍:

  • -i: 表示以交互模式运行容器,即使没有连接到终端也会保持STDIN(标准输入)打开
  • -t: 为容器分配一个伪TTY(虚拟终端),这使得它看起来更像是一个交互式会话
  • -d: 表示以后台模式运行容器(守护进程模式),你不会直接看到容器的输出,但容器会在后台持续运行
  • --name container-1: 为新创建的容器指定一个名称
  • --network=net-1: 指定容器要加入的网络名为net-1
  • --ip=192.168.0.61: 为容器指定了一个固定的IP地址
  • -v /home/norten/Public/tools:/mnt: 使用卷挂载功能,将宿主机的/home/norten/Public/tools目录挂载到容器内的/mnt目录
  • ubuntu: 这是告诉Docker使用ubuntu镜像作为基础来创建容器

需要注意的是:

  1. 容器要先使用docker start [容器名称] 命令启动后才能够进入容器内部
  2. 可以使用dokcer ps查看所有正在运行的容器,docker ps -a显示所有存在的容器
  3. 使用docker exec -it [容器名称] bash 进入容器后,使用exit退出时容器仍正常运行
  4. 使用docker attach [容器名称] 进入容器后,使用exit退出容器则容器停止运行
  5. 可以使用docker inspect [网络名称] 查看该网络所有相关的信息
  6. 可以使用docker inspect [容器名称] 查看该容器所有相关的信息,如以下图片所示

Mounts: 

Networks: 

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

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

相关文章

颠覆传统编程:用ChatGPT十倍提升生产力

我们即将见证一个新的时代&#xff01;这是最好的时代&#xff0c;也是最坏的时代&#xff01; 需求背景 背景&#xff1a; 平时会编写博客&#xff0c;并且会把这个博客上传到github上&#xff0c;然后自己买一个域名挂到github上。 我平时编写的博客会有一些图片来辅助说明的…

拦截器Interceptor

概念&#xff1a;是一种动态拦截方法调用的机制&#xff0c;类似于过滤器。Spring框架中提供的&#xff0c;用来动态拦截方法的执行。 作用&#xff1a;拦截请求&#xff0c;在指定的方法调用前后&#xff0c;根据业务需要执行预先设定的代码。

nvdiadocker相关配置S3Gaussian

https://download.csdn.net/download/sinat_21699465/89458214 dockerfile文件参考&#xff1a; https://download.csdn.net/download/sinat_21699465/89458214 prework&#xff1a; 显卡驱动决定了cuda版本支持的上限。例如nvdia535驱动最高支持cuda12.2所以显卡驱动版本选…

如何快速绘制logistic回归预测模型的ROC曲线?

临床预测模型&#xff0c;也是临床统计分析的一个大类&#xff0c;除了前期构建模型&#xff0c;还要对模型的预测能力、区分度、校准度、临床获益等方面展开评价&#xff0c;确保模型是有效的&#xff01; 其中评价模型的好坏主要方面还是要看区分度和校准度&#xff0c;而区分…

2024全网最全面及最新且最为详细的网络安全技巧四 之 lsql注入以及mysql绕过技巧 (1)———— 作者:LJS

目录 4. SQL注入基础之联合查询 什么是SQL注入漏洞 SQL注入原理 SQL注入带来的危害 注入按照注入技术&#xff08;执行效果&#xff09;分类 简单联合查询注入语句 4.1 [网鼎杯 2018]Comment二次注入 正好总结一下绕过addslashes的方式 4.2 ciscn2019web5CyberPunk 复现平台 解…

im即时通讯软件系统,私有化部署国产化信创适配安全可控

私有化部署IM即时通讯软件系统是许多企业为了确保数据安全、控制隐私保护、提升灵活性而考虑的重要选择之一。信创适配安全可控是企业在私有化部署IM即时通讯软件系统时需要关注的关键点。本文将探讨私有化部署IM即时通讯软件系统的意义、信创适配的重要性&#xff0c;以及如何…

张宇1000题太难?这么刷只要30天就能吃透!

1000题真的难&#xff0c;一刷正确率不高是正常的&#xff01; 我不建议再继续去刷880题&#xff0c;因为继续开始做新题并没有太大的意义&#xff0c;老问题不解决&#xff0c;做新题的效果其实并不好。 如果一刷1000题正确率不高&#xff0c;我们应该反思为什么会这样&…

Java基础之练习(2)

需求: 键盘录入一个字符串,使用程序实现在控制台遍历该字符串 package String;import java.util.Scanner;public class StringDemo5 {public static void main(String[] args) {//录入一个字符串Scanner sc new Scanner(System.in);System.out.println("请输入一个字符串…

【JAVA】精致的五角星

输出的这幅图像中&#xff0c;一颗精致的金色五角星跃然于深红色背景之上&#xff0c;绽放出迷人的光彩。 要绘画这颗五角星&#xff0c;首先要了解五角星的构造和角度问题。我们可以分为内五边形&#xff0c;和外五边形。内五边形从他的中心到每个外点&#xff0c;连接起来&am…

Day28:回溯法 491.递增子序列 46.全排列 47.全排列 II 332.重新安排行程 51. N皇后 37. 解数独

491. 非递减子序列 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素&#xff0c;如出现两个整数相等&#xff0c;也可以视作递增序列的一种特殊情…

设计模式学习之——单例模式

文章目录 单例模式什么叫做单例模式单例模式的动机 单例模式的引入思考 饿汉式单例和懒汉式单例饿汉式单例懒汉式单例 单例模式总结1&#xff0e;主要优点2&#xff0e;主要缺点3&#xff0e;适用场景 单例模式 什么叫做单例模式 顾名思义&#xff0c;简单来说&#xff0c;单…

(南京观海微电子)——TFT LCD压合技术

TFT-LCD TFT-LCD open cell后段制程主要指的是将驱动IC和PCB压合至液晶板上&#xff0c;这个制程主要由三个步骤组成&#xff1a; 1.ACF (Anisotropic Conductive Film)的涂布。 在液晶板需要压合驱动IC的地方涂布ACF&#xff0c;ACF又称异方性导电胶膜&#xff0c;特点是上下…

如何看待鸿蒙HarmonyOS?

鸿蒙系统&#xff0c;自2019年8月9日诞生就一直处于舆论风口浪尖上的系统&#xff0c;从最开始的“套壳”OpenHarmony安卓的说法&#xff0c;到去年的不再兼容安卓的NEXT版本的技术预览版发布&#xff0c;对于鸿蒙到底是什么&#xff0c;以及鸿蒙的应用开发的讨论从来没停止过。…

贪心算法——最少跳跃步数(C++)

未来&#xff0c;未来。 ——2024年6月17日 题目描述 给定一个含n&#xff08;1≤n≤1000&#xff09;个非负整数数组nums&#xff08;0≤nums[i]≤1000&#xff09;&#xff0c;数组中的每个元素表示在该位置可以跳跃的最大长度&#xff0c;假设总是可以从初始位置0到达最后一…

网络文化经营许可证(文网文)办理全面讲解

随着互联网时代的飞速发展&#xff0c;互联网早已渗透到人们的生活中&#xff0c;各类直播、短视频成为大家生活娱乐必不可少的一部分。注册一家从事互联网行业的企业是一个不错的选择。那互联网企业需要办理什么证件资质呢&#xff1f;在互联网行业从事盈利文化活动必须持有网…

红队内网攻防渗透:内网渗透之内网对抗:横向移动篇WinRS命令WinRM管理RDP终端密码喷射点CrackMapExec

红队内网攻防渗透 1. 内网横向移动1.1 内网横向移动方法分类1.2 WinRM&WinRS1.2.1 利用条件1.2.1.1 探针可用1.2.1.2 连接执行1.2.1.3 CS上线利用1.2.1.3.1 反向连接上线1.2.1.4 CS内置模块1.2.1.5 其他解决1.3 RDP1.3.1 探针连接1.3.2 连接执行1.3 CrackMapExec-密码喷射1…

vue3封装菜树,递归展示只显示第一层

问题描述 vue3封装菜树&#xff0c;递归展示只显示第一层 解决 需要在递归的组件中导出自己给自己使用

搜索引擎数据库介绍

搜索引擎数据库的定义 搜索引擎数据库是一类专门用于数据内容搜索的NoSQL数据库&#xff0c;是非结构化大数据处理分析领域中重要的角色。搜索引擎数据库使用索引对数据中的相似特征进行归类&#xff0c;并提高搜索能力。通过对索引和检索过程的优化&#xff0c;以处理大量文本…

【进阶篇-Day5:JAVA常用API的使用(Math、BigDecimal、Object、包装类等)】

目录 1、API的概念2、Object类2.1 Object类的介绍2.2 Object的toString()方法2.3 Object的equals()方法2.4 Objects概述 3、Math类4、System类5、BigDecimal类6、包装类6.1 包装类的概念6.2 几种包装类&#xff08;1&#xff09;手动转换包装类&#xff1a;&#xff08;2&#…

Java项目:基于SSM框架实现的人事管理系统【ssm+B/S架构+源码+数据库+开题报告+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的人事管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功能齐全…