(为容器分配独立IP方法二)通过虚拟IP实现docker宿主机增加对外IP接口

虚拟IP。何为虚拟IP,就是一个未分配给真实主机的IP,也就是说对外提供数据库服务器的主机除了有一个真实IP外还有一个虚IP,使用这两个IP中的任意一个都可以连接到这台主机,所有项目中数据库链接一项配置的都是这个虚IP,当服务器发生故障无法对外提供服务时,动态将这个虚IP切换到备用主机。

虚拟IP原理:http://blog.csdn.net/whycold/article/details/11898249
 
 
通过虚拟IP,我们可以虚拟化的增加docker宿主机的对外IP,通过对外不同IP来实现不同的接入服务。让我们看下面的例子:
1,查看当前网卡设备eth0并创建新的网卡设备eht0:1
ech0详细内容:
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
内容如下:
DEVICE=eth0 
HWADDR=00:0c:29:ae:d2:2b 
TYPE=Ethernet UUID=d3015c96-42e0-483b-81d5-e4b05a384fbe 
ONBOOT=yes 
NM_CONTROLLED=yes 
BOOTPROTO=static 
IPADDR=192.168.1.10 
NETMASK=255.255.255.0 
GATEWAY=192.168.1.1 
DNS1=192.168.1.1
 
创建虚拟网卡设备eth0:1:
# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0:1
修改eth0:1设置IP192.168.1.11:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0:1
内容如下:
DEVICE=eth0:1 
HWADDR=00:0c:29:ae:d2:2b 
TYPE=Ethernet UUID=d3015c96-42e0-483b-81d5-e4b05a384fbe 
ONBOOT=yes 
NM_CONTROLLED=yes 
BOOTPROTO=static 
IPADDR=192.168.1.11
NETMASK=255.255.255.0 
GATEWAY=192.168.1.1 
注意:eth0:1的DEVICE必须为eth0:1 ,表示通过eth0连接.且它们的设备mac需要一致
 
2.启动虚拟IP的网卡设备: 
# ifup eth0:1
此时通过ifconfig可以查看到eth0,eth0:1两个网卡设备,并且IP为 192.168.1.10、192.168.1.11
 
3.运行容器指定映射IP和端口:
查看当前docker 镜像
# docker images
REPOSITORY TAG IMAGE   ID CREATED VIRTUAL SIZE
centos latest 34943839435d 3 weeks ago 224 MB
通过镜像运行容器
# docker run -d -p 192.168.1.11:80:80 centos
此时就可以通过192.168.1.11这个IP的80端口访问容器centos了
#docker ps -a
(为容器分配独立IP方法二)通过虚拟IP实现docker宿主机增加对外IP接口
而192.168.1.10这个IP的80端口是访问不到的这个容器的,这样我们就相当于又可以在192.168.1.10的IP上80端口访问其他新增的容器了
 
 
 
特别注意:
1.使用虚拟IP的话,在任何-p映射中不要使用 -p 0.0.0.0:80:80 或者 -p 80:80,这样会占用有IP的80端口
2.修改虚拟网卡配置时,请先ifdown eht0:x,修改完后ifup eth0:x
3.删除虚拟网卡设备文件请先进行ifdown eth0:X ,再删除eth0:X网卡设备文件,但不建议这么做。最好的方法是不要删除虚拟网卡设备文件,编辑多余不用的网卡设备文件,保留BOOTPROTO,HWADDROOT和ONBOOT这三项其他注释即可。
4.无论删除,或编辑网卡,之后请不要使用service network restart,否者会出现断网,需reboot重启恢复
5.关于容器因虚拟IP操作不当仍不能连网,请停止所有容器,ifdown所有虚拟网卡设备,再ifup,然后启动容器即可恢复。
上一篇:CodeForces 370A Rook, Bishop and King


下一篇:使用虚幻引擎中的C++导论(四-内存管理与垃圾回收)(终)