docker的host、bridge网络类型
来源:互联网 发布:淘宝u站活动是什么 编辑:程序博客网 时间:2024/05/02 22:51
1.1 host模式
众所周知,Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口,Docker Container可以和宿主机一样,使用宿主机的eth0,实现和外界的通信。换言之,Docker Container的IP地址即为宿主机eth0的IP地址。
例如,我们在10.10.101.105/24的机器上用host模式启动一个含有web应用的Docker容器,监听tcp80端口。当我们在容器中执行任何类似ifconfig命令查看网络环境时,看到的都是宿主机上的信息。而外界访问容器中的应用,则直接使用10.10.101.105:80即可,不用任何NAT转换,就如直接跑在宿主机中一样。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
上图最左侧的Docker Container,即采用了host网络模式,而其他两个Docker Container依然沿用brdige桥接模式,两种模式同时存在于宿主机上并不矛盾。
Docker Container的host网络模式在实现过程中,由于不需要额外的网桥以及虚拟网卡,故不会涉及docker0以及veth pair。上文namespace的介绍中曾经提到,父进程在创建子进程时,如果不使用CLONE_NEWNET这个参数标志,那么创建出的子进程会与父进程共享同一个网络namespace。Docker就是采用了这个简单的原理,在创建进程启动容器的过程中,没有传入CLONE_NEWNET参数标志,实现Docker Container与宿主机共享同一个网络环境,即实现host网络模式。
1.2 bridge模式
bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。
Brdige桥接模式为Docker Container创建独立的网络栈,保证容器内的进程组使用独立的网络环境,实现容器间、容器与宿主机之间的网络栈隔离。另外,Docker通过宿主机上的网桥(docker0)来连通容器内部的网络栈与宿主机的网络栈,实现容器与宿主机乃至外界的网络通信。
Docker Container的bridge桥接模式可以参考下图:
创建容器测试:(由于是默认设置,这里没指定网络--net="bridge"。另外可以看到容器内创建了eth0)
[root@localhost ~]# docker run -i -t mysql:latest /bin/bash
root@e2187aa35875:/usr/local/mysql# ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
75: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:2/64 scope link
valid_lft forever preferred_lft forever
容器与Host网络是连通的:
root@e2187aa35875:/usr/local/mysql# ping 186.100.8.117
PING 186.100.8.117 (186.100.8.117): 48 data bytes
56 bytes from 186.100.8.117: icmp_seq=0 ttl=64 time=0.124 ms
eth0实际上是veth pair的一端,另一端(vethb689485)连在docker0网桥上:
[root@localhost ~]# ethtool -S vethb689485
NIC statistics:
peer_ifindex: 75
[root@localhost ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.56847afe9799 no vethb689485
通过Iptables实现容器内访问外部网络:
[root@localhost ~]# iptables-save |grep 172.17.0.*
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A FORWARD -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 5000 -j ACCEPT
http://www.superwu.cn/?p=1809
http://blog.csdn.net/halcyonbaby/article/details/42112141
http://www.dataguru.cn/thread-549095-1-1.html
- docker的host、bridge网络类型
- docker bridge 网络
- docker如何构建bridge网络
- VirtualBox中的网络 (host-only, bridge, nat)
- Vmware中的网络 (host-only, bridge, nat)
- Host Bridge
- VMware中bridge、NAT、host-only三种网络模式的区别
- VMware运行Ubuntu 三种网络连接方式:bridge、NAT、Host-Only的区别详解
- VMware网络连接的几种方式Bridge NAT Host-only
- VMware三种网络连接方式:bridge、NAT、Host-Only的区别
- 虚拟机网络连接的桥接(bridge),NAT,Host Only模式浅析
- Docker网络——单host网络
- host-only 与bridge方式的区别
- bridge、nat、host-only的区别
- Docker 网络(九)——使用Open vSwitch代替默认的linux bridge
- VMWare网络链接方式(Bridge和Host-Only)
- VM网络四个选项bridge、NAT、host-only、custom
- 虚拟机Bridge、NAT、host-only三种网络模式
- Android事件分发机制完全解析,带你从源码的角度彻底理解(一)
- 关于会计科目表,科目组,字段状态组
- Beyond Compare有哪些文件比较方式
- Java写到.txt文件,如何实现换行
- 运动检测(前景检测)之(一)ViBe
- docker的host、bridge网络类型
- Android开发之线程池详解(2)自定义线程池
- HikariCP logoJDBC 连接池 HikariCP
- Newtonsoft.Json高级用法
- 如何用maven运行特定的test case
- OSG相机与视图
- 回溯法——combinations同数组的所有组合
- java为什么不能重写静态方法
- SAP常用的科目字段状态组设置