虛擬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
而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,然后啟動容器即可恢復。