【云原生 从零开始学Docker】八丶Docker网络与部署redis集群_docker部署redis集群需要再一个docker里吗

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

PING tomcat02 (172.17.0.3) 56(84) bytes of data.
64 bytes from tomcat02 (172.17.0.3): icmp_seq=1 ttl=64 time=0.142 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=2 ttl=64 time=0.068 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=3 ttl=64 time=0.083 ms


直接链接就可以ping了!



docker exec -it tomcat02 ping tomcat03
ping: tomcat03: Name or service not known


反向是不能ping通的,因为没有配置,然后我们使用命令查看一下所有网卡。



docker network ls
NETWORK ID NAME DRIVER SCOPE
3454234082a6 bridge bridge local
03fb70520a34 host host local
83eddbf8f273 none null local


ntwkid是本地的网卡(docker0),然后我们`docker network inspect 3454234082a6`查看bridge的网络配置信息  
 ![请添加图片描述](https://img-blog.csdnimg.cn/a9e5d7ecd1284899ae4372e6ca8f35a4.png)


这就是docker0 上面可以看到ip和网段


![请添加图片描述](https://img-blog.csdnimg.cn/5434c9979248487f84c79970e73a4e58.png)  
 这是其他容器,如果启动服务不指定ip会随机分配一个ip,这个ip是docker启动的时候分配的,其实tomcat03就是在本地配置了tomcat02的配置。


![请添加图片描述](https://img-blog.csdnimg.cn/61833de4d610493cb9332c99bfaaf7ab.png)  
 说白了–link就是在hosts配置中增加了一个tomcat02的映射,可以通过tomcat03ping通。也可以互相绑定,我们不推荐使用,太笨了,我们需要自定义网络(不用docker0,因为很多局限 不支持容器名连接访问)


### (2)自定义网络


我们来简单介绍一下四种常见的网络状态!  
 bridge:桥接,说白了就是在docker上面搭桥,比如之前一个路由器叫0.1,后面来了0203,但是他们不能互相访问,不过可以通过01作为一个桥就可以通过这个桥互相访问了。(默认)


none:不配置网络


host:主机模式(和宿主机共享网络)


container:容器内网络联通(用的少)



docker run -d -P --name tocmat01 --net bridge tomcat:7.0
docker run -d -P --name tocmat01 tomcat:7.0

这两条命令其实是一样的,因为默认的网络模式就是bridge
–net以及docker network就是我们的自定义网络模式了,服务在自定义网络下面使用。


然后我们看一下怎么用



docker network --help

Usage: docker network COMMAND

Manage networks

Commands:
connect Connect a container to a network
create Create a network
disconnect Disconnect a container from a network
inspect Display detailed information on one or more networks
ls List networks
prune Remove all unused networks
rm Remove one or more networks

Run ‘docker network COMMAND --help’ for more information on a command.


好的 可以看到增删查这种的基本操作,我们来试试体验一下。



docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

#–driver bridge 网络模式
#–subnet 192.168.0.0/16 子网
#–gateway 192.168.0.1 网关

docker network ls


![请添加图片描述](https://img-blog.csdnimg.cn/cdb7286c44974ee686cdc1bb8f17eea4.png)  
 可以看到我们设置的自定义网络。然后自己通过这个mynet启动两个tomcat,再次查看可以看到有两个新容器,ip也是自己分配的!



docker run -d -P --name tomcatzijide --net mynet tomcat:7.0

docker run -d -P --name tomcatzijide2 --net mynet tomcat:7.0


![请添加图片描述](https://img-blog.csdnimg.cn/7cd6ea0d3c834168a7f887ee68da8da0.png)



docker exec -it tomcatzijide ping tomcatzijide2
PING tomcatzijide2 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcatzijide2.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.118 ms
64 bytes from tomcatzijide2.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.070 ms

是可以通过容器名字ping的!现在不用–link就可以ping名字了


那么我们为什么要自己搭建呢?好处在哪里?


我们自定义的网络docker都已经帮着维护好了对应的关系,docker0没有这个功能,所以推荐自定义网络!比如搭建redis或者mysql的集群,要搭网络,网络是隔离的,都有自己的子网,不同的集群使用不同的网络保证安全。


### (3)网络联通


![请添加图片描述](https://img-blog.csdnimg.cn/852f1a49c8364c35bc79aa83f268652e.png)  
 docker0和mynet是两个网段不能ping通,我们要把docker0的容器可以连接到mynet而不是把两个网络打通(两个网络打通出问题,整个网络就变了)可以使用下面的命令



docker network connect mynet tomcat01

打通tomcat01到mynet


![请添加图片描述](https://img-blog.csdnimg.cn/2e9cd93f10af47359e42f586e58e50bd.png)  
 联通之后会把tomcat01加入到mynet网络下,两个打通了,也就是叫一个容器两个ip。腾讯服务也有两个:公网和私网ip



docker exec -it tomcat01 ping tomcatzijide
PING tomcatzijide (192.168.0.2) 56(84) bytes of data.
64 bytes from tomcatzijide.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.124 ms
64 bytes from tomcatzijide.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.066 ms

此时就可以ping通了,02也可以被打通。 如果跨网络操作别人,就要用connect联通!


## 实战:部署redis集群


然后我们用上面学到的知识做一个redis集群来熟悉这些指令。


### (1)创建redis网络



docker network create redis --subnet 172.42.0.0/16


### (2)通过脚本创建redis配置


如果要自己弄的话要起好久,而脚本是帮助我们快速解决的工具!(直接复制到linux下就行)



for port in ( s e q 16 ) ;   d o   m k d i r − p / m y d a t a / r e d i s / n o d e − (seq 1 6); \ do \ mkdir -p /mydata/redis/node- (seq16); do mkdirp/mydata/redis/node{port}/conf
touch /mydata/redis/node- p o r t / c o n f / r e d i s . c o n f c a t < < E O F > / m y d a t a / r e d i s / n o d e − {port}/conf/redis.conf cat << EOF >/mydata/redis/node- port/conf/redis.confcat<<EOF>/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 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done


之后去目录查看一下



cd /mydata/
cd redis/
ls
node-1 node-2 node-3 node-4 node-5 node-6


### (3)启动redis


脚本或者一个一个启动,脚本:



for port in ( s e q 16 ) ;   d o d o c k e r r u n − p 637 (seq 1 6); \ do docker run -p 637 (seq16); dodockerrunp637{port}:6379 -p 1637 p o r t : 16379 − − n a m e r e d i s − {port}:16379 --name redis- port:16379nameredis{port}
-v /mydata/redis/node- p o r t / d a t a : / d a t a   − v / m y d a t a / r e d i s / n o d e − {port}/data:/data \ -v /mydata/redis/node- port/data:/data v/mydata/redis/node{port}/conf/redis.conf:/etc/redis/redis.conf
-d --net redis --ip 172.42.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf;
done

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

TLz3ou-1715707518353)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值