docker网络

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

重在理解

1.在宿主容器查看ip

代码如下(示例):

在这里插入图片描述

2.在docker容器查看ip

这里可以使用docker exec -it 容器id ip addr来查看docker容器ip(示例):
在这里插入图片描述

3.当docker容器启动后,在宿主容器再次查看ip

代码如下(示例):
在这里插入图片描述

原理:我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡docker0,桥接模式,使用的技术是evth-pair技术!

我们发现这个容器产生的网卡,都是一对一对的
evth-pair 就是一对一对的虚拟设备接口,他们都是成对出现的,一端连着协议,一端彼此相连
正因为有这个特性,evth-pair 充当了一个桥梁,连接各种虚拟网络设备的

那么容器之间能不能ping通呢,准备两个tomcat(示例):
在这里插入图片描述
使用docker exec -it tomcat02 ping 172.17.0.2命令(示例):
在这里插入图片描述

容器通信图解(示例):
在这里插入图片描述

结论:tomcat01和tomcat02是公用的一个路由器,docker0
所有的容器不指定网络的情况下,都是docker0路由的,docker会给我们的容器分配一个默认的可用ip
只要删除容器,对应的一对网桥也会被删除

docker 使用的是Linux的桥接,宿主机中是一个docker容器的网桥docker0.

4.–link(原理就是修改hosts文件,单向)

代码如下(示例):

#这样直接使用容器名字来ping,是ping不通的
docker exec -it tomcat02 ping tomcat01
#通过--link 容器名字,就可以直接ping容器名字,而不用指定ip
#tomcat03可以访问tomcat02,tomcat02是不可以访问03的
#在tomcat03的/etc/hosts 文件中可以看到映射,和windows的hosts类似
docker run -d -P --name tomcat03 --link tomcat02 tomcat

6.创建network

网络模式(示例):

bridge: 桥接
none:不配置网络
host:和宿主机共享网络
container:容器网络连通(用的少,局限很大)

创建network并runing一个容器(示例):

#--driver bridge:桥接
#--subnet 192.168.0.0/16subnet:子网 
#--gateway 192.168.0.1:网关
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
#使用自己的network  run一个容器
docker run -d -P --name comcat-net-01 --net mynet tomcat
docker run -d -P --name comcat-net-02 --net mynet tomcat
#使用inspect查看mynet
docker network inspect mynet

会发现容器已经桥接了我们创建的mynet

在这里插入图片描述

此时使用命令
docker exec -it comcat-net-01 ping comcat-net-02
会发现可以直接ping通,并不需要 --link
好处:不同的集群使用不同的网络,保证集群是安全和健康的
当然不同的network之间也需要通信,这就涉及了网络连通的操作

在这里插入图片描述

7.网络连通

核心命令(示例):
在这里插入图片描述
准备环境(bridge就是docker0):

在这里插入图片描述
测试,打通tomcat01 – tomcat-net-01

#将tomcat01桥接到mynet
docker network connect mynet tomcat01
#查看mynet信息
docker network inspect mynet

会发现tomcat01桥接到了mynet,官方称作:一个容器两个ip
在这里插入图片描述这下tomcat01 就可以ping通mynet桥接的所有容器了
在这里插入图片描述

8.实战(搭建redis集群)

环境准备

#创建一个容器
[root@localhost home] docker network create redis --subnet 172.38.0.0/16
#for循环创建redis配置文件
[root@localhost home] for port in $(seq 1 6);\
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << 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
#循环运行容器
[root@localhost home] for port in $(seq 1 6); \
do \
docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} \
-v /mydata/redis/node-${port}/data:/data \
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf; \
done
#进入redis-1
[root@localhost home] docker exec -it redis-1 /bin/sh
#创建集群(/data #)
#注意:Redis Cluster最低要求是3个主节点
#--cluster-replicas 参数为数字,1表示每个主节点需要1个从节点。
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

总结

博客资料源自B站狂神视频

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值