Docker网络
方式1:--link
本质就是host映射(容器内 cat /etc/hosts),不推荐使用。
方式2:自定义网络
不使用docker0,因为docker0为官方网桥,其功能有局限性;比如docker0不支持容器名连接访问。
# help
docker network --help
# 查看所有docker网络
docker network ls
网络模式:
- bridge:桥接;docker默认
- host:和宿主机共享网络
- none:不配置网络
创建一个自定义网络:
好处:不同的集群使用不同的网络,保证集群的安全、健康。
-
docker network create --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet(默认是bridge类型)
-
docker network inspect mynet(即可查看刚才创建的网络信息)
-
创建容器时指定我们自定义的网络
-
docker run -d -P --name tomcat01 --network mynet tomcat
-
docker run -d -P --name tomcat02 --network mynet tomcat
-
# 即可看到tomcat01和tomcat02的网络用的就是我们分配的 docker network inspect mynet
-
# 可以看到可以ping通 docker exec -it tomcat01 ping tomcat02
-
网络连通:
容器tomcat01
和tomcat-mynet-01
对应不同的网络,如下:
容器tomcat01 --> docker0网络(172.18.0.1)
容器tomcat-mynet-01 --> mynet网络(192.168.0.1)
可以知道 tomcat01 是连不通 tomcat-mynet-01 的,那么该怎么做呢?
docker network connet mynet tomcat01
相当于给 tomcat01 加了一个 ip 地址(一个容器,两个ip)。
3.实战:搭建redis集群
-
1.创建网卡
docker network create redis --subnet 172.20.0.0/16 --gateway 172.20.0.1
-
2.通过脚本创建6个redis配置
for i in $(seq 1 6); \ do \ mkdir -p /test/redis/node-${i}/conf touch /test/redis/node-${i}/conf/redis.conf cat << EOF > /test/redis/node-${i}/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.20.0.1${i} cluster-announce-port 6379 cluster-announce-bus-port 16379 appendonly yes EOF done
-
3.启动6个redis
for i in $(seq 1 6); \ do \ docker run -p 637${i}:6379 -p 1637${i}:16379 --name redis-${i} \ -v /test/redis/node-${i}/data:/data \ -v /test/redis/node-${i}/conf/redis.conf:/etc/redis/redis.conf \ --network redis --ip 172.20.0.1${i} \ -d redis redis-server /etc/redis/redis.conf done
-
4.进入任一redis容器
docker exec -it redis-1 /bin/sh
-
5.创建集群
redis-cli --cluster create 172.20.0.11:6379 172.20.0.12:6379 172.20.0.13:6379 172.20.0.14:6379 172.20.0.15:6379 172.20.0.16:6379 --cluster-replicas 1
-
客户端连接,-c 代表连接集群
redis-cli -c