docker(五) docker网络

12 篇文章 0 订阅

docker网络

理解docker0

image-20220419010300525

三个网络

docker是如何处理容器之间的访问的

启动一个容器

查看容器内的地址以及网卡名称

image-20220419103621743

在查看宿主机的网络信息

image-20220419103743689

也就是说,每启动一个docker容器,docker就会给docker容器分配一个ip,我们呢只要安装了docker,就会有一个网卡docker0,使用的是veth-pair技术

这些创建容器带来的网卡都是一对一对的,这就是veth-pair技术,他们都是成对出现的,一段连接着协议,一段彼此相连.正因为这种特性,veth-pair充当一个桥梁,连接各种虚拟网络设备.

image-20220419110547406

容器之间通过docker0采用桥接模式, docker0和物理网卡直接NAT连接

可以通过iptables -t nat -vnL DOCKER命令查看外部访问容器的iptables转发规则

可以通过iptables -t nat -vnL POSTROUTING命令查看容器访问外部的iptables转发规则

image-20220429123250038

–link

创建一个容器命令centos01 在创建一个centos02,执行命令ping centos01,此时是无法联通的.

这时候在通过添加 --link centos01 参数 创建一个centos03, 通过ping centos01命令,发现是可以通信的.

image-20220419113816981

通过–link 可以解决网络联通问题,此解决方式不可以相互连通.只有加上规则的一方可以

通过docker network inspect 网络id 可以查询网络具体信息

image-20220419124045623

同时可以看到该网络下所有容器的网络信息

–link 连接原理,在添加参数–link的容器中,可以看到在/etc/hosts文件下,已经把指向机器的名称以及容器id都做了地址解析

image-20220419124817175

如手动在容器中修改/etc/hosts文件,也可以达到相同的效果

实际上docker已经不推荐使用–link了

推荐使用自定义网络,不适用docker0

docker0的问题:他不支持容器名连接访问

自定义网络

容器互联

image-20220419134600839

查看所有的docker网络

docker network ls

image-20220419134741414

docker的网络模式

  1. bridge: 桥接docker(默认)
  2. none: 不配置网络
  3. host: 和宿主机共享网络
  4. container:容器内网络联通(局限比较大)

我们自己创建网络也使用bridge模式

#我们直接启动的命令, 实际上是带有 --net bridge 这个参数的,这个就是我们的docker0

docker run -d -P --name centos01 centos


#docker0特点,默认,域名是不能访问的,只有使用--link可以打通单项连接
可以通过 docker network create --help 命令来查看创建

重要参数如下

#综上,可以通过以下命令创建自定义网络
docker network create --driver bridge --subnet 192.169.166.0/16  --gateway 192.169.0.1 mynet   

image-20220419141000561

image-20220419141638849

##通过--net指定网络
docker run -it  --name centos01 --net mynet centos /bin/bash

自定义的网络是支持容器名之间的互ping

image-20220419142216888

自定义的网络docker都已经帮我们维护好了对应的关系,推荐使用这样的网络

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

#不同网络之间的容器默认是不通的,可以通过docker network connect [网络] [容器名] 命令进行联通

docker network connect mynet quizzical_babbage
连接相当于把这台机器加进了需要连接的网络中,类似一台机器两个网卡

可以看到这个容器现在内部有两个网卡image-20220419143633249

也就是说如果需要跨网络操作别的网络集群,就需要使用docker network connect 进行联通

docker0默认地址段和主机网段冲突解决方案

  1. 修改/etc/docker/daemon.json文件,加入以下代码
{
"default-address-pools":
[
{"base":"172.100.0.0/16","size":24}
]
}
###如果有镜像加速器 请加在花括号中,注意要添加","结尾

  1. 删除docker0

    ip link delete docker0
    
  2. 重新加载并重启docker

    systemctl daemon-reload
    syst
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小张大师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值