zoukankan      html  css  js  c++  java
  • Docker网络的基本功能操作示例

    一、Docker常用的四种网络模型

    1.第一种:使用网络名称空间,但不设置任何网络设备

      这种模型中只有lo接口,是一个封闭式的容器,不能与外界进行通信。设置网络模型需要使用 --network 选项来设置,如果不指定类型,默认是第二种模型:

    ~]# docker container run -it --network none busybox:latest 
    / # ifconfig -a
    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:1 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

    2.第二种:桥接式网络模型。

      这种模型是将容器与宿主机上的docker0网络接口相连,可实现容器对外通信。

    ~]# docker container run -it --network bridge busybox:latest 
    / # hostname 
    f9a1612f44bd
    / # ifconfig 
    eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02  
              inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:8 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:648 (648.0 B)  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:1 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

      此时的IP地址就多了宿主机上docker0的地址,有时可能我们会需要使用主机名来进行通信,所以还可以在启动容器时定义主机名(若不是先指定,默认主机名是容器id)。

    ~]# docker container run -it --network bridge -h box.docker.com busybox:latest 
    / # hostname 
    box.docker.com
    / # cat /etc/hosts #查看本地解析规则
    127.0.0.1    localhost
    ::1    localhost ip6-localhost ip6-loopback
    fe00::0    ip6-localnet
    ff00::0    ip6-mcastprefix
    ff02::1    ip6-allnodes
    ff02::2    ip6-allrouters
    172.17.0.2    box.docker.com box #已被加入到本地解析规则中
    / # cat /etc/resolv.conf #查看DNS服务器指向
    # Generated by NetworkManager
    search example.com
    nameserver 192.168.29.2 #自动指向宿主机的DNS服务器
    / # nslookup -type=A www.baidu.com #查看是否能正常解析
    Server:        192.168.29.2
    Address:    192.168.29.2:53
    
    Non-authoritative answer:
    www.baidu.com    canonical name = www.a.shifen.com
    Name:    www.a.shifen.com
    Address: 61.135.169.125
    Name:    www.a.shifen.com
    Address: 61.135.169.121

      这种模型中默认指向的DNS服务器是宿主机指向的DNS,当然也可以用 --dns 自定义指定DNS:

    ~]# docker container run -it --network bridge -h box.docker.com --dns 114.114.114.114  busybox:latest 
    / # cat /etc/resolv.conf 
    search example.com
    nameserver 114.114.114.114

      使用 --add-hosts 可以注入host解析规则:

    ~]# docker container run -it --network bridge -h box.docker.com --add-host www.ready.com:1.1.1.1 --dns 114.114.114.114  busybox:latest 
    / # cat /etc/hosts
    127.0.0.1    localhost
    ::1    localhost ip6-localhost ip6-loopback
    fe00::0    ip6-localnet
    ff00::0    ip6-mcastprefix
    ff02::1    ip6-allnodes
    ff02::2    ip6-allrouters
    1.1.1.1    www.ready.com
    172.17.0.2    box.docker.com box

       使用 -p 选项将容器“暴露”到网络上去,使外部能够访问容器:

    -p <containerPort> 将指定容器端口映射到宿主机所有地址的一个动态端口。
    -p <hostPort>:<containerPort> 将指定的容器端口映射至指定的宿主机端口。
    -p <ip>:<hostPort>:<containerPort> 将指定的容器端口映射至主机指定IP的指定端口。

      "动态端口"指随机端口,具体可使用 docker port 命令查看。

    ~]# docker container run --name test1 --network bridge -p 80 --rm ready/httpd:v0.2

      查看被映射到了哪个端口:

    ~]# docker port test1 
    80/tcp -> 0.0.0.0:32768

      在物理机上访问容器宿主机的地址+映射IP:

    3.第三种模型:联盟容器模型。

      所谓联盟容器模式就是指使两个容器使用共同的名称空间,比如在一般情况下,启动两个容器时,会被分别分配在不同的名称空间中使容器之间相互隔离,但在一些场景中可能会需要两个容器使用相同的名称空间,这时就可以使用 --network container:<容器名> 将两个容器划分为一个共享的名称空间。要注意的是这里共享的仅仅只是网口名称空间,文件系统等还是相互隔离的。

      若要使容器共享宿主机的网络名称空间,则可以使用 --network host ,可以看到容器中的IP地址和宿主机上的IP一致了:

    ~]# docker container run --name box1 -it --network host --rm busybox:latest 
    / # ifconfig 
    docker0   Link encap:Ethernet  HWaddr 02:42:19:55:5A:6A  
              inet addr:172.17.0.1  Bcast:172.17.255.255  Mask:255.255.0.0
              inet6 addr: fe80::42:19ff:fe55:5a6a/64 Scope:Link
              UP BROADCAST MULTICAST  MTU:1500  Metric:1
              RX packets:45 errors:0 dropped:0 overruns:0 frame:0
              TX packets:55 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:3432 (3.3 KiB)  TX bytes:5494 (5.3 KiB)
    
    ens33     Link encap:Ethernet  HWaddr 00:0C:29:A7:59:CC  
              inet addr:192.168.29.101  Bcast:192.168.29.255  Mask:255.255.255.0
              inet6 addr: fe80::7c47:ae3e:a9b4:fe7c/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:8392 errors:0 dropped:0 overruns:0 frame:0
              TX packets:3438 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:626540 (611.8 KiB)  TX bytes:389180 (380.0 KiB)

     二、修改默认docker0的地址以及创建网络接口

      可在docker的配置文件中修改,路径为: /etc/docker/daemon.json 

    {
    "bip": "192.168.1.5/24", #核心选项为bip,即bridge ip之意,用于指定docker0桥自身的IP地址;其它选项可通过此地址计算得出。
    "fixed-cidr": "10.20.0.0/16",
    "fixed-cidr-v6": "2001:db8::/64",
    "mtu": 1500,
    "default-gateway": "10.20.1.1",
    "default-gateway-v6": "2001:db8:abcd::89",
    "dns": ["10.20.1.2","10.20.1.3"]
    }

       在容器中创建新的网络接口可使用 docker network create 命令。

  • 相关阅读:
    字符编码相关
    函数之形参与实参
    文件操作模式
    函数对象,名称空间,作用域,和闭包
    吴裕雄天生自然SPRINGBOOT开发实战处理'spring.datasource.url' is not specified and no embedded datasource could be autoconfigured
    吴裕雄天生自然SPRINGBOOT开发实战处理XXXX that could not be found.
    吴裕雄天生自然SPRINGBOOT开发实战SpringBoot HTML表单登录
    吴裕雄天生自然SPRINGBOOT开发实战SpringBoot REST示例
    吴裕雄天生自然SpringBoot开发实战学习笔记处理 Could not write metadata for '/Servers'.metadata\.plugins\org.eclipse.core.resources\.projects\Servers\.markers.snap (系统找不到指定的路径。)
    吴裕雄天生自然SPRINGBOOT开发实战SpringBoot Tomcat部署
  • 原文地址:https://www.cnblogs.com/readygood/p/10294633.html
Copyright © 2011-2022 走看看