zoukankan      html  css  js  c++  java
  • docker概念之网络实现

    docker概念之网络实现

    1. 基本原理

    docker中的网络接口默认都是虚拟接口。虚拟接口转发效率极高,因为Linux 通过在内核中进行数据复制来实现虚拟接口之间的数据转发,对于本地系统和容器内系统来看,虚拟接口跟一个正常的以太网卡相比并无区别,只是它的速度要快得多。Docker 容器网络在本地主机和容器内分别创建一个虚拟接口 veth 并连通(这样的一对虚拟接口叫做 veth pair)。

    2. 网络创建过程

    一般情况下, Docker 建一个容器的时候,会具体执行如下操作:
    1)建一对虚拟接口,分别放到本地主机和新容器的命名空间中;
    2)本地主机虚拟接口连接到默认 docker0 网桥或指定网桥上,并具有一个以 veth 开头的唯一名字,如 veth1234;
    3)容器一端的虚拟接口将放到新创建的容器中,并修改名字作为 eth0 这个接口只在容器的命名空间可见;
    4)从网桥可用地址段中获取一个空闲地址分配给容器的 eth0 (例如 172.17.0.2/16 ),并配置默认路由网关为 docker0 网卡的 docker0 IP 地址,容器就可以使用它所能看到的 eth0 虚拟网卡来连接其他容器和访问外部网络。

    自定义网络:

    • --net=bridge: 默认值,在 Docker 网桥 dockerO 上为容器创建新的网络栈;
    • --net=none: 不进行网络配置,之后,用户可以自行配置
    • --net=container:NAME_or_ID: 让 Docker 将新建容器的进程放到一个已存在容器的网络栈中,新容器进程有自己的文件系统、进程列表和资源限制,但会和已存
      在的容器共享IP地址和端口等网络资源,两者进程可以直接通过 lo 回环接口通信;
    • --net=host: 容器使用本地主机的网络,它拥有完全的本地主机接口访问权限。容器进程跟主机其他 root 进程一样可以打开低范围的端口,可以访问本地网络
      服务,还可以让容器做一些影响整个主机系统的事情, 比如重启主机。如果进一步使用--privileged=true参数,容器甚至会被允许直接配置主机的网络栈;
    • --net=user_defined_network: 用户自行用 network 相关命令创建一个网络,之后将容器连接到指定的己创 网络上去。
    加油,你们是最棒的!
  • 相关阅读:
    位运算的简单简要
    Date()函数详细参数
    Android画图之Matrix(二)
    图像渐变特效的简单介绍
    Android MotionEvent中getX()和getRawX()的区别
    Timer计时器
    android中raw文件夹和asset文件夹的共同点和区别
    Selector、shape详解
    select语句后以for update结尾
    Openfire(原来的Wildfire) 在 Web 2.0 中的作用
  • 原文地址:https://www.cnblogs.com/Wshile/p/12768160.html
Copyright © 2011-2022 走看看