您的位置:首页 > 运维架构 > Docker

docker网络模式

2020-01-14 23:42 169 查看

一、docker的四种网络模式

1.docker的四种网络模式如下:

  • Bridge container桥接网络模式
  • Host(open) container开放式网络模式
  • Container(join)container联合挂载式网络模式,是host网络模式的延伸
    -None(close) container封闭式网络模式
    2.可以通过docker network命令来查看。
xqkang@xqkang:~$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
75e6b4c4d091        bridge              bridge              local
20956d90618b        host                host                local
ebd75144c2ac        none                null                local

3.docker run --network命令可以指定使用网络模式

二、bridge网络模式

2.1介绍:

当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上,所以有默认地址172.17.0.0/16的地址。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。

qkang@xqkang:~$ brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.024264e53d7b	no		veth738f8c9
vethfa1c8d1
virbr0		8000.525400206bf8	yes		virbr0-nic

bridge模式是docker的默认网络模式,不写–net参数,就是bridge模式。使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。

xqkang@xqkang:~$ sudo iptables -t nat -vnL
[sudo] xqkang 的密码:
Chain PREROUTING (policy ACCEPT 84579 packets, 6260K bytes)
pkts bytes target     prot opt in     out     source               destination
24  2166 DOCKER     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT 33109 packets, 3014K bytes)
pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 7429 packets, 535K bytes)
pkts bytes target     prot opt in     out     source               destination
0     0 DOCKER     all  --  *      *       0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT 7427 packets, 535K bytes)
pkts bytes target     prot opt in     out     source               destination
4   220 MASQUERADE  all  --  *      !docker0  172.17.0.0/16        0.0.0.0/0
41  3836 RETURN     all  --  *      *       192.168.122.0/24     224.0.0.0/24
0     0 RETURN     all  --  *      *       192.168.122.0/24     255.255.255.255
0     0 MASQUERADE  tcp  --  *      *       192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
0     0 MASQUERADE  udp  --  *      *       192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
0     0 MASQUERADE  all  --  *      *       192.168.122.0/24    !192.168.122.0/24
0     0 MASQUERADE  tcp  --  *      *       172.17.0.5           172.17.0.5           tcp dpt:443
0     0 MASQUERADE  tcp  --  *      *       172.17.0.5           172.17.0.5           tcp dpt:80
0     0 MASQUERADE  tcp  --  *      *       172.17.0.5           172.17.0.5           tcp dpt:22

Chain DOCKER (2 references)
pkts bytes target     prot opt in     out     source               destination
0     0 RETURN     all  --  docker0 *       0.0.0.0/0            0.0.0.0/0
0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443 to:172.17.0.5:443
0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:172.17.0.5:80
0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22 to:172.17.0.5:22

2.2 bridge模式示意图
2.3演示
bridge网络模式;–network不指定,默认也是bridge模式

xqkang@xqkang:~$ docker run --name b1 -it --network bridge --rm busybox:latest
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
322973677ef5: Pull complete
Digest: sha256:1828edd60c5efd34b2bf5dd3282ec0cc04d47b2ff9caa0b6d4f07a21d1c08084
Status: Downloaded newer image for busybox:latest
/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:04
inet addr:172.17.0.4  Bcast:172.17.255.255  Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:20 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:2520 (2.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)

/ # route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.17.0.1      0.0.0.0         UG    0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0
/ # ping 192.168.10.46
PING 192.168.10.46 (192.168.10.46): 56 data bytes
64 bytes from 192.168.10.46: seq=0 ttl=64 time=0.217 ms
64 bytes from 192.168.10.46: seq=1 ttl=64 time=0.111 ms
^C
--- 192.168.10.46 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.111/0.164/0.217 ms

三、host网络模式

3.1介绍:
如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

3.2Host模式示意图
3.3演示

xqkang@xqkang:~$ docker run --name b2 -it --network host --rm busybox:latest
/ # ifconfig
docker0   Link encap:Ethernet  HWaddr 02:42:13:08:20:09
inet addr:172.17.0.1  Bcast:172.17.255.255  Mask:255.255.0.0
inet6 addr: fe80::42:13ff:fe08:2009/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:4 errors:0 dropped:0 overruns:0 frame:0
TX packets:71 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:224 (224.0 B)  TX bytes:7821 (7.6 KiB)

enp2s0    Link encap:Ethernet  HWaddr 4C:ED:FB:3F:13:04
inet addr:192.168.10.46  Bcast:192.168.10.255  Mask:255.255.255.0
inet6 addr: fe80::c2a5:497d:880f:329/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:50427 errors:0 dropped:0 overruns:0 frame:0
TX packets:29474 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:53845467 (51.3 MiB)  TX bytes:2857759 (2.7 MiB)

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:953 errors:0 dropped:0 overruns:0 frame:0
TX packets:953 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:103767 (101.3 KiB)  TX bytes:103767 (101.3 KiB)

veth199ff09 Link encap:Ethernet  HWaddr 56:60:D9:DC:B6:0C
inet6 addr: fe80::5460:d9ff:fedc:b60c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:102 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B)  TX bytes:11388 (11.1 KiB)

vethcfc665b Link encap:Ethernet  HWaddr 7E:C3:D1:3C:0A:45
inet6 addr: fe80::7cc3:d1ff:fe3c:a45/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:101 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B)  TX bytes:11330 (11.0 KiB)

virbr0    Link encap:Ethernet  HWaddr 52:54:00:20:6B:F8
inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
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)

四、Container 网络模式

4.1 介绍  
这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。

4.2 Container模式示意图

4.3 演示

(1)在一个终端,使用bridge网络模式启动容器b1

xqkang@xqkang:~$  docker run --name b1 -it --rm busybox:latest
/ # ifconfig (b1此处IP为172.17.04)
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:04
inet addr:172.17.0.4  Bcast:172.17.255.255  Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:19 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:2450 (2.3 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)

/ # echo "hello world b1" > /tmp/index.html
/ #  httpd -h /tmp/  (在b1上启动httpd服务)
/ # netstat -nutl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 :::80                   :::*                    LISTEN
/ #

(2)在另一个终端使用Container 网络模式创建容器b2

xqkang@xqkang:~$ docker run --name b2 -it --network container:b1 --rm busybox:latest
/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:04
inet addr:172.17.0.4  Bcast:172.17.255.255  Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:27 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:3158 (3.0 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)

/ # wget -O - -q 127.0.0.1 ( b1启动的httpd服务,在b2上直接访问)
hello world b1
/ # ls /tmp/ (但是文件系统并不共享,只共享网络)
/ #

五、None 网络模式

5.1 介绍  
使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息,只有lo 网络接口。需要我们自己为Docker容器添加网卡、配置IP等。  不参与网络通信,运行于此类容器中的进程仅能访问本地回环接口;仅适用于进程无须网络通信的场景中,例如:备份、进程诊断及各种离线任务等。

5.2 Node模式示意图
5.3演示

xqkang@xqkang:~$ docker run --name b1 -it --network none --rm busybox:latest
/ # 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)

/ # route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
/ #
  • 点赞
  • 收藏
  • 分享
  • 文章举报
小二来碗面 发布了42 篇原创文章 · 获赞 0 · 访问量 748 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: