zoukankan      html  css  js  c++  java
  • 跨 Docker 宿主机 macvlan 类型

    跨 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

  • 相关阅读:
    玩转VIM编辑器额外技巧
    玩转VIM编辑器自动补全
    玩转VIM编辑器vim附加特性
    Silverlight 4 Tools中文版下载
    Silverlight4 入门GetStart
    Silverlight SNS项目
    Silverlight VS2010下的RIA开发活动整站
    Silverlight4(Visual Studio 2010下的RIA开发)技术交流会圆满结束
    SYSTECH的界面设计器
    实现自定义Silverlight的安装界面
  • 原文地址:https://www.cnblogs.com/battor/p/docker_network_macvlan.html
Copyright © 2011-2022 走看看