003-docker-单宿主机下的网络模式
docker利用namespaces和cgroups实现了应用隔离和资源控制,那么网络层优势如何实现的呢?是直接使用宿主机的网卡设备,还是独立创造出自己的网络设备?以及容器如何与外界通信,下面我们通过简单的说明以及示例,讨论下单机模式下docker的网络模式。
docker单机模式下,主要有四种网络模式,可以在创建容器的时候通过--network参数指定,这四种网络模式如下:
1、--network=bridge:网桥模式,这是docker默认的网络模式,这种模式下,容器创建的时候,会生成一个独立的网卡设备eth0,但是这个网卡设备无法直接同外部通信,需要通过网络设备对veth,将容器内的eth0与docker0网桥连通,然后docker0与宿主机的eth0通过转发绑定端口映射,实现容器内部同外部的通信。
容器创建语法:docker run -d --name container_name --network bridge -p xxx:xxx image_name,由于是默认的,所以不指定--network参数默认就是这种模式
示意图如下:
2、--network=container:这种模式,docker在创建容器的时候会指定使用已经存在的容器的网卡设备作为新建容器的网卡设备。这中模式需要注意,由于是多个容器共用同一个eth0,所以需要注意端口冲突问题。
容器创建语法:docker run -d --name container_name --network container:已经存在的容器名称 -p xxx:xxx image_name
示意图如下:
3、--network=host:这种模式,创建容器的时候,不会新建网卡设备,而是使用宿主机的网卡设备eth0,在这种模式下,容器直接使用宿主机的IP,同样要注意端口的冲突问题。
容器创建语法:docker run -d --name container_name --network host -p xxx:xxx image_name
示意图如下:
4、--network=none:这种模式下,容器无法与外界通信,只能使用容器内部的回环(127.0.0.1)在容器内部通信。
容器创建语法:docker run -d --name container_name --network none image_name
示意图如下:
以上是单机模式下docker的网络模式