• Docker network


    1、docker容器的网络模式

    docker在安装的时候就会配置一个docker0的linux bridge的方式,在不使用 --network时, 这也是docker默认使用的方式。docker有三种常见的网络模式,分别是none,bridge,host

    ➜  ~ docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    3ea8a3ad1a61        bridge              bridge              local
    9043e76f315a        host                host                local
    eba2113c67eb        none                null                local
    

    1.1、docker network command

    ➜  ~ docker network --help
    
    Usage:	docker network COMMAND
    
    Manage networks
    
    Options:
          --help   Print usage
    
    Commands:
      connect     把一个容器连接到网络
      create       创建一个网络
      disconnect  从网络中中断容器的连接
      inspect     在一个或多个网络上显示详细信息
      ls          列出网络
      prune      移除所有未使用的网络
      rm          移除一个或多个网络
    

    docker network

    1.2、docker none network

    ➜  ~ docker run -it --network=none busybox
    / # ifconfig
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    
    / # 
    

    1.3、docker host network

    host网络模式,其实就是借用的docker host上的网卡信息

    ➜  ~ docker run -it --network=host busybox
    / # ifconfig
    docker0   Link encap:Ethernet  HWaddr 02:42:D7:FD:FF:0D  
              inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
              inet6 addr: fe80::42:d7ff:fefd:ff0d/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:119 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:0 (0.0 B)  TX bytes:13785 (13.4 KiB)
    
    enp2s0    Link encap:Ethernet  HWaddr 20:89:84:F1:62:2D  
              UP BROADCAST MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
              Interrupt:16 
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:2800 errors:0 dropped:0 overruns:0 frame:0
              TX packets:2800 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:262620 (256.4 KiB)  TX bytes:262620 (256.4 KiB)
    
    veth4d23dcf Link encap:Ethernet  HWaddr A6:25:A8:AE:A8:26  
              inet6 addr: fe80::a425:a8ff:feae:a826/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:87 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:0 (0.0 B)  TX bytes:9515 (9.2 KiB)
    
    wlp3s0    Link encap:Ethernet  HWaddr 48:D2:24:4C:07:81  
              inet addr:192.168.1.28  Bcast:192.168.1.255  Mask:255.255.255.0
              inet6 addr: fe80::e61c:9373:321e:dc31/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:60055 errors:0 dropped:0 overruns:0 frame:0
              TX packets:41972 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:65692420 (62.6 MiB)  TX bytes:5900097 (5.6 MiB)
    / # 
    

    docker network网络的优缺点:

    • 好处
      • docker host网络的性能比较好
      • docker host网络传输效率高
    • 缺点
      • docker host的主机上使用的端口,容器不能继续使用

    1.4、docker bridge network

    brctl show 将会显示docker0上的网络设备,如果有容器运行的是bridge的网络模式,就会把虚拟网卡挂在docker0上,这里应该注意的是:容器内的虚拟网卡与docker0上挂的虚拟网卡是成对存在的pair

    安装brctl工具

    apt-get install bridge-utils -y
    

    查看容器的网络地址

    ➜  ~ docker run -it --network=bridge busybox
    / # ifconfig
    eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:03  
              inet addr:172.17.0.3  Bcast:0.0.0.0  Mask:255.255.0.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:12 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:1459 (1.4 KiB)  TX bytes:0 (0.0 B)
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    

    1.5 docker网络模式之用户自定义网络

    docker提供三种自定义的网络驱动

    • bridge
    • overlay
    • macvlan

    1.5.1 创建自定义bridge网络

    docker network create --driver bridge bridge1
    brctl show
    docker network create --driver bridge --subnet 172.17.16.0/24 --dateway 172.17.16.1 bridge2
    docker run -it --network=bridge2 busybox
    ----ifconfig
    docker run -it --network=bridge2 --ip=172.17.16.3 busybox
    

    2、docker容器之间的互联互通

    docker容器之间的互联互通基于三种模式:IP,Docker DNS,joined

    2.1 基于IP方式的互联互通

    docker run -it --network=bridge2 --ip=172.17.16.4 busybox
    docker run -it --network=bridge2 --ip=172.17.16.5 busybox
    ping -c 3 172.17.16.4(from 172.17.16.5)
    

    2.2 基于Docker DNS之间的互联互通

    注意:docker dns只能使用在用户自定的网络模式下运行的容器

    docker run -it --network=bridge2 --name=busyboxone busybox
    docker run -it --network=bridge2 --name=busyboxtwo busybox
    ping -c 3 busyboxone(form busyboxtwo)
    

    2.3 基于join方式的互联互通

    仔细观察此种模式下的网络配置信息完全一样,是通过127.0.0.1进行通信

    docker run -it --name web1 httpd
    docker run -it --network=container:web1 httpd
    

    3、docker容器与外部是如何进行互相访问的

    3.1 docker容器访问外部

    docker默认的网络是bridge网络,因此只要docker host可以连接互联网,那么容器就是可以联网的,但是容器访问外部网络的过程是如何实现的呢? 容器在向外部发送请求时,docker在NAT上将容器的源地址改为了docker host的地址,因此访问外部的源地址就变成了docker host的地址

    ip r
    iptables -t NAT -S
    tcpdump -i docker0 -n icmp
    tcpdump -i ens33 -n icmp
    

    3.2 外部是如何访问docker容器的

    容器为了响应外部的访问请求,把容器自己的内部端口暴露给docker host,于是和docker host进行了 端口之间的映射,外部进行访问容器就会变成访问docker host上的一个端口,当docker-proxy进行发现有访问docker host上的容器映射的端口时,就会自动转发给容器,这就是外部访问容器的一个过程;

  • 相关阅读:
    分布式服务调用链路追踪——方案选型
    分布式服务调用链路追踪——Skywalking
    JVM——jhat命令
    JVM——jmap命令
    JVM——jstack命令
    JVM——jstat命令
    JVM——jinfo命令
    针对input添加padding后宽度变化问题
    HTTPS实现原理
    selenium异常捕获
  • 原文地址:https://www.cnblogs.com/xuelong3/p/7773161.html
Copyright © 2020-2023  润新知