docker网络模式基础


1. 网络基础

1.1 NAT模式

NAT模式是(Network address Transfer)的缩写,其具体解释为:

虚拟机服务为我们建立一个私有网段,这个私有网段用来分配IP地址,然后再借助于主机的公网IP与外部互联网通信。

1.2 Bridge模式

桥接模式:就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥接的作用下,类似于把物理主机作为一个以太网交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中。

根据以太网交换机的性质,由于并非主线式的架构,而是通信线路互相独立的架构,所有桥接下的网卡之间都是交换模式的。

相互可以全双工工作而不干扰。在桥接模式下,虚拟机IP地址需要与主机在同一个网段下,如果需要联网,则网关DNS需要与主机网卡一致。

1.3 Host-only模式

Host-only模式其实就是NAT模式去除了虚拟NAT设备,然后使用VMware Adapter VMnet1虚拟网卡连接虚拟交换机来与虚拟机通信的。这种模式将虚拟机与外网分隔开,使得虚拟机成为一个独立的系统,只与主机相互通信。

2.虚拟网桥

当在宿主机上启动docker的时候,会自动产生一个虚拟网桥

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:52:17:12:0c  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

这个虚拟网桥的作用是作为桥梁使得宿主机与容器之间能够互相通信,容器与容器之间能够互相通信。

[root@localhost ~]# docker network ls
NETWORK ID     NAME       DRIVER    SCOPE
bf7fbd41d9f3   bridge     bridge    local
798fd178cec7   host       host      local
923871e4f1ad   none       null      local
195209f4269b   test-net   bridge    local

查看当前docker内的网络

网络模式 简介
bridge 为每一个容器分配、设置IP等,并将容器连接到一个docker0,虚拟网桥默认为该模式
host 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口
none 容器有独立的network namespace,但并没有对其进行任何的网络设置,如分配veth pair和网桥连接,IP等
container 新创建的容器不会创建自己的网卡和配置自己的IP,而是和一个指定的容器共享IP,端口范围等

3.底层IP和容器映射

3.1 Docker-Bridge

Docker服务默认会创建一个docker0网桥(其上有一个docker0内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或者虚拟网卡,这就将所有容器和本地主机都放在同一个物理网络。Docker默认指定了docker0接口和子网掩码,让主机和容器之间可以通过网桥相互通信。

整个宿主机的网桥模式都是docker0,类似于一个交换机有一堆接口,每个接口叫做veth,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此连通。

每个容器实例内部也有一块网卡,每个接口叫做eth0

docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对,一一匹配

通过上述,将宿主机上的所有容器都连接到这个内部网络上,两个容器在同一个网络下,会从这个网关下各自拿到分配的ip,此时两个容器的网络是互通的。

Docker使用的是Linux桥接,在宿主机虚拟出了一个Docker容器网桥,Docker启动的时候会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关,因为在同一宿主机中的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信

docker run的时候,如果没有指定network的话,默认使用网桥模式就是bridge,使用的就是docker0

3.2 Docker-host

host的方式可以实现直接使用宿主机的IP地址与外界进行通信,不需要进行额外的NAT转换

在这个模式下,容器不会获得一个独立的network-space,而是和宿主机公用一个network-namespace。容器将不会虚拟出自己的网卡而是使用宿主机的IP和端口。

3.3 Docker-none

none:禁用了网络功能,需要配置才能启动,初始时只有lo标识,也就是只有127.0.0.1这个本地回环测试

3.4 Docker-container

新建的容器和已经存在的一个容器共享一个网络ip地址而不是和宿主机共享,新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP,端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。


文章作者: 穿山甲
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 穿山甲 !
  目录