【Docker】9、Docker网络详解:docker0、link、自定义网络、网络连通、集群部署

1、Docker0

清空宿主机中所有镜像、容器;然后查看网络IP

# 删除所有容器
docker rm -f $(docker ps -aq)

# 删除所有镜像
docker rmi -f $(docker images -aq)

# 查看IP
ip addr

在这里插入图片描述

测试

  • 新建并启动Tomcat容器
docker run -d --name tomcat01 tomcat

在这里插入图片描述

  • 宿主机中查看IP变化

在这里插入图片描述

  • 尝试进入tomcat01容器查看内部IP
docker exec -it tomcat01 ip addr
# 执行时,发现出错了,OCI runtime exec failed;因为tomcat容器的基础镜像是精简版,里面没有ip addr命令,要手动安装

在这里插入图片描述

  • 容器内手动安装ip相关的命令
# 手动安装ip相关的命令
# 进入容器
docker exec -it tomcat01 /bin/bash

# 容器内执行
apt update
# 执行 apt update ...

# 容器内执行
apt install -y iproute2
# 执行 apt install -y iproute2 ...

在这里插入图片描述

  • tomcat01容器内查看IP
# 查看容器内IP
ip addr

在这里插入图片描述

  • 宿主机 ping 容器
ping 容器IP

在这里插入图片描述

  • 容器 ping 宿主机
# 先在容器中安装ping命令
# 在容器中依次执行如下两个命令
apt-get update
apt install iputils-ping

# ping
# 姑且把172.17.0.1当成宿主机,其实是docker0,它和宿主机不完全一样
ping 172.17.0.1

在这里插入图片描述

原理

每启动一个docker容器,docker服务器就会给docker容器分配一个ip,只要安装了docker服务器,就会有一个docker0桥接模式,使用的是veth-pair技术!

  • 再启动一个容器tomcat02
docker run -d --name tomcat02 tomcat

在这里插入图片描述

在这里插入图片描述

  • tomcat02容器 ping tomcat01容器
# tomcat02 内依次安装ip、ping命令

# tomcat02容器内执行
# ip 命令
apt update
apt install -y iproute2

# ping 命令
apt-get update
apt install iputils-ping

# ping
ping 172.17.0.2

在这里插入图片描述

  • tomcat01容器 ping tomcat02容器
# 进入tomcat01,并ping tomcat02
docker exec -it tomcat01 ping 172.17.0.3

在这里插入图片描述

在这里插入图片描述

总结

在这里插入图片描述

  • Docker中所有网络接口都是虚拟的,虚拟的转发效率高
  • 只要容器删除,对应的网桥也就没了!

在这里插入图片描述

在这里插入图片描述

2、–link

  • --link 容器名
  • 可以实现通过容器名称来连接,实质就是在etc/hosts中添加映射
  • 不建议使用--link
# 直接ping容器名称,ping不通
docker exec -it tomcat02 ping tomca01
ping: tomca01: Name or service not known


# 运行一个tomcat03 --link tomcat02 
docker run -d -P --name tomcat03 --link tomcat02 tomcat
5f9331566980a9e92bc54681caaac14e9fc993f14ad13d98534026c08c0a9aef

# 用tomcat03 ping tomcat02 可以ping通
# tomcat03中要支持ping命令
docker exec -it tomcat03 ping tomcat02
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.115 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=2 ttl=64 time=0.080 ms

# 反向操作
# 用tomcat02 ping tomcat03 ping不通;因为tomcat02中没有配置

探究

在这里插入图片描述

docker network inspect 网络ID

在这里插入图片描述

docker inspect tomcat03

在这里插入图片描述

# 查看tomcat03里面的/etc/hosts发现有tomcat02的配置
docker exec tomcat03 cat /etc/hosts

在这里插入图片描述

3、自定义网络

  • 自定义网络,不使用docker0!推荐使用!
  • docker0问题:不支持容器名连接访问!
  • 基本命令
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

在这里插入图片描述

  • 查看所有的docker网络
docker network ls

在这里插入图片描述

  • 网络模式
    • bridge :桥接 docker(默认,自己创建也是用bridge模式)
    • none :不配置网络,一般不用
    • host :和所在主机共享网络
    • container :容器网络连通(用得少!局限很大)

测试

# 直接启动的命令 --net bridge,而这个就是 docker0
# bridge 就是 docker0
# 下面两条命令等价
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net bridge tomcat

# docker0,特点:默认,容器名(域名)不能访问。 --link可以打通连接,但是麻烦!
  • 自定义网络
# --driver  : 网络模式
# --subnet  : 子网掩码
# --gateway : 网关
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

在这里插入图片描述

  • 查看自定义网络信息
docker network inspect mynet

在这里插入图片描述

  • 用自定义网络启动两个tomcat容器
docker run -d -P --name tomcat-net-01 --net mynet tomcat
docker run -d -P --name tomcat-net-02 --net mynet tomcat

在这里插入图片描述

  • 再次查看自定义网络信息
docker network inspect mynet

在这里插入图片描述

  • 测试自定义网络中两个容器间的连接
# 首先在两个容器中安装ping命令
apt-get update
apt install iputils-ping
# tomcat-net-01 ping tomcat-net-02
# ping ip
ping 192.168.0.3
# ping 容器名
ping tomcat-net-02

在这里插入图片描述

在这里插入图片描述

好处:

不同的集群使用不同的网络,保证集群是安全和健康的

在这里插入图片描述

4、网络连通

docker network connect 网络名或ID 容器名或ID

使不同网段内的容器互通

在这里插入图片描述

  • 当前容器网络情况

在这里插入图片描述

在这里插入图片描述

  • tomcat01 连通 mynet

    要将tomcat01 连通 tomcat-net-01 ,连通就是将 tomcat01加到 mynet网络;

    一个容器两个ip(tomcat01)

docker network connect mynet tomcat01

在这里插入图片描述

  • 查看mynet网络
docker network inspect mynet

在这里插入图片描述

在这里插入图片描述

  • 网络连接图

    • tomcat01与mynet连通 ,此时tomcat01 和 mynet中的任意主机可以连通了
    • tomcat02与mynet依然是无法连通的

在这里插入图片描述

5、实战:部署Redis集群

在这里插入图片描述

# 创建网卡
docker network create redis --subnet 172.38.0.0/16
# 通过脚本创建六个redis配置
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

# 通过脚本运行六个redis
for port in $(seq 1 6);\
docker run -p 637${port}:6379 -p 1667${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
docker exec -it redis-1 /bin/sh #redis默认没有bash
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

在这里插入图片描述

在这里插入图片描述

docker搭建redis集群完成!

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

土味儿~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值