【Docker】Network网络

文章目录

    • 网络情况
      • 查看宿主机网络情况 `ifconfig`
      • 查看docker网络模式命令 `docker network ls`
      • 常用基本命令
        • 查看网络 `docker network ls`
        • 查看网络源数据 `docker network inspect XXX网络名字`
        • 创建网络 `docker network create test_network`
        • 删除网络 `docker network rm XXX网络名字`
      • network的作用
    • 网络模式
      • 总体介绍(五种网络模式)
      • 容器实例内默认网络IP生产规则
      • bridge 网桥模式
      • host 宿主机模式
      • none 无网络
      • container 容器模式
      • 自定义网络
    • Docker平台架构图解
      • 整体架构
      • Docker 运行的基本流程

网络情况

网络模式

  • 总体介绍(五种网络模式)

    在这里插入图片描述

    • bridge模式:使用–network bridge指定,默认使用docker0
    • host模式:使用–network host指定
    • none模式:使用–network none指定
    • container模式:使用–network container:NAME或者容器ID指定
  • 容器实例内默认网络IP生产规则

    • 先启动两个ubuntu容器实例
      在这里插入图片描述
    • docker inspect 容器ID or 容器名字
      在这里插入图片描述
    • 关闭u2实例,新建u3,查看ip变化
      在这里插入图片描述

      docker容器内部的ip是有可能会发生改变的

  • bridge 网桥模式

    Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信

    • 查看 bridge 网络的详细信息,并通过 grep 获取名称项
      docker network inspect bridge | grep name
      在这里插入图片描述
    • ifconfig
      在这里插入图片描述
    • 说明
      1. Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
      2. docker run 的时候,没有指定network的话默认使用的网桥模式就是bridge,使用的就是docker0。在宿主机ifconfig,就可以看到docker0和自己create的network(后面讲)eth0,eth1,eth2……代表网卡一,网卡二,网卡三……,lo代表127.0.0.1,即localhost,inet addr用来表示网卡的IP地址
      3. 网桥docker0创建一对对等虚拟设备接口一个叫veth,另一个叫eth0,成对匹配。
        • 整个宿主机的网桥模式都是docker0,类似一个交换机有一堆接口,每个接口叫veth,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫veth pair);
        • 每个容器实例内部也有一块网卡,每个接口叫eth0;
        • docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对,一一匹配。
      4. 通过上述,将宿主机上的所有容器都连接到这个内部网络上,两个容器在同一个网络下,会从这个网关下各自拿到分配的ip,此时两个容器的网络是互通的。
        在这里插入图片描述
    • 验证
      • 创建容器
        docker run -d -p 8081:8080 --name tomcat81 billygoo/tomcat8-jdk8
        docker run -d -p 8082:8080 --name tomcat82 billygoo/tomcat8-jdk8
      • 两两匹配验证
        在这里插入图片描述
  • host 宿主机模式

    直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行NAT 转换。

    • 说明

      容器将不会获得一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡而是使用宿主机的IP和端口。

      在这里插入图片描述

    • 验证

      docker run -d -p 8083:8080 --network host --name tomcat83 billygoo/tomcat8-jdk8

      在这里插入图片描述

      • 问题:

        docke启动时总是遇见标题中的警告

      • 原因:

        docker启动时指定–network=host或-net=host,如果还指定了-p映射端口,那这个时候就会有此警告,
        并且通过-p设置的参数将不会起到任何作用,端口号会以主机端口号为主,重复时则递增。

        • 解决的办法就是使用docker的其他网络模式,例如–network=bridge,这样就可以解决问题,或者直接无视
      • 无之前的配对显示了,看容器实例内部
        在这里插入图片描述
  • none 无网络

    在none模式下,并不为Docker容器进行任何网络配置。禁用网络功能,只有lo标识(就是127.0.0.1表示本地回环)

    • 验证

      docker run -d -p 8084:8080 --network none --name tomcat84 billygoo/tomcat8-jdk8

      • 在容器外部查看
        在这里插入图片描述
      • 进入容器内部查看
        在这里插入图片描述
  • container 容器模式

    新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。

    在这里插入图片描述

    • 验证
      docker run -d -p 8085:8080 --name tomcat85 billygoo/tomcat8-jdk8
      docker run -d -p 8086:8080 --network container:tomcat85 --name tomcat86 billygoo/tomcat8-jdk8
      • 运行结果
        在这里插入图片描述

        相当于tomcat86和tomcat85公用同一个ip同一个端口,导致端口冲突

        Alpine操作系统是一个面向安全的轻型 Linux发行版;镜像非常小巧,不到 6M的大小,所以特别适合容器打包。

        • docker run -it --name alpine1 alpine /bin/sh
        • docker run -it --network container:alpine1 --name alpine2 alpine /bin/sh
          在这里插入图片描述

        假如此时关闭alpine1,再看看alpine2

        在这里插入图片描述
        在这里插入图片描述

  • 自定义网络

    • 案例

      不用自定义网络,使用默认网桥模式

      • 创建容器
        docker run -d -p 8081:8080 --name tomcat81 billygoo/tomcat8-jdk8
        docker run -d -p 8082:8080 --name tomcat82 billygoo/tomcat8-jdk8
      • 进入容器 - - - 互ping
        在这里插入图片描述
        在这里插入图片描述
      • 按照服务名ping
        在这里插入图片描述
        在这里插入图片描述

      使用自定义网络,自定义网络默认使用的是桥接网络bridge

      • 新建自定义网络
        在这里插入图片描述
      • 新建容器加入上一步新建的自定义网络
        docker run -d -p 8081:8080 --network zzyy_network --name tomcat81 billygoo/tomcat8-jdk8
        docker run -d -p 8082:8080 --network zzyy_network --name tomcat82 billygoo/tomcat8-jdk8
      • 互相ping测试
        在这里插入图片描述
        在这里插入图片描述
        自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)

Docker平台架构图解

  • 整体架构

    从其架构和运行流程来看,Docker 是一个 C/S 模式的架构,后端是一个松耦合架构,众多模块各司其职。

    在这里插入图片描述

  • Docker 运行的基本流程

    1. 用户是使用 Docker Client 与 Docker Daemon 建立通信,并发送请求给后者。
    2. Docker Daemon 作为 Docker 架构中的主体部分,首先提供 Docker Server 的功能使其可以接受 Docker Client 的请求。
    3. Docker Engine 执行 Docker 内部的一系列工作,每一项工作都是以一个 Job 的形式的存在。
    4. Job 的运行过程中,当需要容器镜像时,则从 Docker Registry 中下载镜像,并通过镜像管理驱动 Graph driver将下载镜像以Graph的形式存储。
    5. 当需要为 Docker 创建网络环境时,通过网络管理驱动 Network driver 创建并配置 Docker 容器网络环境。
    6. 当需要限制 Docker 容器运行资源或执行用户指令等操作时,则通过 Execdriver 来完成。
    7. Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kotlin~Adapter适配器模式

概念 Adapter(Wrapper) Pattern,连接两个不兼容的接口,让接口不兼容的对象能够相互合作。 适配器中的角色 请求者Client:调用者目标Target:定义了Client要使用的功能转化对象Adaptee: 需要适…

ROC-RK3588S-PC (Android 12) 看门狗的使用

🍇 博主主页: 【Systemcall小酒屋】🍇 博主追寻:热衷于用简单的案例讲述复杂的技术,“假传万卷书,真传一案例”,这是林群院士说过的一句话,另外“成就是最好的老师”,技术…

走进二叉树的世界 ———性质讲解

二叉树的性质和证明前言1.二叉树的概念和结构特殊的二叉树:二叉树的性质前言 本篇博客主要讲述的是有关二叉树的一些概念,性质以及部分性质的相关证明,如果大伙发现了啥错误,可以在评论区指出😘😘 1.二叉树…

Verilog之小规模经典电路设计

verilog语句执行顺序 每个语句块,是事件(event)触发执行的主要分为 连续赋值语句assign过程赋值语句always, initial(只执行一次) 连续和过程之间是并行执行的,只要满足出发条件即可assign是在后面的输入发生变化时进行执行always是在敏感列表发生变化时…

C语言数据结构初阶(8)----栈与队列OJ题

CSDN的uu们,大家好。这里是C语言数据结构的第八讲。 目标:前路坎坷,披荆斩棘,扶摇直上。 博客主页: 姬如祎 收录专栏:数据结构与算法栈与队列的知识点我➡➡队列相关点我➡➡栈相关2. 用栈实现队列原题链接…

C语言基础 — ( C语言的链表实例)

欢迎小伙伴的点评✨✨ 本篇章系列是对C语言的深度思考和总结、关于C语言内容会持续更新 文章目录前言一、什么是链表二、建立简单静态链表二、建立简单动态链表三、链表的增加、删除、更改、查询四、总结前言 本章会给大家带来基于C语言链表的实例。 一、什么是链表 链表是一…

Python解题 - CSDN周赛第40期

上期问哥没参加,但从赛后大家的反馈来看,又出现了数据上的bug,使用 python 的朋友会遇到第二个用例的柱子高度数组长度不够,200根柱子,只有179个数据,这让人怎么玩?但是用C的选手就没有这个问题…

面试官:vue2和vue3的区别有哪些

目录 多根节点,fragment(碎片) Composition API reactive 函数是用来创建响应式对象 Ref toRef toRefs 去除了管道 v-model的prop 和 event 默认名称会更改 vue2写法 Vue 3写法 vue3组件需要使用v-model时的写法 其他语法 1. 创…

提升网站性能:Nginx五种高效负载均衡策略

前言 本文收录于我是沐风晓月的csdn专栏《linux基本功-系统服务实战》, 关于nginx的系列后面会汇总起来,关注我,一起学习与成长。 本专栏写作的过程中,联合了csdn几位大佬,目前正在整理更新目录,力争让大…

多线程代码案例-阻塞队列

hi,大家好,今天为大家带来多线程案例--阻塞队列 这块知识点也很重要,要好好掌握呀~~~ 🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸&#x…

【蓝桥杯_练习】

蓝桥杯1.创建工程2.LED灯点亮led.c3.LCD液晶屏显示lcd.c4.定时器按键单机interrupt.hinterrupt.cman.c5.定时器(长按键)interrupt.hinterrupt.cmain.c6.PWMmain.c7.定时器-输入捕获(频率,占空比测量)interrupt.cmain.c…

中科亿海微FPGA应用(一、点灯)

1.软件: https://download.csdn.net/download/weixin_41784968/87564071 需要申请license才能使用:软件试用申请_软件试用申请_中科亿海微电子科技(苏州)有限公司 2.开发板: 芯片EQ6HL45,42.5k LUT。 3…

移植RK3568的串口

文章目录 前言一、代码位置二、硬件原理图三、修改设备树四、关闭串口调试功能总结前言 本文主要讲解如何移植RK3568的串口 提示:以下是本篇文章正文内容,下面案例可供参考 一、代码位置 drivers/tty/serial/8250/8250_core.c drivers/tty/serial/8250/8250_dma.c dma实现…

TCP协议详解

1.TCP的准备条件在古代的时候,古人们经常写书信进行交流,写书信的前提是你要知道这份信是要寄给谁在网络中,我们通过ip端口号找对目标对象,但是现在网站一般会对ip端口注册一个域名,所以我们一般就是对域名进行查找&am…

mysql的limit查询竟然有坑?

背景 最近项目联调的时候发现了分页查询的一个bug,分页查询总有数据查不出来或者重复查出。 数据库一共14条记录。 如果按照一页10条。那么第一页和第二页的查询SQL和和结果如下。 .png) 那么问题来了,查询第一页和第二页的时候都出现了11,12,13的记录…

又一款全新的基于 GPT4 的 Python 神器Cursor,关键还免费

chartgpt大火之后,随之而来的就是一大类衍生物了。 然后,今天要给大家介绍的是一款基于GPT4的新一代辅助编程神器——Cursor。 它最值得介绍的地方在于它免费,我们可以直接利用它来辅助我们编程,真正做到事半功倍。 注意&#…

大数据项目之数仓相关知识

第1章 数据仓库概念 数据仓库(DW): 为企业指定决策,提供数据支持的,帮助企业,改进业务流程,提高产品质量等。 DW的输入数据通常包括:业务数据,用户行为数据和爬虫数据等 ODS: 数据…

十二届蓝桥杯省赛c++(下)

1、 拿到题目一定要读懂题意&#xff0c;不要看到这题目就上来模拟什么闰年&#xff0c;一月的天数啥的。这个题目问你当天的时间&#xff0c;就说明年月日跟你都没关系&#xff0c;直接无视就好了。 #include <iostream> #include <cstring> #include <algori…

Nginx 教程-动静分离

一、Nginx 动静分离理论1、概念今天学习和梳理Nginx动静分离&#xff0c;动静分离是将网站静态资源&#xff08;HTML&#xff0c;JavaScript&#xff0c;CSS&#xff0c;img等文件&#xff09;与后台应用分开部署&#xff0c;之所以要进行动静分离&#xff0c;其一为了提高前端…

Qt示例3:用Qt画一个温度计

示例1 以下是用Qt绘制一个简单的温度计的示例代码&#xff1a; #include <QPainter> #include <QWidget> #include <QApplication> class Thermometer : public QWidget { public:Thermometer(QWidget *parent 0); protected:void paintEvent(QPaintEvent …