理解Docker的网络模式

容器的网络,大的方向,分为两大类:
A.单台宿主下,容器网络环境的构建
B.多台宿主组成的宿主集群的网络环境


单宿主模式下:
Docker提供了,3种默认的网络模式,分别是none,bridge,host
查看本机上拥有的网络模式:
docker image ls
docker默认这3种网络模式,如果需要将docker容器使用某种网络模式启动,指定
--network={networkname}
eg:
docker run -dit --name 'test_network_restart' --network=bridge centos /bin/bash

bridge 网络的代表就是docker0网桥的出现(一般伴随着docker的安装),如果不特殊指定, 启动的容器默认连接到bridge网络。

none network 会将容器置于一个特定的网络栈中,该容器缺乏网络接口,如果,exec,或者attach,接入到容器中, ifconfig只能看到lo(回环网络接口)

host network,将会把容器增加到主机的网络栈中,在容器中,ifconfig,看到的,完全与宿主的网络栈相同

默认bridge网络的详细信息:

docker network inspect bridge

[ { "Name": "bridge", "Id": "f7ab26d71dbd6f557852c7156ae0574bbf62c42f539b50c8ebde0f728a253b6f", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ { "Subnet": "172.17.0.1/16", "Gateway": "172.17.0.1" } ] }, "Containers": {}, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "9001" } }]

Docker引擎会在该网络下创建子网,网关。如果在该网络下添加容器,将会在Containers中增加容 器的网卡信息
容器在默认的网络(bridge)下可以通过Ip进行互相之间的交互,Docker在默认的bridge网络下不支持服务的自发现,如果需要在默认的bridge网络下互相交互,必须使用docker run --link来连接不同的容器
默认的docker0 bridge网络支持使用端口映射,以及docker run ---link 来连接在docker0网络下的容器,这些技术,通常比较笨重并且容易出错。有一种更好的方法,就是创建自己的bridge网络。

用户自定义网络:

用户可以使用自己定义的二层网络来对容器之间进行隔离。Docker提供了几种默认的网络驱动(Network drivers)来创建这些网络。用户可以创建bridge网络,overlay网络,或者是MACVLAN 网络。用户甚至可以创建自己的网络插件或者远程网络。
用户可以将容器置于不同的网络下。容器只能与同网络下的容器之间进行交互,而不能跨网络。如果一个容器,接入了两个网络,那么这个容器可以与这两个网络中的容器进行交互。

bridge网络:
创建一个bridge网络非常简单,这个网络非常类似之前的docker0网络,这里是一些新增的功能和一些之前网络不能用的功能。
docker network create --driver bridge isolated_nw

docker network inspect isolated_nw

[ { "Name": "isolated_nw", "Id": "1196a4c5af43a21ae38ef34515b6af19236a3fc48122cf585e3f3054d509679b", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ { "Subnet": "172.21.0.0/16", "Gateway": "172.21.0.1/16" } ] }, "Containers": {}, "Options": {} }]

对比可以发现isolated_nw与默认的Docker0网络的Options是完全不同的,因此isolated_nw与docker0网络支持的特性完全不同。

如果将容器连接到isolate_nw下,该容器将与该网络下的所有其他容器可以通过Ip进行交互,但是与其他网络是完全隔绝的。在用户自建的bridge模式网络下是不支持的link,用户可以发布容器的端口到该网络下。


















阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页