四、Docker网络的管理
1、Docker容器的方式
1)Docker访问外网
Docker容器链接到宿主机的docker0网桥访问外网
默认自动将docker0网桥添加到docker容器中
2)容器和容器之间通信
需要管理员创建网桥
将不同的容器链接到网桥上实现容器和容器之间相互访问
3)外部网络访问容器
通过端口映射
或者同步docker宿主机网络配置实现通信
2、Docker容器网络通信的模式
1)bridge
默认容器访问外网通信使用
依赖docker0网桥
2)none
需要给容器创建的独立的网络命名空间
不会给创建的容器配置TCP/IP信息
3)container
容器和容器通信使用
容器需要共享容器名称空间,通过共享容器名称空间实现不同容器通信
4)host
容器内部网络和宿主机保持同步
3、配置Docker容器网络通信
1)配置创建的容器桥接网络通信,容器访问互联网使用,需要docker宿主机开启路由功能
[root@centos01 ~]# docker run -d --net=bridge --name centos01 hub.c.163.com/public/centos:6.7-tools
2)配置docker容器不需要链接到网络,容器无法通信
[root@centos01 ~]# docker run -d --net=none --name centos02 hub.c.163.com/public/centos:6.7-tools
3)运行的容器和宿主机网络保持同步
[root@centos01 ~]# docker run -d --net=host --name centos03 hub.c.163.com/public/centos:6.7-tools
4、修改docker0网卡参数
1)停止docker服务
[root@centos01 ~]# systemctl stop docker
2)停止docker0网桥
[root@centos01 ~]# ip link set dev docker0 down
3)删除系统默认的docker0网桥
[root@centos01 ~]# brctl delbr docker0
4)创建新的网桥名字是docker0
[root@centos01 ~]# brctl addbr docker0
5)新的网桥docker0配置IP地址
[root@centos01 ~]# ip addr add 192.168.20.1/24 dev docker0
6)启动新创建的docker0网桥
[root@centos01 ~]# ip link set dev docker0 up
7)修改docker配置文件加载新的网桥docker0
[root@centos01 ~]# vim /etc/docker/daemon.json
{"registry-mirrors":["
https://6kx4zyno.mirror.aliyuncs.com"]} 加速
{"bip":"192.168.20.1/24"}
8)启动docker服务
[root@centos01 ~]# systemctl start docker
5、Docker网络隔离
1)Docker网络隔离原理
需要管理创建网络空间名称
将不同的容器加载到不同的网络空间名称中实现隔离
默认不配置网络隔离默认给容器分配的docker网络空间名称、
2)Docker容器自带的网络空间名称类型
bridge:容器桥接到docker网桥上
host:容器同步docker宿主机的网络配置信息
none:不创建网络,docker容器不需要配置TCP/IP信息
3)查看docker默认的网络名称空间
[root@centos01 ~]# docker network ls
4)创建网络空间名称
[root@centos01 ~]# docker network create -d bridge lamp
[root@centos01 ~]# docker network create -d bridge lnmp
5)创建运行的容器添加到lamp的网络空间名称中隔离
[root@centos01 ~]# docker run -it -d --name centos01 --network=lamp hub.c.163.com/public/centos:6.7-tools
6)创建运行的容器添加lnmp网络空间名称中隔离
[root@centos01 ~]# docker run -it -d --name centos02 --network=lnmp hub.c.163.com/public/centos:6.7-tools
6、配置网桥实现网络隔离
1)配置网桥实现网络隔离的目的
实现Docker宿主机的容器跨Docker宿主机的容器通信使用
2)配置网桥实现网络隔离原理
将物理网卡桥接到创建的网桥网卡上
给网桥网卡配置IP地址
创建容器加载网桥网卡实现docker宿主机容器跨docker宿主机容器通信
管理员管理docker宿主机通过网桥网卡进行远程管理
3)修改物理网卡配置信息桥接到网桥网卡br0
[root@centos01 ~]# cd /etc/sysconfig/network-scripts/
[root@centos01 network-scripts]# vim ifcfg-ens32
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
NAME=ens32
DEVICE=ens32
ONBOOT=yes
BRIDGE=br0
4)创建并生成br0网桥
[root@centos01 network-scripts]# cp ifcfg-ens32 ifcfg-br0
[root@centos01 network-scripts]# vim ifcfg-br0
TYPE=Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
5)重新启动docker容器宿主机网卡
[root@centos01 ~]# systemctl restart network
7、配置git下载网络管理工具
1)安装git
[root@centos01 ~]# yum -y install git
2)下载docker容器网络管理工具pipework
[root@centos01 ~]# git clone https://github.com/jpetazzo/pipework
3)优化管理命令
[root@centos01 ~]# cp pipework/pipework /usr/local/bin/
[root@centos01 ~]# chmod +x /usr/local/bin/pipework
4)通过镜像运行容器
[root@centos01 ~]# docker run --name centos01 --net=none -d hub.c.163.com/public/centos:6.7-tools
5)给容器配置IP地址
[root@centos01 ~]# pipework br0 centos01 192.168.100.30/24