docker集群搭建网络解决方案
主机1:xxxx centos7-server1
主机2:xxxx centos7-server2
#1.关闭防火墙
service iptables stop
重启后不开启防火墙
chkconfig iptables off
查看防火墙状态
service iptables status
#2.修改两台主机名
hostname lqguo-centos7-server1
bash
hostname lqguo-centos7-server2
bash
#3.安装consul
docker search consul
docker pull progrium/consul、
docker run -d --restart always -p 8400:8400 -p 8500:8500 \
-p 8600:53/udp -h consul progrium/consul -server -bootstrap -ui-dir /ui
查看端口是否开启
netstat -anput | grep 8500
http://10.28.19.150:8500/
#4.将两台机器的docker加入到consul的集群中来
机器1:
ip a 查看网卡为ens192
vi /usr/lib/systemd/system/docker.service
ExecStart后面加上
--cluster-store=consul://10.28.19.150:8500 --cluster-advertise=ens192:2376
机器2:
ip a 查看网卡为ens192
vi /usr/lib/systemd/system/docker.service
ExecStart后面加上
--cluster-store=consul://10.28.19.150:8500 --cluster-advertise=ens192:2376
重启(机器1、机器2都需要重启)
(重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载)
systemctl daemon-reload
systemctl restart docker.service
http://10.28.19.150:8500/ui/#/dc1/nodes/consul
查看两台docker是否加入consul
这里我失败了,不能查看http://10.28.19.150:8500/ui/#/dc1/nodes/consul,于是我查看了日志
docker logs -f consul容器id
发现有报错,于是我清空了容器,只留下了consul,重新启动了consul
再次查看,问题已经解决。
#5.上面overlay网络准备工作已完成,开始下一步
5.1 首先开启网卡混杂模式:
ip a
主机1:ifconfig ens192 promisc
主机2:ifconfig ens192 promisc
5.2 默认docker swam才能使用overlay网络,现在我单机拿出来用,需要添加一个参数即可
主机1,主机2随便一台运行即可
创建ov_net1网卡,全局生效
docker network create --driver overlay --attachable ov_net1
查看ov_net1是否创建成功
docker network ls
查看ov_net1具体信息
docker network inspect ov_net1
创建bbox1容器
docker run -itd --name bbox1 --network ov_net1 busybox
创建http容器
docker run -p 8900:80 -d --network ov_net1 --name web1 httpd
此时会多出来一个桥接卡docker_gwbridge
docker network ls
查看桥接卡具体信息
dockers network inspect docker_gwbridge
此时是可以ping外网的
docker exec bbox1 ping www.baidu.com
这个时候是用的桥接卡,桥接卡是在物理机上面的,容器间通讯用到的是ov_net1,对外通讯是桥接卡。
#6.跨主机通讯最后一步
打开路由转发功能
主机1:
cat /etc/sysctl.conf
vi /etc/sysctl.conf
最后面添加:
net.ipv4.ip_forward = 1
马上生效:
sysctl -p
主机2:
cat /etc/sysctl.conf
vi /etc/sysctl.conf
最后面添加:
net.ipv4.ip_forward = 1
马上生效:
sysctl -p
验证
docker exec bbox2 ping -c 2 bbox1
是可以ping通的
zk:
docker run -d --name zookeepertest -p 2185:2181 --network ov_net1 --privileged=true zookeeper
redis:
docker run -d --name redis --network ov_net1 -p 6380:6379 redis redis-server
nginx:
docker run --name nginx152 -d -p 57080:80 --network ov_net1 -v /opt/docker-tomcat/dailyNginx/conf/nginx.conf:/etc/nginx/nginx.conf nginx
ebank-portal:
docker run -d --name ebank-tomcat --network ov_net1 -p 9091:8080 \
-v /opt/docker-tomcat/ebank-tomcat/webapps:/opt/tomcat7/webapps \
-v /opt/docker-tomcat/ebank-tomcat/conf:/opt/tomcat7/conf \
-v /opt/docker-tomcat/ebank-tomcat/logs:/opt/tomcat7/logs \
-v /opt/docker-tomcat/ebank-tomcat/work:/opt/tomcat7/work \
-v /opt/docker-tomcat/logs:/home/draft-pool-logs \
-v /ecds/draft/certificate:/ecds/draft/certificate \
-v /ecds/message:/ecds/message \
-v /opt/docker-tomcat/ebank-tomcat/bin/draft-pool-ebank:/opt/tomcat7/bin/draft-pool-ebank \
-e JAVA_OPTS='-server -Xms2048M -Xmx2048M -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=512M -XX:MaxPermSize=1024M' \
docker.io/bhzd/tomcat7-jdk8-apr
portal-tomcat:
docker run -d --name portaltomcat152 --network ov_net1 -p 9090:8080 \
-v /opt/docker-tomcat/portal-tomcat/webapps:/opt/tomcat7/webapps \
-v /opt/docker-tomcat/portal-tomcat/conf:/opt/tomcat7/conf \
-v /opt/docker-tomcat/portal-tomcat/logs:/opt/tomcat7/logs \
-v /opt/docker-tomcat/portal-tomcat/work:/opt/tomcat7/work \
-e JAVA_OPTS='-server -Xms2048M -Xmx2048M -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=512M -XX:MaxPermSize=1024M' \
bhzd/tomcat7-jdk7:latest
最好是把hosts也调一下,把overlay的网卡放在最上面。