首页 > 代码库 > Docker网络详解
Docker网络详解
Docker网络详解
转载请注明来自:http://blog.csdn.net/wsscy2004
网络基础
Docker使用linux桥接,在主机虚拟一个docker0
网络接口,在主机中运行命令查看:
# List host bridges$ sudo brctl showbridge name bridge id STP enabled interfacesdocker0 8000.000000000000 no# Show docker0 IP address$ sudo ifconfig docker0docker0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0
docker启动一个container时会会根据docker0
的网段划分container的IP,docker0
是每个container的网关。
自定义网络范围
尽管docker在使用linux brigde会找最合适的。但是有时候我们还是需要自己规划。
使用-b=<bridgename>
参数设置
# 先关闭docker$ sudo service docker stop# 关闭网桥docker0# 添加自己的网桥bridge0$ sudo ifconfig docker0 down$ sudo brctl addbr bridge0$ sudo ifconfig bridge0 192.168.227.1 netmask 255.255.255.0# 向Docker startup file中添加启动自定义网桥参数$ echo "DOCKER_OPTS=\"-b=bridge0\"" >> /etc/default/docker# 启动Docker$ sudo service docker start# 查看自定义网桥是否启动成功,ip等配置是否正确$ sudo ifconfig bridge0bridge0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:192.168.227.1 Bcast:192.168.227.255 Mask:255.255.255.0# 启动containerdocker run -i -t base /bin/bash# 可以看到Container IP 在网段192.168.227/24内root@261c272cd7d5:/# ifconfig eth0eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:192.168.227.5 Bcast:192.168.227.255 Mask:255.255.255.0# bridge0 IP as the default gateway# 查看路由信息root@261c272cd7d5:/# route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface0.0.0.0 192.168.227.1 0.0.0.0 UG 0 0 0 eth0192.168.227.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0# hits CTRL+P then CTRL+Q to detach# 查看网桥信息$ sudo brctl showbridge name bridge id STP enabled interfacesbridge0 8000.fe7c2e0faebd no vethAQI2QT
container互通
docker默认是允许container互通,通过-icc=false
关闭互通。
一旦关闭了互通,只能通过-link name:alias
命令连接指定container.
container互相隔离的情况下,假设我们有一个webapp container,一个redis contianer需要互通。
先启动redis container:
sudo docker run -d --name redis crosbymichael/redis
再启动webapp并联通到redis
#将redis取别名为dbsudo docker run -t -i --link redis:db --name webapp ubuntu bash
在webapp中可以看到db的网络信息:
$ root@4c01db0b339c:/# envHOSTNAME=4c01db0b339cDB_NAME=/webapp/dbTERM=xtermDB_PORT=tcp://172.17.0.8:6379DB_PORT_6379_TCP=tcp://172.17.0.8:6379DB_PORT_6379_TCP_PROTO=tcpDB_PORT_6379_TCP_ADDR=172.17.0.8DB_PORT_6379_TCP_PORT=6379PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binPWD=/SHLVL=1HOME=/container=lxc_=/usr/bin/envroot@4c01db0b339c:/#
0.11版本以后,-- link redis:db
的别名,会在/etc/hosts
中生成对应的ip映射:
root@6541a75d44a0:/# cat /etc/hosts172.17.0.3 6541a75d44a0172.17.0.2 db
什么是vethxxxx
# 查看网桥信息$ sudo brctl showbridge name bridge id STP enabled interfacesdocker0 8000.fe7c2e0faebd no vethAQI2QT
vethxxx是主机与container内部eth0相连的管道。详见ip link
和namespaces infrastructure
更多
pipework
可以创建各种复杂的containers互通的场景。详见here
Docker网络详解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。