Docker网络配置详解
1、Host模式
启动信的Docker容器,都会分配独立的Network Namespace隔离子系统,如果在运行时指定为host模式,那么Docker容器不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace子系统。
新创建的Docker容器不会创建自己的网卡,不会在虚拟出自己的网卡、IP、网关、路由等信息,而是和宿主机共享IP和端口等信息,其他软件、目录还是相互独立的,两个容器除了网络方面相同之外的,其他的如文件系统、进程列表等还是相互隔离的。
使用方式
docker run -itd --net=host nginx
2、container模式
container模式是指定新创建的容器和已存在的某个容器共享一个Network Namespace子系统,而不是和宿主机共享Namespace子系统。
新创建的Docker容器不会创建自己的网卡,不会在虚拟出自己的网卡、IP、网关、路由等信息,而是和指定的Docker容器共享IP和端口等信息,其他软件、目录还是相互独立的,两个容器除了网络方面相同之外的,其他的如文件系统、进程列表等还是相互隔离的。如果依附的Docker容器关闭,新的Docker容器网络也会丢失。
3、none模式
none模式与其他模式都不同,如果Docker容器使用None模式,Docker容器会拥有自己的Network Namespace子系统,但是Docker引擎并不会为新启动的Docker容器配置任何的网络信息
新创建的Docker容器不会虚拟出自己的网卡、IP、网关、路由等信息,而是需要手工为Docker容器添加网卡、配置IP、路由等信息,在企业环境中,通常会使用pipework工具为Docker容器制定IP等信息。
1)pipework安装
[root@localhost ~]# wget https://pan.cnbugs.com/DevOps/001_Docker/pipework
[root@localhost ~]# mv pipework /usr/local/bin/
[root@localhost ~]# chmod a+x /usr/local/bin/pipework
使用none模式
[root@localhost ~]# docker run -itd --net=none nginx
查看新创建的容器的IP地址

可以看到无IP地址
使用pipework设置ip地址
[root@localhost ~]# pipework docker0 3e0877d1ec5d 172.17.0.100/16@172.17.0.1
通过ping进行测试

缺点:
在容器重启之后,IP依然还得重新设置。
4、Docjer持久化固定容器IP
基于Docker引擎创建的Docker容器,在默认条件下创建容器是桥接模式,启动容器IP地址是DHCP随机分配并且递增的,而且容器之间可以互相通信,网段也是固定的。
当Docker容器一旦关闭再次启动,就会导致容器IP重新分配,而且有部分容器在部署的时候是不需要互相通信的,所以使用固定IP,保证想要通信的容器在同一网段,并且容器重启之后IP地址也不会随之改变。
根据如上pipework脚本可以给docker容器配置固定IP地址,但是重启也会丢失IP地址,下面方法实现重启IP不会丢失。
1)安装桥接工具和Docker-py程序
安装Docker-py工具
[root@localhost ~]# yum install python-docker* -y
#也可以使用pip工具安装
pip install docker-py
安装桥接拓展包
[root@localhost ~]# yum install bridge-utils -y
下载Docker-static-ip固定IP的脚本
[root@localhost ~]# wget https://pan.cnbugs.com/DevOps/001_Docker/docker-static-ip.tar
[root@localhost ~]# tar xf docker-static-ip.tar
[root@localhost ~]# ls docker-static-ip
containers.cfg duration.py README.md
[root@localhost ~]# mv docker-static-ip /usr/local/
[root@localhost ~]# chmod a+x /usr/local/docker-static-ip/duration.py
进入目录并启动
[root@localhost local]# cd /usr/local/docker-static-ip/
[root@localhost docker-static-ip]# ls
containers.cfg duration.py README.md
[root@localhost docker-static-ip]# nohup python duration.py &
查看进程是否成功启动

设置IP固定
[root@localhost docker-static-ip]# vim containers.cfg
#<container-id>,<bridge-name>,<ipaddress/netmask>,<gateway>
cnbugs-vm01,docker0,172.17.0.188/16,172.17.0.1
启动名字为cnbugs-vm01的容器
[root@localhost docker-static-ip]# docker run -itd --name=cnbugs-vm01 --net=none nginx
测试IP是否配置成功

即使重启容器之后IP依然保持不变!!!