docker自带的网络模式有bridge,none,host,container4种,
docker network ls #查看docker网络
一、bridge模式
docker的默认模式,docker进程第一次启动会创建一个docker0虚拟网桥,
此宿主机上启动的容器会默认连接到这个网桥上,容器通过这块网桥NAT访问外部网络,
当执行docker run 加入-p参数时,实际是在iptables中加入了对应的DNAT端口转发规则。
二、host模式
host模式的容器跟宿主机共用一个namespace,拥有一样的IP和路由,因此容器内的服务端口不能跟宿主机相同
三、none模式
none模式创建的容器没有添加网卡,需要自行配置
四、container模式
container模式创建一个跟指定容器共用网络的新容器
搭建实验环境
docker的三种原生网络
查看三种原生网络
容器的宿主机server1上面多了一个网桥接口,这个桥接接口供容器和外界通信
(1)bridge模式
可以看到目前没有容器正在运行,宿主机的桥接接口上面也没有容器
运行一个容器
docker inspect 5eef90e2528a
可以看到这个容器的ip与桥接接口在一个网段,并且ip地址以网桥ip为基础递增,以网桥ip为网关
关闭刚才运行的容器,发现桥接就没有了
关闭容器的时候宿主机就不能ping通容器
开启容器的时候宿主机就能ping通容器
以上就是基本的bridge模式,一般开启的容器默认使用的也是这种网络模式
注意:bridge模式只有宿主机才能与运行在其上面的容器进行通信
(2)host模式
以host模式运行一个容器vm1
宿主机上
可以看到容器和宿主机的ip一模一样
但可以看到宿主机和容器的运行环境不一样,这就是容器共享宿主机的网络
清理一下实验环境,接下来host模式运行一个nginx容器
在真机上可以访问到宿主机的ip,看到nginx服务的默认页面,其实访问的是容器
因为容器的ip与宿主机的ip一模一样
因为不是bridge模式所以没有桥接
可以看到nginx服务开启的80端口
(3)none模式
可以看到只有回环接口,宿主机禁止容器使用网络
对于那种比较机密的服务所在的容器可以使用这种网络模式(例如数据库)
清理一下实验环境
接下来验证bridge模式的ip递增
vm1 的ip为172.17.0.2
ctrl p+q不要退出,继续run一个vm2
vm2 的ip为172.17.0.3
没有域名解析