一.Docker的四種網(wǎng)絡(luò)模式?
? ? 1.Docker在創(chuàng)建容器時(shí)有四種網(wǎng)絡(luò)模式俄精,bridge為默認(rèn)不需要用--net去指定鸥诽,其他三種模式需要在創(chuàng)建容器時(shí)使用--net去指定。
? ? ? bridge模式葱峡,使用--net=bridge指定,默認(rèn)設(shè)置。
? ? ? none模式哑舒,使用--net=none指定。
? ? ? host模式幻馁,使用--net=host指定洗鸵。
? ? ? container模式越锈,使用--net=container:容器名稱(chēng)或ID指定。(如:--net=container:30b668ccb630)
? ? ? 1)bridge模式:docker網(wǎng)絡(luò)隔離基于網(wǎng)絡(luò)命名空間<Network Namespace>膘滨,在物理機(jī)上創(chuàng)建docker容器時(shí)會(huì)為每一個(gè)docker容器分配網(wǎng)絡(luò)命名空間甘凭,并且把容器IP橋接到物理機(jī)的虛擬網(wǎng)橋上。
? ? ? 2)none模式:此模式下創(chuàng)建容器是不會(huì)為容器配置任何網(wǎng)絡(luò)參數(shù)的火邓,如:容器網(wǎng)卡丹弱、IP、通信路由等铲咨,全部需要自己去配置躲胳。
? ? ? docker run -itd? --net=none centos:6? /bin/bash
? ? 3)host模式:此模式創(chuàng)建的容器沒(méi)有自己獨(dú)立的網(wǎng)絡(luò)命名空間,是和物理機(jī)共享一個(gè)Network Namespace纤勒,并且共享物理機(jī)的所有端口與IP坯苹,并且這個(gè)模式認(rèn)為是不安全的。
? ? ? docker run -itd? --net=host --name host centos:6? /bin/bash
? ? 4)container模式:此模式和host模式很類(lèi)似摇天,只是此模式創(chuàng)建容器共享的是其他容器的IP和端口而不是物理機(jī)粹湃,此模式容器自身是不會(huì)配置網(wǎng)絡(luò)和端口,創(chuàng)建此模式容器進(jìn)去后泉坐,你會(huì)發(fā)現(xiàn)里邊的IP是你所指定的那個(gè)容器IP并且端口也是共享的再芋,而且其它還是互相隔離的,如進(jìn)程等坚冀。
? ? docker run -itd? --net=container:565d6f23dada --name container centos:6? /bin/bash
二.為什么要選擇橋接济赎,docker容器要有獨(dú)立的ip,而不是使用nat方式:
使用端口映射(NAT)的方式存在一個(gè)弊端,當(dāng)多個(gè)容器都需要使用某個(gè)端口時(shí)或者h(yuǎn)ost主機(jī)端口與容器端口沖突時(shí)(例如记某,host主機(jī)搭建了80的服務(wù)司训,兩個(gè)容器也都搭建了80的服務(wù),那個(gè)只有1個(gè)服務(wù)可以使用本機(jī)的80端口液南,其他服務(wù)都要映射為其他端口.
三.配置獨(dú)立的ip地址:
1.修改網(wǎng)卡(宿主主機(jī)操作)
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-eth0.bak
cp ifcfg-eth0 ifcfg-br0
vim ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:DB:B2:28
TYPE=Ethernet
UUID=b2268aab-fa2e-49e9-bd67-2572f29e5790
ONBOOT=yes
BRIDGE=br0
BOOTPROTO=none
#IPADDR=192.168.1.179
#NETMASK=255.255.255.0
#GATEWAY=192.168.1.1
#DNS1=114.114.114.114
#DNS2=8.8.4.4
vim ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.179
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
DNS2=8.8.4.4
重啟網(wǎng)卡或者服務(wù)器(如果發(fā)現(xiàn)沒(méi)有修改的話壳猜,重啟電腦,注意內(nèi)核要在3.10以上)
2.docker配置(宿主主機(jī)中運(yùn)行)
pipework是由Docker的工程師Jér?me Petazzoni開(kāi)發(fā)的一個(gè)Docker網(wǎng)絡(luò)配置工具
git clone https://github.com/jpetazzo/pipework
cp pipework/pipework /usr/local/bin/
運(yùn)行docker
docker run -it --net=none --name docker_name? centos:6 /bin/bash
在宿主機(jī)上
rpm -Uvh https://repos.fedorapeople.org/openstack/EOL/openstack-grizzly/epel-6/iproute-2.6.32-130.el6ost.netns.2.x86_64.rpm
pipework br0 docker_name 192.168.1.187/24@192.168.1.1? //制定路由
3.到docker中查看ip:
? ifconfig滑凉,其中一個(gè)網(wǎng)卡的IP就是以前我們配置的192.168.1.187统扳。此時(shí)route已經(jīng)被加上了!
4.如果想刪除docker0網(wǎng)卡(可選操作):
? 1)service docker stop
? 2)ifconfig docker0 down
? 3)brctl delbr docker0