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

news2025/7/5 11:19:51

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

  • Docker原生网络
    • bridge
    • Host
    • none
  • Docker自定义网络
    • 自定义bridge
    • overlay
    • macvian
    • docker network所有基本命令
  • Docker容器通信
    • 双冗余机制
  • 跨主机容器网络
  • 一些遗留错误解决
    • 错误1
    • 错误2
    • 错误3
    • 错误4

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
  • 两台机器不冲突
    在这里插入图片描述
  • 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源无法下载
  • 解决:未挂载
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/5416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何搭建node_exporter

如何搭建node_exporter 1.观看条件 1.假设你已经看过上一篇文章 《如何搭建普罗米修斯 Prometheus》 2.假设你已经会搭建普罗米修斯(promethus) 3.上面两个假设,只要满足一个。那你看这篇文章就没什么压力了 2.node_exporter是啥 node_…

UI自动化测试之selenium工具(浏览器窗口的切换)

目录 前言 方法 实例 ①示例1 ②示例2 附加知识 结语 前言 1、在浏览网页的时候,有时点击一个链接或者按钮,会弹出一个新的窗口。这类窗口也被称之为句柄(一个浏览器窗口的唯一标识符,通过句柄实现不同浏览器窗口之间的切…

C++Qt开发——文件操作

简介 QT中的IO操作通过统一的接口简化了文件与外部设备的操作方式,QT中文件被当作一种特殊的外部设备,文件操作与外部设备操作相同。IO操作的本质是连续存储空间的数据读写。 1. IO设备的类型 顺序存取设备:只能从头开始顺序读写数据&#…

python游戏库pygame经典教程

目录 一.Pygame程序基本搭建过程 1.初始化化程序 2.创建Surface对象 3.事件监听 4.游戏循环 二.Pygame Display显示模块详解 1.将Surface对象粘贴至主窗口上 2.设置窗口主窗口 3.填充主窗口背景,参数值RGB 4.设置窗口标题 5.更新屏幕内容 6.pygame.display其他方…

C# VS2022 EF6 + Mysql8.0.31 CodeFirsts使用配置

文章目录环境安装Mysql8.0.31下载Mysql连接器Net版本安装VS2022创建工程添加Nuget包修改配置文件如下准备工作,创建一个Dbcontext类,代码如下打开程序包控制台输入命令第一步第二步第三步第四步简要介绍一下如何添加一个表思路添加User实体类修改dbconte…

NodeMcu arduino ESP8266 搭建mqtt服务(然也物联)以及使用

NodeMcu arduino ESP8266 搭建mqtt服务以及使用 本文章学习借鉴于太极创客团队,以表感谢。官网http://www.taichi-maker.com/ 操作步骤:我们注册然也物联平台,申请社区版本,进行测试。 文章目录NodeMcu arduino ESP8266 搭建mqtt…

【Python基础篇021】黏包现象丨udp的socket服务

🌠前言 基于udp的socket服务有什么特点?黏包现象是什么?又是如何产生的?udp和tcp哪种会有黏包现象?看完这篇文章相信你会有所收获。 目录 🌠一、基于udp的socket服务 🌠二、TCP中的黏包现象 …

保边滤波之引导滤波与领域转换滤波

(1)引导滤波 局部窗口内输出图像O和引导图像G成线性关系OiakGibk, ∀i∈Ωk 假设输出图像O和输入图像I之间的关系为OiIi−ni,噪声最小即最小化ni,即 每个像素点i包含于多个窗口Ωk,每个窗口都会得到一个a、b值&#…

RK3399平台开发系列讲解(I/O篇)Linux最大文件数的限制机制

平台内核版本安卓版本RK3399Linux4.4Android7.1🚀返回专栏总目录 文章目录 一、Linux最大文件数的限制机制1.1、申请fd过程分析1.2、申请file内核对象过程分析沉淀、分享、成长,让自己和他人都能有所收获!😄 📢在Linux上能打开多少个文件,有两种限制: 第一种:进程级…

十、组件(8)

本章概要 递归组件异步更新队列Teleport 10.11.2 递归组件 组件可以在自己的模板中递归调用自身,但这需要使用 name 选项为组件指定一个内部调用的名称。 当调用 Vue.createApp({}).component({})全局注册组件时,这个全局的 ID 会自动设置为该组件的n…

【云原生】Docker的基本使用方法与优势

🍬Docker的基本使用方法和优势🥙一、简介🥪二、优势🌮三、基本使用🥙一、简介 Docker是基于Go语言实现的开源应用容器引擎,通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的应…

配置Mysql与注册登录模块

后端职责可以粗浅的理解为处理各种数据,那么处理数据就可以从下面几个方面考虑: 数据的来源 根据不同的数据来源,我们探究两个方面的内容: 数据的形式 数据的操作 当然,一通操作以后,各个…

操作系统:进程与线程大解析

一文就懂进程与线程一、进程/线程相关概念进程中断并发与并行并发并行线程线程分类多进程和多线程上下文进程上下文进程上下文切换的场景线程上下文扩展:协程线程与协程的区别:协程的优势:二、进程/线程区别与关系进程和线程的区别进程和线程…

【C/C++】你知道位段吗?段位?不,是位段!

本章重点 什么是位段? 位段的内存分配 位段的跨平台问题 位段的应用 上一篇文章我详细介绍了第一种自定义类型--结构体。本章节我们认识一下另外一种自定义类型-- 位段。因为讲解位段时需要用到一点结构体的知识,所以我直接把链接放到这里可按需直接…

Swagger

一、Swagger简介 1.1、前言 前后端分离 Vue SpringBoot 当前主流的前后端分离技术栈 后端时代 前端只用管理静态页面,如html,其余的交给后端,而后端通过模板引擎,如jsp进行管理 前后端分离时代 后端:后端控制层&…

jsp健身房会员管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 健身房会员管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,…

S7-200SMART PLC模拟量应用及创建库文件的具体方法

S7-200SMART PLC模拟量应用及创建库文件的具体方法 具体使用方法可参考以下内容: 模拟量计算公式: OUT = (In_chx - In_RawMin) * (In_EuMax - InEuMin) / (In_RawMax -In_RawMin) + In_EuMin 其中: OUT:转换后的实际值; In_chx:模拟量采集值; In_RawMax:原始数据的最大…

小侃设计模式(九)-组合模式

1.概述 组合模式(Composite Pattern)又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以表示“整体-部分”的层析关系,使用户对单个对象和组合对象具有一致的访问性,是结构型设计模式的一…

Windows下一键搭建MBP系统,支持多种版本任意选择,免费永久使用,多系统使用新方案

Windows下一键搭建MBP系统,支持多种版本任意选择,免费永久使用,多系统使用新方案。 安装起来相当的简单,简单到只需要执行一行命令即可完成。使得游戏和开发可以兼顾,并且不用花费数万米的可以使用MBP。不仅如此,经过各项专业的测试,还有接近于原生的MBP系统性能。 效…

WinHex(二)

目录 1.我们打开WinHex,点击打开磁盘按钮 2.不同的文件在WinHex中有不同的文件显示 3.WinHex简单使用 4.删除之前所创建的虚拟磁盘 1.我们打开WinHex,点击打开磁盘按钮 2.不同的文件在WinHex中有不同的文件显示 3.WinHex简单使用 4.删除之前所创建的虚拟…