docker网络
docker网络简单理解
安装了docker就会出现docker0这样一个网卡,在默认情况下,创建容器都会以docker0在路由,比如两个容器之间可以ping通,都是先经过docker0在转发过去。
网卡如图
在不指定网络的情况下,都是docker0路由的,dockerr容器会给我们默认的分配一个ip他的范围
255.255.0.1/16
它的域为16,这样的话默认的可用地址就是255*255减去本地回环地址减去最终地址
思考问题:如果编写一个微服务,databaseUrl=ip,项目重启。数据库ip就换了,这个问题如何解决
–link
通过这个命令可以通过容器名字进行ping通,也就是说,容器ip变了也没有问题,一样可以ping通
docker run -d -P --name tomcat03 --link tomcat01 tomcat:9
但是这样只可以在tomcat03内通过容器名字ping tomcat01,反之不行。
这样能访问的原因,在创建tomcat03的时候直接把tomcat01写进了网络配置文件
但是这只是简单的网络测试,不建议使用。
自定网络
默认情况是桥接模式,子网掩码必须配 网关也需要指定,这样我们就创建了自己的docker网络
docker network create --driver bridge -- 192.168.0.0/16 \
--gateway 192.168.0.1 xunet
指定网络启动容器
docker run -d --name tomcat01 -P --network xunet diytomcat
docker run -d --name tomcat02 -P --network xunet diytomcat
自己创建的网络是十分健全的docker已经帮我们维护好了关系,直接ping容器名字是没有问题的。
好处:
比如在部署集群的时候,有redis集群和mysql集群,使用不同的网络,可以保证集群的安全
试想这样一个问题,如果我们使用一个默认的网络启动一个容器,再用我们自定义的网络启动一个容器,这样的话这两个容器网段是不同的,这样的话,如何使得这两个容器进行通信?
测试:
我们再启动一个tomcat03使用默认的网路,使用docker的网络联通命令就可以进行连通
docker network connect xunet tomcat03
ping tomcat03测试
测试成功
docker:部署redis集群
首先创建一个redis的网络
docker network create redis --subnet 192.169.0.0/16 --gateway 192.169.0.1
使用shell脚本创建
for port in $(seq 1 6); \
do \
mkdir -p /home/mydata/redis/node-${port}/conf
touch /home/mydata/redis/node-${port}/conf/redis.conf
cat <<EOF>>/home/mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.169.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
创建容器
for port in $(seq 1 6); \
do
docker run -p 572${port}:6379 -p 573${port}:16379 --name redis-${port} \
-v /home/mydata/redis/node-${port}/data:/data \
-v /home/mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d --network redis --ip 192.169.0.1${port} redis redis-server /etc/redis/redis.conf
done
创建集群
redis-cli --cluster create 192.169.0.11:6379 192.169.0.12:6379 192.169.0.13:6379 192.169.0.14:6379 192.169.0.15:6379 192.169.0.16:6379 --cluster-replicas 1
这样的话配置了3个主机3个从机
在主机中删除数据从机会替代主机