跨 Docker 宿主机 macvlan 类型

前言

a. 本文主要为 Docker的视频教程 笔记。

b. 环境为 三台 CentOS 7.0 虚拟机 (Vmware Workstation 15 Player)

c. 上一篇:Docker 网络类型

准备工作

macvlan 是指将一块物理网卡虚拟出多个子网,是 Linux 内核提供的特性(虽然可以实现教程中的效果,但对 macvlan 还没有深入的了解,以后会再来回顾这个概念)。

由于暂时无法接触到实际的使用场景,因此在虚拟机中建立两个系统,使用虚拟网卡,以复盘教程中的情况。

安装 Vmware 的使用遇到了问题:启用了Hyper-V无法安装Vmware。在 VirtualBox 中也只能选择 32 位的操作系统。解决方法是新建禁用 Hyper-V 的操作系统启动项(拷贝现有项并修改):

bcdedit /copy {current} /d "<CUSTOM_NAME>"
bcdedit /set {上一条语句生成的代码} hypervisorlaunchtype OFF

至于安装docker,因操作已经手工操作过多次,直接使用官方的安装脚本安装了(自动化的东西就是好啊)

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

bash -s 表示向脚本中传递执行参数。

为了看起来更加整洁,使用命令 hostnamectl set-hostname <HOST_NAME> 重新设置主机名,此处我将新建的两个虚拟机分别设置为 docker01 和 docker02 ,两个虚拟的ip地址分别为 192.168.88.128 和 192.168.88.129。

实际操作

在 Docker 中创建 macvlan 类型的网络,在两个虚拟机中分别执行:

docker network create --driver macvlan --subnet 192.168.88.0/24 --gateway 192.168.88.1 -o parent=ens33 macvlan1

下载busybox的镜像用于测试:

docker pull busybox

使用 macvlan1 作为网络类型、busybox 作为镜像创建容器:

docker run -it --network macvlan1 --ip <IP_ADDRESS> busybox

此处我使用192.168.88.150和192.168.88.151分别作为两个虚拟机中镜像的ip地址,并ping另一个地址,结果如图

[root@docker01 ~]# docker run -it --network macvlan1 --ip 192.168.88.150 busybox

/ # ping 192.168.88.151

PING 192.168.88.151 (192.168.88.151): 56 data bytes

64 bytes from 192.168.88.151: seq=0 ttl=64 time=0.318 ms

64 bytes from 192.168.88.151: seq=1 ttl=64 time=0.689 ms

64 bytes from 192.168.88.151: seq=2 ttl=64 time=0.476 ms

64 bytes from 192.168.88.151: seq=3 ttl=64 time=0.469 ms

64 bytes from 192.168.88.151: seq=4 ttl=64 time=0.399 ms

64 bytes from 192.168.88.151: seq=5 ttl=64 time=0.339 ms

^C

--- 192.168.88.151 ping statistics ---

6 packets transmitted, 6 packets received, 0% packet loss

round-trip min/avg/max = 0.318/0.448/0.689 ms

[root@docker02 ~]# docker run -it --network macvlan1 --ip 192.168.88.151 busybox

/ # ping 192.168.88.150

PING 192.168.88.150 (192.168.88.150): 56 data bytes

64 bytes from 192.168.88.150: seq=0 ttl=64 time=0.638 ms

64 bytes from 192.168.88.150: seq=1 ttl=64 time=0.642 ms

64 bytes from 192.168.88.150: seq=2 ttl=64 time=0.637 ms

64 bytes from 192.168.88.150: seq=3 ttl=64 time=0.534 ms

64 bytes from 192.168.88.150: seq=4 ttl=64 time=0.381 ms

64 bytes from 192.168.88.150: seq=5 ttl=64 time=0.260 ms

^C

--- 192.168.88.150 ping statistics ---

6 packets transmitted, 6 packets received, 0% packet loss

round-trip min/avg/max = 0.260/0.515/0.642 ms

后记

这一次的实践其实还是很迷惑的,最开始我尝试使用两个设备:手上的笔记本电脑 和 树莓派(还特意在树莓派上安装了Docker),都连接合租房的无线路由器。也是这样的步骤进行,但是两个容器并不能互相ping通。

在看之后教程的过程中,突然发现教程中使用的是 Vmware 的虚拟机安装 Docker,于是也转向虚拟机重新进行实践。虚拟机我是用的就是默认的 NAT 模式,也没有进行所谓“混杂模式”相关的设置。所谓混杂模式,大概是接收所有的网络包,并不丢弃不是发给自己的部分。因此猜测,macvlan 类型就是通过监听那些不属于自己的网络的包 是因为之前笔记本和树莓派的实践中,无线路由器不会转发与本机无关的其它包,因此两个物理机虽然都创建了所谓的 macvlan 网络,依然无法互相通信。

参考:

macvlan 相关介绍:

https://www.jianshu.com/p/2b8b6c738bf6

解决windows 10 开启Hyper-V后无法运行 Vmware:

https://www.xiaoyuanjiu.com/11232.html

修改主机名:

https://www.cnblogs.com/yinfutao/p/10620035.html

虚拟机最小化安装CentOS:

https://zhuanlan.zhihu.com/p/133733418

使用脚本安装docker:

https://www.runoob.com/docker/centos-docker-install.html

bash -s 含义:

https://kodango.com/one-line-installer-using-shell

跨 Docker 宿主机 macvlan 类型的更多相关文章

  1. 跨 Docker 宿主机网络 overlay 类型

    跨 Docker 宿主机网络 overlay 类型 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 三台 CentOS 7.0 虚拟机 (Vmware Workstation 1 ...

  2. 判断runtime是否运行在docker中及从docker中获取宿主机的ip信息

    1.判断运行时环境是否运行在docker中 参考:How to determine if a process runs inside lxc/Docker? 确定进程是否在LXC/Docker中运行? ...

  3. 如何实现跨 Docker 主机存储?- 每天5分钟玩转 Docker 容器技术(73)

    从业务数据的角度看,容器可以分为两类:无状态(stateless)容器和有状态(stateful)容器. 无状态是指容器在运行过程中不需要保存数据,每次访问的结果不依赖上一次访问,比如提供静态页面的 ...

  4. 第 9 章 数据管理 - 073 - 如何实现跨 Docker 主机存储?

    从业务数据的角度看,容器可以分为两类: 无状态(stateless)容器 无状态是指容器在运行过程中不需要保存数据,每次访问的结果不依赖上一次访问,比如提供静态页面的 web 服务器. 有状态(sta ...

  5. 如何使用数据卷在宿主机和docker容器之间共享文件

    共享宿主机的目录给容器 docker run -i -t -v ~/download:/home/hello python3-env /bin/bash -v  表示创建一个数据卷并挂载到容器里 ~/ ...

  6. DOCKER 无法获取使用宿主机DNS 的原因,解决方法

    今天在公司服务器上部署项目,遇到一个大坑.接口怎么请求都不同,宿主机DNS已经改了.宿主可以请求,找了半天,原来是DOCKER 没有获取到主机的DNS 进去DOCKER解析不了域名 指定DNS 启动也 ...

  7. Jenkins(Docker容器内)使用宿主机的docker命令

    1.Jenkins镜像 Docker容器内的Jenkins使用容器外宿主机的Docker(即DooD,还有另外的情况就是DioD),google一下有几种说法,但是都没试成功(试过一种就是修改宿主机/ ...

  8. docker从容器中怎么访问宿主机

    docker从容器中怎么访问宿主机  我来答 浏览 3160 次 2个回答 #热议# 2019年全国两会召开,哪些提案和政策值得关注? 好程序员 知道合伙人 推荐于2017-11-22   dock ...

  9. Docker之宿主机ssh至docker容器

    下载docker: https://www.docker.com/products/overview 下载镜像: docker pull centos 查看镜像:docker images 创建镜像对 ...

随机推荐

  1. Kotlin高阶函数实战

    前言 1. 高阶函数有多重要? 高阶函数,在 Kotlin 里有着举足轻重的地位.它是 Kotlin 函数式编程的基石,它是各种框架的关键元素,比如:协程,Jetpack Compose,Gradle ...

  2. java 注释,关键字和标识符

    注释 注释是为了防止当写代码的时间过久了之后,忘记了这行代码的意思或者是在一个大型的项目里面,不可能每一个模块的功能你都记得,所以需要一个注释来帮助记忆. 注释不会被执行 平时写代码一定要养成写注释的 ...

  3. Numpy数组的组合与分割详解

    在介绍数组的组合和分割前,我们需要先了解数组的维(ndim)和轴(axis)概念. 如果数组的元素是数组,即数组嵌套数组,我们就称其为多维数组.几层嵌套就称几维.比如形状为(a,b)的二维数组就可以看 ...

  4. MySQL全面瓦解27:主从复制(原理 + 实践)

    概念 主从复制,是指建立一个和主数据库完全一样的数据库环境(称为从数据库),并将主库的操作行为进行复制的过程:将主数据库的DDL和DML的操作日志同步到从数据库上, 然后在从数据库上对这些日志进行重新 ...

  5. 🏆【JVM技术专区】「编译技术专题」带你彻底认识Java的编译技术

    前提概要 Java的class字节码并不是机器语言,要想让机器能够执行,还需要把字节码翻译成机器指令.这个过程是Java虚拟机做的,这个过程也叫编译.是更深层次的编译. 在编译原理中,把源代码翻译成机 ...

  6. 8.23考试总结(NOIP模拟46)[数数·数树·鼠树·ckw的树]

    T1 数数 解题思路 大概是一个签到题的感觉...(但是 pyt 并没有签上) 第一题当然可以找规律,但是咱们还是老老实实搞正解吧... 先从小到大拍个序,这样可以保证 \(a_l<a_r\) ...

  7. P5038 奇怪的游戏

    题目询问了一个不能确定的时间,所以显然做法中要包含一个二分答案. 我们将整张图分为黑白点两种,黑点旁边的点就是白点,白点旁边的点就是黑点,想一下就能知道,每次操作会使黑白点的数字各加一,而我们的目的就 ...

  8. Docker创建seafile搭建私有云

    docker-compose.yml version: '2.0' services: db: image: mariadb:10.1 container_name: seafile-mysql en ...

  9. C#多线程---Mutex类实现线程同步

    一.例子 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 ...

  10. 【springcloud】模拟RPC调用(Feign)

    转自:https://blog.csdn.net/pengjunlee/article/details/86615408 Feign简介 Feign是一个声明式的Web Service客户端,它能够让 ...