• Docker基础内容之网络基础


    网络命名空间基本原理

    单机版多容器实例网络交互原理

    • 在宿主机上面打开两张网卡eth0与eth1,打通两张网卡的链路
    • 在test1上面启动一个veth网卡,创建一个namespace;并桥接到eth0上面
    • 在test2上面启动一个veth网卡,创建一个namespace;并桥接到eth1上面
    • 对test1与test2进行地址配置
    • 测试网络交互情况

    模拟实验

    添加两个namespace

    [root@host-2 ~]# ip netns add test1
    [root@host-2 ~]# ip netns add test2

    查看添加状况

    [root@host-2 ~]# ip netns list
    test2
    test1
    
    [root@host-2 ~]# ip netns exec test1 ip addr
    1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    [root@host-2 ~]# ip netns exec test2 ip addr
    1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    
        PS:这里可以看到namespace还没有mac地址

    添加一对虚拟网卡

    [root@host-2 ~]# ip link add veth-test1 type veth peer name veth-test2

    对虚拟网卡与namespace做捆绑

    [root@host-2 ~]# ip link set veth-test1 netns test1
    [root@host-2 ~]# ip link set veth-test2 netns test2

    对namespace中的虚拟网卡做地址设定,并激活

    [root@host-2 ~]# ip netns exec test1 ip addr add 10.1.1.100/24 dev veth-test1
    [root@host-2 ~]# ip netns exec test2 ip addr add 10.1.1.200/24 dev veth-test2
    [root@host-2 ~]# ip netns exec test1 ip link set dev veth-test1 up
    [root@host-2 ~]# ip netns exec test2 ip link set dev veth-test2 up

    查看设置的状况

    [root@host-2 ~]# ip netns exec test1 ip addr
    1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    9: veth-test1@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether f2:c2:eb:2b:08:d6 brd ff:ff:ff:ff:ff:ff link-netnsid 1
        inet 10.1.1.100/24 scope global veth-test1
           valid_lft forever preferred_lft forever
        inet6 fe80::f0c2:ebff:fe2b:8d6/64 scope link 
           valid_lft forever preferred_lft forever
           
    [root@host-2 ~]# ip netns exec test2 ip addr
    1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    8: veth-test2@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether 5e:06:df:2b:3d:fe brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 10.1.1.200/24 scope global veth-test2
           valid_lft forever preferred_lft forever
        inet6 fe80::5c06:dfff:fe2b:3dfe/64 scope link 
           valid_lft forever preferred_lft forever

    测试实验结果

    [root@host-2 ~]# ip netns exec test1 ping 10.1.1.200
    PING 10.1.1.200 (10.1.1.200) 56(84) bytes of data.
    64 bytes from 10.1.1.200: icmp_seq=1 ttl=64 time=0.141 ms
    ^C
    --- 10.1.1.200 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.141/0.141/0.141/0.000 ms

    网络基础之桥接原理

      如上图所示,用户通过docker创建的容器,通过namespace桥接到宿主机的虚拟网卡,虚拟网卡会和docker的桥接网卡做一个绑定,这样docker容器通过namespace转到虚拟网卡,虚拟网卡通过桥接的方式与其他设备进行通信。需要注意,每一个docker容器都会产生一个相关的namespace,同理也会产生一个相关的虚拟网卡在宿主机中;相关命令如下:

    查看docker相关的网卡
    docker network ls
    
    查看网关的详情
    docker network inspect dockerid

    网络基础之link

    相关命令

    创建test2的时候,添加一个test1的dns反向解析记录;test1必须事先创建好,如不存在则会报错。
    docker run -itd --name test2 --link test1 centos
    
    创建test3的时候,指定网络信息。
    docker run -itd --name test3 --network my-bridge
    
    创建一个docker网络
    docker network create -d bridge my-bridge
    PS:-d 参数指定 Docker 网络类型,有 bridge overlay。其中 overlay 网络类型用于 Swarm mode 对指定的容器添加额外的网卡,这样就可以不使用link的方式来连接两个容器的信息了 docker network connect my-bridge test2

    docker网络模式有四种,具体详情如下:

    • 第一种:桥接模式,也是默认模式;容器与服务器外部通过桥接网卡进行通信,通过桥接网卡做NAT来进行实现;
    • 第二种:自定义模式,自己可以定义相应的网络环境,并且可以对指定网卡做相应的操作
    • 第三种:host模式,相当于网络中的DMZ转发
    • 第四种:none模式,无namespace模式,相当于没有网卡

    网络基础之端口映射

    docker run -itd --name web -p 80:80 nginx:创建一个nginx的web服务,并且将web服务的端口映射到宿主机;注意:可以使用多个-p来指定端口范围,从而达到范围映射

    参考地址:https://li-sen.github.io/2018/12/19/docker%E7%BD%91%E7%BB%9C%E8%AF%A6%E8%A7%A3/

  • 相关阅读:
    文摘
    Maximal Square leetcode
    Majority Element II
    Merge k Sorted Lists leetcode
    学习方法-暗时间
    4sum leetcode
    valid parentheses
    两道考研算法设计题- 2010 2013
    regular expression matching DP
    valid sudoku leetcode
  • 原文地址:https://www.cnblogs.com/guge-94/p/11082108.html
Copyright © 2020-2023  润新知