天天看点

20170904多个docker容器中同时搭建多套ceph集群(一)---docker网络模式的了解多个docker容器中同时搭建多套ceph集群(一)---docker网络模式的了解

多个docker容器中同时搭建多套ceph集群(一)---docker网络模式的了解

1、软件安装

使用brctl show指令需要安装 yum install bridge-utils

使用ifconfig、ip route 、ip route add 等指令  yum install net-tools -y

2、使用默认网桥docker0以bridge模式跑一个容器

备注:bridge模式可以与host模式共存

   当创建一个 Docker 容器的时候,同时会创建了一对 veth pair 接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即 eth0 ;另一端在本地并被挂载到docker0 网桥,名称以 veth 开头(例如 vethAQI2QT )。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker 就创建了在主机和所有容器之间一个虚拟共享网络.

容器要想访问外部网络,需要本地系统的转发支持。在Linux 系统中,检查转发是否打开。

[[email protected] ~]# sysctl net.ipv4.ip_forward

net.ipv4.ip_forward = 1

如果为 0,说明没有开启转发,则需要手动打开。

$sysctl -w net.ipv4.ip_forward=1

vim  /root/tmp.sh

输入/bin/bash保存退出.start-ceph.sh是Dockerfile文件中指定的文件名称

docker run -itd --net=bridge --privileged=true -v /root/tmp.sh:/root/start-ceph.sh --name lwlceph ceph/centos6:latest

如果不指定脚本,也可以直接这样启动

docker run -itd --net=bridge --privileged=true  /bin/bash --name lwlceph ceph/centos6:latest

其中ceph/centos6:latests是镜像名称,这种方式docker会自动使用默认的虚拟镜像docker0,它的IP地址可通过ifconfig进行查询,一般是172.17.0.1,通过bridge模式生成的容器的ip范围在172.17.0.2---172.17.0.16

这种方式不能在创建容器的时候使用--ip的指令指定ip地址,但是建立好容器之后可以进入容器后修改容器的i

docker  ps -a docker attach lwlceph

ifconfig查询其中eth0的ip

ifconfig eth0 172.17.0.10/16   修改ip为172.17.0.10,指定掩码为255.255.0.0

route -n  查看路由表信息

route add default gw *.*.*.*添加默认路由

route del 

3、自建一个网桥docker-br0,可以跑容器的时候指定ip

多台机器上docker容器互通需要添加对方机器中docker的网段,所以需要自己额外创建不同网段的网桥

多台机器上docker容器互通

环境:

服务器id 容器分配网段 启动容器的id
10.3.191.10 172.172.0.0/24 172.172.0.10
10.3.191.11 172.172.1.0/24 172.172.1.10
10.3.191.12 172.172.2.0/24 172.172.2.10

l  在第一台10.3.191.10

创建网桥

docker networkcreate --subnet=172.172.0.0/24 docker-br0

指定IP 运行容器

docker run -itd--net  docker-br0 --ip 172.172.0.10 --name dockervr0 -v/root/tmp.sh:/root/start-ceph.sh ceph/centos6:latest

l  在第二台10.3.191.11

创建网桥

docker networkcreate --subnet=172.172.1.0/24 docker-br0

dockernetwork rm docker-br0 指令可以移除网桥

指定IP 运行容器

docker run -itd--net  docker-br0 --ip 172.172.1.10 --name dockervr0 -v/root/tmp.sh:/root/start-ceph.sh ceph/centos6:latest

l  在第三台10.3.191.12

创建网桥

docker networkcreate --subnet=172.172.2.0/24 docker-br0

指定IP 运行容器

docker run -itd--net  docker-br0 --ip 172.172.2.10 --name dockervr0 -v/root/tmp.sh:/root/start-ceph.sh ceph/centos6:latest

l  在第一台10.3.191.10

添加路由规则

ip route add 对方容器所在的ip网段/子网掩码 via 对方虚拟机ip dev 通过哪个网卡通信

如: ip route add 172.172.1.0/24 via 10.3.191.11dev enp1s0f0

     ip route add 172.172.2.0/24 via 10.3.191.12dev enp1s0f0

添加完成之后,可以使用 route命令 查看添加之后的规则,也可以使用

ip route del172.172.1.0/24 via 10.3.191.11 dev enp1s0f0 

ip route del172.172.2.0/24 via 10.3.191.12 dev enp1s0f0

移除路由规则

l  在第二台10.3.191.11

添加路由规则

ip route add 对方容器所在的ip网段/子网掩码 via 对方虚拟机ip dev 通过哪个网卡通信

如: ip route add 172.172.0.0/24 via 10.3.191.10 dev enp1s0f0

     ip route add 172.172.2.0/24 via 10.3.191.12 dev enp1s0f0

添加完成之后,可以使用 route命令 查看添加之后的规则,也可以使用

ip route del172.172.0.0/24 via 10.3.191.10 dev enp1s0f0 

ip route del172.172.2.0/24 via 10.3.191.12 dev enp1s0f0

移除路由规则

l  在第二台10.3.191.11

添加路由规则

ip route add 对方容器所在的ip网段/子网掩码 via 对方虚拟机ip dev 通过哪个网卡通信

如: ip route add 172.172.0.0/24 via 10.3.191.10 devenp1s0f0

     ip route add 172.172.1.0/24 via 10.3.191.11dev enp1s0f0

添加完成之后,可以使用 route命令 查看添加之后的规则,也可以使用

ip route del172.172.0.0/24 via 10.3.191.10 dev enp1s0f0 

ip route del172.172.1.0/24 via 10.3.191.11 dev enp1s0f0

移除路由规则

PS:通过ip route可以查看路由表信息,全部步骤准备完成后,此时进入相应的容器则可以ping通其他容器的ip地址了。

以自建的docker-br0为网桥,指定IP,创建容器

在第一台机器10.3.191.10

docker run -itd--net  docker-br0 --ip 172.172.0.10 --name dockervr0 -v /root/tmp.sh:/root/start-ceph.sh ceph/centos6:latest

在第二台机器10.3.191.11

docker run -itd--net  docker-br0 --ip 172.172.1.10 --name dockervr0 -v /root/tmp.sh:/root/start-ceph.sh ceph/centos6:latest

在第三台机器10.3.191.10

docker run -itd--net  docker-br0 --ip 172.172.2.10 --name dockervr0 -v /root/tmp.sh:/root/start-ceph.sh ceph/centos6:latest

在这三台机器中容器中,ping其他机器容器的IP就可以ping通了,实现跨机器的容器网络共通.

继续阅读