docker的原生网络:bridge,none,host
docker自带的网络模式有bridge,none,host,container4种,它是删除不了的
docker network ls #查看docker网络
1. bridge模式docker的默认模式,docker进程第一次启动会创建一个docker0虚拟网桥,此宿主机上启动的容器会默认连接到这个网桥上,容器通过这块网桥NAT访问外部网络,当执行docker run加入-p参数是,实际是iptables中加入了对应的DNAT端口转发规则。2. host模式host模式的容器和宿主机共用一个namespace,拥有一样的IP和路由,因此容器内的服务端口不能根宿主机相同3. none模式none模式创建的容器没有网卡,需要自行配置4. container模式container模式创建一个跟指定容器共用的新容器
一、搭建实验环境
实验环境rhel7.3
## 外部访问容器 (host模式)
直接从docker0访问#外部主机访问容器 (bridge模式)
外部主机-->宿主机(eth0)(172.25.10.1:80)-->DNAT-> 172.17.0.2:80(容器地址)
为了保证实验效果明显,重新创建一个干净的实验环境
#1 真机远程连接server4虚拟机
#2 在真机上面搭建共享yum源,含有docker的安装源,开启apache服务,关闭防火墙
#3 在server1上编写yum源的配置文件来共享真机的yum源
#4 给server4安装docker
#5 开启并且设置开机启动docker服务
#6 在真机上给server4发送nginx和ubuntu的镜像,第一个nginx.tar过大,用第二个传给虚拟机进行覆盖
#7 导入镜像并且查看
二、开始演示docker的三种原生网络
查看三种原生网络
可以看到容器的宿主机server4上面多了一个网桥接口,这个桥接接口供容器和外界通信
类似于物理机和虚拟机的关系,虚拟机要上网就得通过物理机才可以
#1 bridge模式
可以看到目前没有容器正在运行
宿主机的桥接接口上面也没有容器
运行一个容器
容器都桥接docker0(出口网卡相当于一个网关),连接到网卡eth0上,然后进行地址伪装,路由转换,进行与外部通信
可以看到这个容器的ip与桥接接口在一个网段,并且ip地址以网桥ip为基础递增,以网桥ip为网关
关闭刚才运行的容器,发现桥接就没有了
关闭容器的时候宿主机就不能ping通容器
开启容器的时候宿主机就能ping通容器,并且ip也就有了
以上就是基本bridge模式,一般开启的容器模式使用的也是这种网络模式
注意:bridge模式只有宿主机才能与运行在其上面的容器进行通信
切忌三点就可理解bridge模式:
宿主机上有桥接接口,上面有ip
开启的容器会自动分配和ip在一个网段的ip 地址,并且开启的容器的ip以ip为基础递增
关闭容器之后,ip会自动释放;
清理一下实验环境,准备看第二种网络模式
#2 host模式
以host模式运行一个容器vm1
可以看到容器vm1的网络与宿主机一模一样
但是可以看到宿主机和容器的运行环境是不一样的,这就是容器共享宿主机的网络
当exit直接完全退出容器vm1时,可以重启启动vm1容器,再次连接进入,但是ctrl+p+q只是退出不关闭
清理一下实验环境,接下来host模式运行一个nginx容器
在直接上可以访问到宿主机的ip,看到nginx服务的默认页面,其实访问的是容器
因为容器的ip与宿主机的ip是一模一样的
不是bridge模式,因此桥接没有
可以看到nginx服务开启的80端口
#3 none模式
可以看到只有回环接口,宿主机禁止容器使用网络
对于那种比较机密的服务所在的容器可以使用这种网络模式
清理环境
接下来这个可以验证bridge模式的ip递增
ping是可以ping通的,但是退出只是ctrl+p+q,而不是exit,完全退出就相当于关闭了容器
清理环境,实验结束