docker利用namespaces和cgroups实现了应用隔离和资源控制,那么网络层优点如何实现的呢?是直接使用宿主机的网卡设备,仍是独立创造出本身的网络设备?以及容器如何与外界通讯,下面咱们经过简单的说明以及示例,讨论下单机模式下docker的网络模式。docker
docker单机模式下,主要有四种网络模式,能够在建立容器的时候经过--network参数指定,这四种网络模式以下:网络
一、--network=bridge:网桥模式,这是docker默认的网络模式,这种模式下,容器建立的时候,会生成一个独立的网卡设备eth0,可是这个网卡设备没法直接同外部通讯,须要经过网络设备对veth,将容器内的eth0与docker0网桥连通,而后docker0与宿主机的eth0经过转发绑定端口映射,实现容器内部同外部的通讯。spa
容器建立语法:docker run -d --name container_name --network bridge -p xxx:xxx image_name,因为是默认的,因此不指定--network参数默认就是这种模式3d
示意图以下:blog
二、--network=container:这种模式,docker在建立容器的时候会指定使用已经存在的容器的网卡设备做为新建容器的网卡设备。这中模式须要注意,因为是多个容器共用同一个eth0,因此须要注意端口冲突问题。资源
容器建立语法:docker run -d --name container_name --network container:已经存在的容器名称 -p xxx:xxx image_name集群
示意图以下:容器
三、--network=host:这种模式,建立容器的时候,不会新建网卡设备,而是使用宿主机的网卡设备eth0,在这种模式下,容器直接使用宿主机的IP,一样要注意端口的冲突问题。高可用
容器建立语法:docker run -d --name container_name --network host -p xxx:xxx image_namenetwork
示意图以下:
四、--network=none:这种模式下,容器没法与外界通讯,只能使用容器内部的回环(127.0.0.1)在容器内部通讯。
容器建立语法:docker run -d --name container_name --network none image_name
示意图以下:
以上是单机模式下docker的网络模式,在实际使用中,为了高可用,都是在集群模式下,相关的网络模式将在后面继续讨论。不足之处,欢迎指正。