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依然保持不变!!!

发表评论

后才能评论