Docker——Docker网络(Network)、Docker-Redis集群部署

本文详细介绍了Docker网络的基础知识,包括Docker0桥接网络、容器间的通信方式、网络信息查看以及自定义网络的创建和使用。通过实例展示了如何使用docker0进行容器互联,以及如何通过自定义网络实现不同网段的连通。此外,还探讨了使用--link选项的限制,并推荐使用自定义网络以实现更安全的集群隔离。最后,文章通过实战演示了Redis集群的部署,验证了网络配置的高可用性。
摘要由CSDN通过智能技术生成

理解Docker0

先把之前的容器和镜像全部删除
docker rm -f $(docker ps -qa)
docker rmi $(docker images -qa)

查看网络信息
ip a
里面有一个docker0
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:83:27:d2:d4 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

创建一个容器
docker run -d -P --name tomcat01 tomcat

容器外的docker0和容器内网卡的地址都是同一个网段
[root@docker ~]# docker exec -it tomcat01 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
5: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

我们在容器外ping容器内的地址
[root@docker ~]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.131 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.119 ms

linux可以ping通docker容器内部

docker network ls可以查看网络方式
[root@docker ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
bb3aac34755d   bridge    bridge    local
faa06498f8b8   host      host      local
674f1e2caf4c   none      null      local

常见的容器之间通信方式

同一个宿主机内部

  • 我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡 docker0
  • 网卡之间是桥接模式 通过docker network ls 可以查看,使用的技术是evth-pair技术
  • 通过虚拟交换机来实现容器间通信
    在这里插入图片描述
再创建一个容器
docker run -d -P --name tomcat02 tomcat
再次查看网络信息
ip a

6: veth091d8e1@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 62:f8:47:a3:d9:be brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::60f8:47ff:fea3:d9be/64 scope link 
       valid_lft forever preferred_lft forever
8: veth9a5c240@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 4e:42:99:58:92:f1 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::4c42:99ff:fe58:92f1/64 scope link 
       valid_lft forever preferred_lft forever

发现又多了一张网卡
  • 我们发现这个容器带来网卡,都是一对对的
  • evth-pair 就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连
  • 正因为有这个特性,evth-pair充当一个桥梁,连接各种虚拟网络设备的
  • openstac,Docker容器之间的连接,OVS的连接,都是使用evth-pair技术
测试两个容器之间能否通信
[root@docker ~]# docker exec -it tomcat01 ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.127 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.051 ms

[root@docker ~]# docker exec -it tomcat02 ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.112 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.063 ms

在这里插入图片描述

  • tomcat01和tomcat02是公用的一个路由器,docker0
  • 所有的容器不指定网络的情况下,都是docker0来路由,docker会给我们的容器分配一个默认的可用ip
  • Docker使用的是Linux的桥接,宿主机中是一个Docker容器的网桥 docker0
    在这里插入图片描述
  • Docker 中所有的网络都是虚拟的。虚拟的转发效率高
  • 只要容器删除,对应的网桥就没了
docker rm -f $(docker ps -qa)

ip a

容器网络信息查看

ip link show

docker network ls

docker network inspect bridge

容器互联

我们编写了一个微服务,database url=ip ,项目不重启,数据库ip换掉了,我们希望可以处理这个问题,可以使用容器名字来进行访问容器?
这时候

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值