一.Docker的四种网络模式
1.Docker在创建容器时有四种网络模式,bridge为默认不需要用--net去指定,其他三种模式需要在创建容器时使用--net去指定。
bridge模式,使用--net=bridge指定,默认设置。
none模式,使用--net=none指定。
host模式,使用--net=host指定。
container模式,使用--net=container:容器名称或ID指定。(如:--net=container:30b668ccb630)
1)bridge模式:docker网络隔离基于网络命名空间<Network Namespace>,在物理机上创建docker容器时会为每一个docker容器分配网络命名空间,并且把容器IP桥接到物理机的虚拟网桥上。
2)none模式:此模式下创建容器是不会为容器配置任何网络参数的,如:容器网卡、IP、通信路由等,全部需要自己去配置。
docker run -itd --net=none centos:6 /bin/bash
3)host模式:此模式创建的容器没有自己独立的网络命名空间,是和物理机共享一个Network Namespace,并且共享物理机的所有端口与IP,并且这个模式认为是不安全的。
docker run -itd --net=host --name host centos:6 /bin/bash
4)container模式:此模式和host模式很类似,只是此模式创建容器共享的是其他容器的IP和端口而不是物理机,此模式容器自身是不会配置网络和端口,创建此模式容器进去后,你会发现里边的IP是你所指定的那个容器IP并且端口也是共享的,而且其它还是互相隔离的,如进程等。
docker run -itd --net=container:565d6f23dada --name container centos:6 /bin/bash
二.为什么要选择桥接,docker容器要有独立的ip,而不是使用nat方式:
使用端口映射(NAT)的方式存在一个弊端,当多个容器都需要使用某个端口时或者host主机端口与容器端口冲突时(例如,host主机搭建了80的服务,两个容器也都搭建了80的服务,那个只有1个服务可以使用本机的80端口,其他服务都要映射为其他端口.
三.配置独立的ip地址:
1.修改网卡(宿主主机操作)
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
重启网卡或者服务器(如果发现没有修改的话,重启电脑,注意内核要在3.10以上)
2.docker配置(宿主主机中运行)
pipework是由Docker的工程师Jérôme Petazzoni开发的一个Docker网络配置工具
git clone https://github.com/jpetazzo/pipework
cp pipework/pipework /usr/local/bin/
运行docker
docker run -it --net=none --name docker_name centos:6 /bin/bash
在宿主机上
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,其中一个网卡的IP就是以前我们配置的192.168.1.187。此时route已经被加上了!
4.如果想删除docker0网卡(可选操作):
1)service docker stop
2)ifconfig docker0 down
3)brctl delbr docker0