• Docker原生网络、自定义网络、Docker容器通信、跨主机容器网络


    Docker原生网络

    • 在这里插入图片描述
    • docker安装时会创建一个名为docker0 的Linux bridge,新建的容器会自动桥接到这个接口。
    • 转发功能借助了iptables

    bridge

    • bridge模式下,容器内没有一个公有IP,只有宿主机可以访问,外部主机不可见 容器可以通过宿主机的nat规则访问外网
    • 在这里插入图片描述
    • 把linux内核(IP服务必须要打开)当成一个路由器来看待,容器之间的通信是通过docker0网关来做通信。同一个VLAN里面不做路由。
    • 解决出去,但进来很难,外网对IP无法确定在这里插入图片描述在这里插入图片描述
    • 拉取nginx镜像
    • 查看桥接信息,生成了新的接口——veth6974209
      在这里插入图片描述
    • 一端连接宿主机,一端连接容器内
      在这里插入图片描述
    • 01宿主机,03容器ID(自动分配)
      在这里插入图片描述
    • 容器的ip是动态分配的,删除容器,则IP地址会回收
    • 网关是宿主机
      在这里插入图片描述
    • 目前没有其他服务
    • 共享宿主机的

    Host

    • 缺少网络隔离性,资源只有一份在这里插入图片描述
    • 对于桥接而言是一个很好的补充
    • 容器网络和宿主机网络共享相同网络栈
    • 该网络模式在创建容器时需要指定
    • –network=host\n
    • 只有bridge不用指定,是默认的
    • 目前宿主机的80端口没有被占用,所以容器run之后就可以用80
    • master
      在这里插入图片描述
    • 容器进程
      在这里插入图片描述
      在这里插入图片描述
    • 容器进程(相对隔离)
      在这里插入图片描述
    • 这种容器只能启动一个,web2进程被挤掉直接下线
      在这里插入图片描述
      在这里插入图片描述

    none

    • none指禁用网络功能,只有io接口,在容器创建时使用
      在这里插入图片描述

    Docker自定义网络

    自定义网络模式,docker提供了三种自定义网络驱动:
    bridge驱动类似默认的bridge网络模式,但增加了一些新的功能,overlay和macvlan是创建垮主机网络
    建议使用定义的网络来控制哪些容器可以互相通信,还可以自动DNS解析容器名称到IP地址

    自定义bridge

    • harbor仓库是有解析的,harbor有网络是自己创建的。
      在这里插入图片描述
      在这里插入图片描述
    • harbor还是通过桥接,但自己定义的就多个解析
    • 通过名称进入,没有解析
      在这里插入图片描述
      在这里插入图片描述
    • 共享的是宿主机DNS,默认没有解析
      在这里插入图片描述
    • 这时,我们需要自定义一下使其拥有解析
    • 在这里插入图片描述
    • 这里的桥接是没有区别的,但自定义的桥接里面多了DNS解析
    • 容器的IP是动态分配的,如果停了,就立刻分配给别人
    • 重启,IP有可能以及分配给别的主机
    • 名称是不会冲突的
    • ID要唯一不然会冲突
      在这里插入图片描述
    • 自定义网络就是通过名称来做的解析
    • IP动态分配,是可以由名字来访问到的
    • 删除容器
      在这里插入图片描述

    overlay

    • 非底层而是应用层

    macvian

    • 底层去用
    • 自定义网络怎么创建
      在这里插入图片描述
    • 自定义的时候可以指定网络还可以指定网关
    • 桥接不能手动指定IP
      在这里插入图片描述
    • 17、18
      在这里插入图片描述
    • 使用该网络,打入后台
      在这里插入图片描述
    • 成功分到网络
      在这里插入图片描述
    • 可直接访问
      在这里插入图片描述
    • 宿主机使其网关,所以肯定能访问
    • 一定使用同一个网络(容器的不同网络之间默认是隔离的)
    • 分到的IP地址都是一个段的
      在这里插入图片描述
    • 停掉web1,启用web2
    • 这时候他的IP是原来web1的
      在这里插入图片描述
      在这里插入图片描述
    • ping web1拼不通,web2可以通
      在这里插入图片描述
    • 再次开启web1
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    • 再次启动web1又可以ping通
    • 即使原先容器IP变化,依然可以通(容器名称始终没有变化)

    • web1和web2都桥接在了宿主机新建的接口上
    • mynet1分配到的
      在这里插入图片描述
    • 他的网段和网关
      在这里插入图片描述
    • 创建mynet2,设置网段和网关
      在这里插入图片描述
      在这里插入图片描述
    • 把web3桥接到mynet2上nginx
      在这里插入图片描述
    • 它们之间是不互通的因为不在一个段里
      在这里插入图片描述
      在这里插入图片描述
    • 表面看是没有区别的,实际上指定了IP
      在这里插入图片描述
    • 可以手动指定IP
      在这里插入图片描述
      在这里插入图片描述
    • 重启容器,IP是否会变化
      在这里插入图片描述
      在这里插入图片描述
    • 创建被禁止
      在这里插入图片描述
    • 因为在创建mynet1时,没有手动指定子网,就无法手动指定IP
      在这里插入图片描述
      在这里插入图片描述
    • 桥接到不同网桥上的容器彼此是不互通的
      在这里插入图片描述
    • "–rm"交互完直接回收
      在这里插入图片描述
    • 防火墙里面默认做的就是隔离
      在这里插入图片描述
    • 若想让其通信
    • 解决方法就是加多个网卡
      在这里插入图片描述
    • 创建一个busybox
      在这里插入图片描述
    • 隔离的无法通
      在这里插入图片描述
    • 想让容器连接,在插一块网卡
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    • 在这里插入图片描述
    • 两块网卡
      在这里插入图片描述

    docker network所有基本命令

    • 在这里插入图片描述

    Docker容器通信

    • 在这里插入图片描述
      在这里插入图片描述
    • 容器和宿主机使用相同网络栈
    • 容器和容器之间使用相同网络栈
    • 清空环境
      在这里插入图片描述
    • demo3要和demo2一样
      在这里插入图片描述
      在这里插入图片描述
    • demo3没有
      在这里插入图片描述
    • 当前开的容器和指定的容器是一个网站
      在这里插入图片描述
    • 在这里插入图片描述
    • 网络栈资源唯一,高效回环
    • 使用lamp架构
    • vm1 nginx
    • vm2 mysql
    • vm3 php
    • 端口不一样,但是连接时可以通过localhost连接
    • 解决容器之间的超亲密关系,有大量的通信需求。
    • 不常用
      在这里插入图片描述
    • 除了提供解析还可以注入相应的变量
    • 链接到demo1上
      在这里插入图片描述
    • 会把变量(比如IP怎么连接)全部注入进来
      在这里插入图片描述
    • 别名和容器名都可以Ping
      在这里插入图片描述
    • 它是通过给hosts文件直接加了个解析
      在这里插入图片描述
    • 停掉demo2,开启demo3,就会占用IP
      在这里插入图片描述
      在这里插入图片描述
    • 再次启动demo2,获取新的IP
      在这里插入图片描述
      在这里插入图片描述
    • IP变化,解析已经动态变更,不依赖于DNS
      在这里插入图片描述
    • 网络使用的是自定义而非桥接
      在这里插入图片描述
    • 而env变量是不变的
      在这里插入图片描述
    • 容器在访问外网的时候该如何出去
      在这里插入图片描述
    • 数据包出去会通过网关0.1,0.1就会回到docker0
      在这里插入图片描述
    • 宿主机的数据包可以出去,容器就可以出去
    • 宿主机上不了网,容器也无法出去
    • 宿主机NAT表中
      在这里插入图片描述
    • 分别是mynet1和2
    • 做了伪装,SNAT
      在这里插入图片描述
    • 进来没问题出去会有问题
    • 端口映射
    • 在这里插入图片描述
    • 清空环境容器
      在这里插入图片描述
    • “-p”端口映射
      在这里插入图片描述
    • 可访问宿主机
      在这里插入图片描述
    • 容器已经在运行了
      在这里插入图片描述
    • 在容器内打开一个新的shell可以进行交互
      在这里插入图片描述
      在这里插入图片描述
    • 退出交互就没有了
    • 80宿主机已被占用,我们可以用81
      在这里插入图片描述
      在这里插入图片描述
    • 通过非交互式把页面传过去
      在这里插入图片描述
    • 把本地的首页拷贝到容器内
      在这里插入图片描述
    • 目标地址重定向
      在这里插入图片描述
    • 在这里插入图片描述
    • 官方最开始没docker-proxy,使用的是iptables
    • docker-proxy是一种双冗余机制,iptables不生效可以使用docker-proxy;docker-proxy不生效可以使用iptables。有一个在都可以生效
    • 删除81策略
      在这里插入图片描述
    • 仍然可以访问
      在这里插入图片描述
    • 本机也可以访问
      在这里插入图片描述
    • docker-proxy还在
      在这里插入图片描述
    • 干掉docker-proxy
      在这里插入图片描述
      在这里插入图片描述
    • 这时本机也无法访问
      在这里插入图片描述
    • 外部也不行
      在这里插入图片描述
    • 重启容器,iptables里面的策略会重新生成
      在这里插入图片描述
    • 重新生效81端口
      在这里插入图片描述
      在这里插入图片描述

    双冗余机制

    • 在这里插入图片描述

    跨主机容器网络

    • 想让server1和server2两个节点容器互通
      在这里插入图片描述
      在这里插入图片描述
    • 使用的是linux内核本身的功能在这里插入图片描述
    • stop harbor不然接口过多
    • 网络接口已经不在了
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    • 打开混杂模式
      在这里插入图片描述
    • server2也要同样操作
      在这里插入图片描述
    • up通,down物理链路不通
    • 指定不一样的驱动,原先都是桥接
      在这里插入图片描述
    • 该模式下管理员自己控制,直接使用物理接口
    • “-d"指定驱动,”-o"指定负极
      在这里插入图片描述
    • 启动一个容器
      在这里插入图片描述
      在这里插入图片描述
    • 获取到0.2
    • 将不用的网络回收
      在这里插入图片描述
    docker network create -d macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.1 -o parent=eth0 macvlan1
    
    • 1
    • 两台机器不冲突
      在这里插入图片描述
    • server1自动分配,server2手工分配
    • docker要保证物理链路畅通,出去之后就不是docker管辖的了
    • 创建macvlan1之后没有桥接接口
      在这里插入图片描述
    • server2也没有
      在这里插入图片描述
      在这里插入图片描述
    • 通过server2访问curl web1
    • 下载busyboxplus,带工具链可以curl
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    • 无需NAT
      在这里插入图片描述
    • 无NAT链
      在这里插入图片描述
      在这里插入图片描述
    • 支持vlan子接口
    • eth0.1子接口
      在这里插入图片描述
      在这里插入图片描述
    • 指定使用网址
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    • server2能ping同一个vlan
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    • 不同vlan也能ping
      在这里插入图片描述
    • 加两块网卡,不同容器获取的地址不一样
    • macvlan动态分配网卡冲突
    • 删除web1
      在这里插入图片描述
      在这里插入图片描述
    • 这两个容器都在server1上,可访问
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    • 在这里插入图片描述
      在这里插入图片描述

    一些遗留错误解决

    • harbor down了之后,重启要对其再次认证,才能正常使用

    错误1

    • 在这里插入图片描述
    • 解决
      ./install.sh

    错误2

    • 无法登陆docker
      在这里插入图片描述
    • 解决
    • 域名文件修改指向
      在这里插入图片描述
    • 重启harbor
      在这里插入图片描述
      在这里插入图片描述

    错误3

    • 仍然不能拉取(重启之后)
    • 再次认证就解决了
      在这里插入图片描述
      在这里插入图片描述

    错误4

    • yum源无法下载
    • 解决:未挂载
      在这里插入图片描述
  • 相关阅读:
    Motor头文件和源文件解读
    从原理到实战,详解XXE攻击
    微服务中feign远程调用相关的各种超时问题
    基于SSH的商城管理系统
    【AUTOSAR-CanSM】-2.5-参数CanSMBorTxConfirmationPolling详解
    功能测试(三)—— web项目抢购模块测试
    Lambda架构与Kappa架构的特性对比
    PowerDotNet平台化软件架构设计与实现系列(17):PCRM个人用户管理平台
    单机nacos本地可以连接,但是springboot连接错误
    算法通关村第七关|黄金挑战|迭代实现二叉树的前、中、后序遍历
  • 原文地址:https://blog.csdn.net/weixin_44891093/article/details/127792049