[[docker 使用笔记②]]
docker网络
自定义网络
docker网络的类型定义
1 2 3 4 5 6 7 8 9 10 11
| [root@micah-first ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 13ea7270b701 bridge bridge local bee2007cde95 host host local 60db0acae408 none null local
#bridge为 docker0 #host 为宿主机共享 #none 为不配置网络 #container 为容器模式(不推荐) #在这里 我们可以创建一个属于自己的网络,因为docker0有些东西不好用
|
创建自定义网络
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| [root@micah-first ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet 8e930d061d6415711b83fb4d3bcb99d35b8322955351cba3e56819ad212d0f01 [root@micah-first ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 13ea7270b701 bridge bridge local bee2007cde95 host host local 8e930d061d64 mynet bridge local 60db0acae408 none null local
#这样就创建好了一个自定义网络,参数解答
--driver 类型 --subnet 网络范围/子网编码个数(32位) --gateway 网关
#总而言之,创建一个网络,类似于vm虚拟机的网络配置
#创建好了之后,我们创建俩个容器进行互ping名字,发现可以ping通
[root@micah-first ~]# docker run -it -P --network mynet --name centos04 centos /bin/bash [root@63886a579a98 /]# ping centos03 PING centos03 (192.168.0.2) 56(84) bytes of data. 64 bytes from centos03.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.093 ms
|
补充
在docker网络中,每个不同的网络对应一连串访问,在访问与访问之间是互相隔离的,但是可以建立一个通道,下面会讲
网络连通
在docker之中,两个网段是不可以互相通信的,但是有一种操作可以使一个容器与一个网段联通
1 2 3 4 5 6 7 8 9 10 11 12 13
| docker network connect 网段名字 容器名字# 连通命令
#我们先创建一个centos05 docker run -it -P --name centos05 centos /bin/bash #此时该容器是处于docker0网络下的,我们输入 docker network connect mynet centos05 #此时再ping centos03 就可以ping通了
[root@micah-first ~]# docker run -it -P --name centos05 centos /bin/bash [root@c4741c39226f /]# ping centos03 PING centos03 (192.168.0.2) 56(84) bytes of data. 64 bytes from centos03.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.096 ms
|
原理解析
使用连通命令时,会将该容器添加一个属于命令网段的ip,就做到了容器连接网段
![image]()
实战部署redis集群
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| #先创建一个名叫redis 的网络 docker network create redis --subnet 172.38.0.0/16
#使用shell脚本快速创建六个redis的配置 for port in $(seq 1 6);#循环六次 \ do \ mkdir -p /home/redis/node-${port}/conf touch /home/redis/node-${port}/conf/redis.conf cat << EOF> /home/redis/node-${port}/conf/redis.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
#使用shell快速创建六个容器 for port in $(seq 1 6); \ do \ docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} \ -v /home/redis/node-${port}/data:/data \ -v /home/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \ -d --network redis --ip 172.38.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf done #进入容器 docker exec -it redis-1 /bin/sh #创建集群 redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1 #进入集群控制台 redis-cli -c
#查看集群信息 cluster info #查看集群节点 cluster nodes
|