【云原生Docker】09-Docker网络详解

news2025/2/25 22:44:59

【云原生|Docker】09-Docker网络详解

文章目录

  • 【云原生|Docker】09-Docker网络详解
    • 前言
    • 网络详解
      • bridge网络
        • 基于bridge网络的容器访问外部网络
        • 外部网络访问基于bridge网络的容器
      • host网络
      • none网络
      • container网络
      • 自定义网络
        • 自定义bridge网络
    • 容器的互通
      • 两个相同的bridge网络容器互通(默认bridge)
      • 两个相同的bridge网络容器互通(自定义bridge)
      • 两个不同bridge网络互通
    • Docker network命令

前言

	当项目大规模使用 Docker 时,容器通信的问题也就产生了。要解决容器通信问题,必须先了解很多关于网络的知识。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker 同样有着很多不完善的地方,网络方面就是 Docker 比较薄弱的部分。因此,我们有必要深入了解 Docker 的网络知识,以满足更高的网络需求。
	Docker网络也是docker学习中重要的一部分,前门我们说介绍的docker操作均是在单宿主机上安装和使用docker,然后再生产环境中单节点的使用是没有实际意义的,因此这一章节我们将详细介绍docker的网络使用,已经docker跨宿主机网络使用。

网络详解

​ 安装 Docker 以后,会默认创建三种网络,可以通过 docker network ls 查看。

[root@clinet ~]# docker network ls 
NETWORK ID     NAME      DRIVER    SCOPE
44ccbd74a658   bridge    bridge    local
016f4cda7f9a   host      host      local
6167ccead0c4   none      null      local

网络模式介绍:

  • 桥接网络(bridge network

桥接网络是Docker默认的网络模式,也是最常用的一种。在桥接网络中,Docker主机上的所有容器都连接到同一个虚拟网络中。Docker会为每个容器分配一个唯一的IP地址,容器之间可以相互通信。

  • 主机网络(host network)

主机网络模式让容器直接使用主机的网络栈,容器中的应用程序可以直接访问主机上的网络接口。这种模式的好处是容器的网络性能非常高,但是容器之间无法直接通信,因此这种模式一般只用于需要访问主机网络的应用程序。

  • none网络(none network)

none网络模式让容器没有网络接口,也没有IP地址。这种模式通常用于测试和调试,或者需要在容器中运行一些不需要网络连接的应用程序。

  • container模式

container模式,也称为容器网络模式。在这种模式下,容器可以共享另一个容器的网络栈,即两个容器可以使用同一个虚拟网络接口和IP地址。

  • 自定义

docker 1.9版本以后新增的特性,允许容器使用第三方的网络实现或者创建单独的bridge网络,提供网络隔离能力。可自定义的网络类型:bridge,overlay,macvlan。

bridge网络

​ 在该模式中,Docker 守护进程创建了一个虚拟以太网桥 docker0,新建的容器会自动桥接到这个接口,附加在其上的任何网卡之间都能自动转发数据包。

默认情况下,守护进程会创建一对对等虚拟设备接口 veth pair,将其中一个接口设置为容器的 eth0 接口(容器的网卡),另一个接口放置在宿主机的命名空间中,以类似 vethxxx 这样的名字命名,从而将宿主机上的所有容器都连接到这个内部网络上。

 容器安装后默认会创建一个docker0的网桥,网桥的默认ip段为172.17.0.1/16,我们可以通过docker的配置文件(/etc/docker/daemon.json)自定义网桥ip段。
 
 [root@clinet ~]# cat /etc/docker/daemon.json 
{
  "bip": "172.18.0.1/16",
  "registry-mirrors": ["https://mqkiky4e.mirror.aliyuncs.com"]
}
[root@clinet ~]#

我们通过创建一个busybox的容器,使用bridge网络,来深入了解brige网络的连接。

[root@clinet ~]# docker run -it --network bridge busybox /bin/sh
(--network  bridge是默认的,可以不指定。)

创建完容器之后,我们在宿主机上通过ip add查看的信息如下:

在这里插入图片描述

此时宿主机上创建了一对对等虚拟设备接口 veth pair,将其中一个接口设置为容器的 eth0 接口(容器的网卡),另一个接口放置在宿主机的命名空间中,以类似 vethxxx 这样的名字命名。如上图所示,9表示为连接到容器内的网络连接(eth0@if9),

在这里插入图片描述

同时通过在宿主机上可以查看到相关网桥的信息:

在这里插入图片描述

综上所述,bridge网络的拓扑如下:

在这里插入图片描述

Bridge 桥接模式的实现步骤主要如下:

1. 启动一个容器的时候,Docker Daemon会在宿主机上创建一对虚拟网络接口,该接口相当于网线的两端,一端在宿主机上(veth pair格式),另外一端在容器内为eth0;
2.  同时Docker Daemon 会将宿主机上的 veth pair 接口桥接到 Docker Daemon 创建的 docker0 网桥上。
3.  docker0网桥同时也类似为dhcp,会给容器的eth0网卡分配相同段的ip。
  • 通过docker inspect 容器id来查看容器的详细信息,其中网络部分如下:
[root@clinet ~]# docker inspect 53a |grep -A 30 Networks

在这里插入图片描述

  • docker network inspect bridge查看网桥的详细信息。
[root@clinet ~]# docker network inspect bridge 
# 通过如下命令会列出bridge网络的相关信息,其中"Containers"字段的表示是信息是指当前节点上有哪些容器使用了该网络。

  • 使用–network 指定bridge网络
docker run -d --name web1 --net bridge nginx

基于bridge网络的容器访问外部网络

默认情况下,基于bridge网络容器即可访问外部网络,这是因为默认情况下,docker使用了iptables的snat转发来实现容器对外部的访问(需要内核开启net.ipv4.ip_forward=1)

在这里插入图片描述

外部网络访问基于bridge网络的容器

如果想让外界可以访问到基于bridge网络创建的容器提供的服务,则必须要告诉docker要使用的端口。

可以通过如下方法查看镜像会使用哪些端口:

docker inspect nginx | jq .[]."ContainerConfig"."ExposedPorts"

在创建容器的时候可以指定这个容器的端口与主机端口的映射关系:

docker run -d --name web -P nginx

-p: 可以指定主机与容器的端口关系,冒号左边是主机的端口,右边是映射到容器中的端口
-P:该参数会分配镜像中所有的会使用的端口,并映射到主机上的随机端口

这种端口映射基于iptables的dnat实现

在这里插入图片描述

查看容器的端口情况:

docker port  容器名称
或
docker  ps  -a  (找到对应容器)

host网络

  • host 网络模式需要在创建容器时通过参数 --net host 或者 --network host 指定;
  • 采用 host 网络模式的 容器,可以直接使用宿主机的 IP 地址与外界进行通信,若宿主机的 eth0 是一个公有 IP,那么容器也拥有这个公有 IP。同时容器内服务的端口也可以使用宿主机的端口,无需额外进行 NAT 转换;
  • 使用host网络的主机,与宿主机共享网络地址,可以获得最好的数据转发性能。
  • 使用host网络的缺点是,同一个宿主机上的多个容器共享同一个ip地址,如果多容器使用相同的端口,需要自行解决端口冲突问题。(这也是host网络一般不使用的原因。)
  1. 可以通过如下方式查看host网络信息:
docker inspect host
  1. 创建一个使用host网络容器的示例:
# 可以看到该容器没有自己的IP地址,因为它直接使用宿主机IP地址
docker run -it --network host busybox

在这里插入图片描述

host网络拓扑

在这里插入图片描述

none网络

  • none 网络模式是指禁用网络功能,只有 lo 接口 local 的简写,代表 127.0.0.1,即 localhost 本地环回接口。在创建容器时通过参数 --net none 或者 --network none 指定;
  • 使用none网络的容器除了lo,没有其他任何网卡,完全隔离。用于既不需要访问外部服务,也不允许外部服务访问自己的应用场景。
  1. 查看none网络信息:
docker network inspect none
  1. 创建一个使用none网络容器的示例:
docker run -it --network none busybox

在这里插入图片描述

container网络

  • Container 网络模式是 Docker 中一种较为特别的网络的模式。在创建容器时通过参数 --net container:已运行的容器名称|ID 或者 --network container:已运行的容器名称|ID 指定;
  • 处于这个模式下的 Docker 容器会共享一个网络栈,这样两个容器之间可以使用 localhost 高效快速通信。
  • Container 网络模式即新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样两个容器除了网络方面相同之外,其他的如文件系统、进程列表等还是隔离的。

在这里插入图片描述

  1. 创建一个基础容器nginx,该容器使用bridge模式
[root@clinet ~]# docker run -d --name nginx --network bridge nginx 
5acd9628840da292a618b44499fdf4c6ac56f11b4c64390411ec41f7b59a8b9f
[root@clinet ~]#

此时基础容器的网络情况如下:

在这里插入图片描述

  1. 创建一个busybox容器,使用container网络模式
docker run -it --network container:nginx busybox

此时busybox容器的网络如下:

在这里插入图片描述

此时宿主机上的网络情况如下:

在这里插入图片描述

总上所述,Docker 守护进程只创建了一对对等虚拟设备接口,busybox容器完全的使用了nginx容器的网络。

  1. 当我们停止掉nginx容器的时候,网络信息如下:

在这里插入图片描述

此时busybox容器只剩下了lo网络接口。

自定义网络

Docker除了提供三种的默认网络模式之外,也允许用户针对一些特定的应用场景去创建一些自定义的网络。这样属于这个网络的容器就可以单独隔离出来,它们之间可以相互通信,而不在这个网络的容器就不能直接访问到它们。一个容器可以属于多个网络,同一个自定义网络下的容器可以通过各自的容器名访问到对方,因为会使用到docker内嵌的一个dns功能。

Docker提供三种自定义网络驱动:

1. bridge
2. overlay
3. macvlan

自定义bridge网络

  1. 创建一个叫作my_net的自定义网络
docker network create --driver bridge my_net    #--driver用于指定网络类型,不指定默认为bridge
  1. 通过指定子网和网关的方式创建my_net2网络:
docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 my_net2
  1. 查看网络信息

在这里插入图片描述

  1. 宿主机上会产生两个类似docker0的网桥。

在这里插入图片描述

  1. 删除自定义网络

docker network rm my_net1 (自定义网络名称)

注意:如果通过某个自定义网络模式创建了容器,则该网络模式无法删除。

示例:

  • 使用自定义的bridge网络my_net1,创建一个busybox容器
docker run -it --network my_net1 busybox

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aMNzP2LI-1680683532782)(D:\学习\学习笔记\图片\29.png)]

  • 使用自定义的bridge网络my_net2,创建一个busybox容器
docker run -it --network my_net2 busybox

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-twjma6ca-1680683532783)(D:\学习\学习笔记\图片\30.png)]

容器的互通

  • 这里所说的容器互通是指在同一个宿主机上的容器;
  • 容器互通必须要求互通容器在同一个网络内;

两个相同的bridge网络容器互通(默认bridge)

  1. 创建一个基于默认的 bridge 网络模式的容器.
docker run -d --name  nginx_test nginx

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i9QQGdjD-1680683532784)(D:\学习\学习笔记\图片\31.png)]

  1. 创建另一个基于默认的 bridge 网络模式的容器,并测试连通性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bVTl7dg6-1680683532785)(D:\学习\学习笔记\图片\32.png)]

经过测试,从结果得知两个属于同一个网络的容器是可以进行网络通信的。

两个相同的bridge网络容器互通(自定义bridge)

  1. 创建一个基于自定义的my_net1网络模式的容器.
docker run -d --name nginx --network my_net1 nginx

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jZ5bIytW-1680683532786)(D:\学习\学习笔记\图片\33.png)]

  1. 创建另一个基于my_net1网络模式的容器,并测试连通
docker run -it --name busybox --network my_net1 busybox ping 172.17.0.2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LHvbz97a-1680683532787)(D:\学习\学习笔记\图片\34.png)]

	从 Docker 1.10 版本开始,docker daemon 实现了一个内嵌的 DNS server,使容器可以直接通过容器名称通信。方法很简单,只要在创建容器时使用 --name 为容器命名即可。
	但是使用 Docker DNS 有个限制:只能在 user-defined 网络中使用。也就是说,默认的 bridge 网络是无法使用 DNS 的,所以我们就需要自定义网络。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4JFnEGXO-1680683532788)(D:\学习\学习笔记\图片\35.png)]

两个不同bridge网络互通

  1. 创建一个基于默认的 bridge 网络模式的容器.
docker run -d --name  nginx_1 nginx

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kCA9TWLx-1680683532789)(D:\学习\学习笔记\图片\36.png)]

  1. 创建一个基于自定义的my_net2网络模式的容器. 并测试互通。
docker run -it --network my_net2  busybox ping 172.18.0.3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QGh8ZTDy-1680683532790)(D:\学习\学习笔记\图片\37.png)]

此时网络不通。

  1. 通过 docker network connect 网络名称 容器名称 为容器连接新的网络模式。
docker network connect my_net2 nginx_1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v9d5Yjdc-1680683532791)(C:\Users\xhz\AppData\Roaming\Typora\typora-user-images\38.png)]

  1. 测试网络连通性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4PiPYh6R-1680683532792)(C:\Users\xhz\AppData\Roaming\Typora\typora-user-images\39.png)]

  1. 此时两个网络结果如下:

此时相当于nginx_1容器存在两个网卡,一个是桥接到docker0的,一个是桥接到my_net2的,因此实现原理还是两容器处于相同的ip段。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k9KnlmuQ-1680683532793)(D:\学习\学习笔记\图片\388.png)]

  1. 断开网络
docker network disconnect my_net2 nginx_1
1.  上述所说的容器互通均是同一宿主机上的场景;
2.  互通的根本原理是让两个容器处于同一个桥接网卡上,即:相同的ip段。

后面我们将单独说说跨主机容器互通的问题。

Docker network命令

  1. 创建一个新的Docker网络
docker network create my_network

语法如下:

docker network create [OPTIONS] NETWORK
其中,OPTIONS是一些可选参数,NETWORK是要创建的网络的名称。
下面是一些常用的OPTIONS参数:
--driver:指定网络驱动程序,默认为bridge。
--subnet:指定网络的IPv4子网。
--gateway:指定网络的IPv4网关。
--ipv6:启用IPv6支持。
--ip-range:指定网络的IPv4地址范围。
--ipam-driver:指定IP地址管理驱动程序。
--ipam-opt:指定IP地址管理驱动程序的选项。

1.1 创建一个名为my_network的桥接网络,其中IPv4子网为172.18.0.0/16,网关为172.18.0.1

docker network create --driver bridge --subnet=172.18.0.0/16 --gateway=172.18.0.1 my_network

1.2 将创建一个名为my_network的桥接网络

docker network create --driver bridge my_network
  1. 将名为my_container的容器连接到名为my_network的Docker网络
docker network connect  my_network  my_container
  1. 将名为my_container的容器从名为my_network的Docker网络中断开连接,
docker network disconnect my_network my_container
或
## --force  强制
docker network disconnect --force  my_network my_container
  1. 查看网络的详细信息
docker  inspect  网络名称
  1. 列出所有的Docker网络
docker  network  ls
  1. 删除一个Docker网络
docker  network  rm  网络名
  1. 删除所有未使用的Docker网络
docker  network  prune

为my_container的容器从名为my_network的Docker网络中断开连接,

docker network disconnect my_network my_container
或
## --force  强制
docker network disconnect --force  my_network my_container
  1. 查看网络的详细信息
docker  inspect  网络名称
  1. 列出所有的Docker网络
docker  network  ls
  1. 删除一个Docker网络
docker  network  rm  网络名
  1. 删除所有未使用的Docker网络
docker  network  prune

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

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

相关文章

多层多输入的CNN-LSTM时间序列回归预测(卷积神经网络-长短期记忆网络)——附代码

目录 摘要: 卷积神经网络(CNN)的介绍: 长短期记忆网络(LSTM)的介绍: CNN-LSTM: Matlab代码运行结果: 本文Matlab代码数据分享: 摘要: 本文使用CNN-LSTM混合神经网…

spring快速连接mybatis

spring快速连接mybatisspring整合mybatis1.maven依赖配置2.数据库sql设计3.数据库连接配置4.实体类设计5.Dao层开发6.SqlMapConfig.xml7.运行程序进行crudspring整合mybatis 1.maven依赖配置 配置pom.xml如下 <?xml version"1.0" encoding"UTF-8"?…

【机器学习】P6 逻辑回归的 损失函数 以及 梯度下降

逻辑回归的损失函数 以及 梯度下降逻辑回归的损失函数逻辑回归的 Loss逻辑回归的 Cost逻辑回归的梯度下降总公式推导公式梯度下降动画效果展示Reference逻辑回归的损失函数 逻辑回归的 Loss 逻辑回归是一种用于二分类问题的监督学习算法&#xff0c;其损失函数采用交叉熵&…

ChatGPT研究报告:AIGC带来新一轮范式转移

本文约4000字&#xff0c;目标是快速建立AIGC知识体系&#xff0c;含有大量的计算专业名词&#xff0c;建议阅读同时扩展搜索。 一、行业现状 1、概念界定 区别于PGC与UGC不同的&#xff0c;AIGC是利用人工智能技术自动生成内容的新型生产方式。 2、数据模态 按照模态区分&a…

【计算机网络-网络层】路由选择协议

文章目录1 路由器与路由选择1.1 路由器1.2 路由表&#xff08;RIB 表&#xff09;1.2.1 路由表项1.2.2 动态路由1.2.3 静态路由1.2.4 直连路由1.3 转发表&#xff08;FIB 表&#xff09;1.4 自治系统 AS2 内部网关协议 IGP——路由信息协议 RIP2.1 RIP 规定2.2 RIP 的工作原理2…

GPT系列论文

目录 GPT 无监督预训练 有监督微调 如何将模型应用于下游任务&#xff1f; 试验结果 GPT-2 摘要 Introduction Approach 数据集&模型 试验结果 GPT-3 核心点 名词解释 few-shot做法图示 数据集 GPT 由无监督预训练有监督微调组成 无监督预训练 有监督微调 …

ICLR 2023 | 达摩院开源轻量人脸检测DamoFD

团队模型、论文、博文、直播合集&#xff0c;点击此处浏览 一、论文 本文介绍我们被机器学习顶级国际会议ICLR 2023接收的论文 “DamoFD: Digging into Backbone Design on Face Detection" 论文链接&#xff1a;https://openreview.net/pdf?idNkJOhtNKX91 开源代码&a…

云原生_kubernetes(k8s)介绍

目录 一、应用部署方式演变 二、k8s介绍 三、k8s的组件 四、k8s中的概念 五、k8s资源管理方式 1、命令式对象管理 2、命令式对象配置 3、声明式对象配置 一、应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个时代&#xff1a; 1、物理机部署&#…

Vue 核心(一)

文章目录Vue 核心&#xff08;一&#xff09;一、 Vue 简介1、 概述2、 学前准备3、 第一个程序二、 模板语法三、 数据绑定四、 MVVM 模型五、 数据代理1、 defineProperty2、 理解数据代理3、 Vue中的数据代理六、 事件处理1、 事件的基本使用2、 键盘事件七、 计算属性与监视…

难以置信,已经有人用 ChatGPT 做 Excel 报表了?

要问2023年初科技领域什么最火&#xff0c;那自然是 ChatGPT。 ChatGPT 由人工智能研究实验室 OpenAI 于2022年11月30日推出。上线短短5天&#xff0c;用户数量已突破100万&#xff0c;在今年2月份&#xff0c;用户数量已经突破1亿。 ChatGPT 是一个超级智能聊天机器人&#…

GitLab CI/CD 新书发布,助企业降本增效

前言 大家好&#xff0c;我是CSDN的拿我格子衫来&#xff0c; 昨天我的第一本书《GitLab CI/CD 从入门到实战》上架啦&#xff0c;这是业内第一本详细讲解GitLab CI/CD的书籍。 历经无数个日夜&#xff0c;最终开花结果。感触良多&#xff0c;今天就借这篇文章来谈一谈这本书的…

贯穿设计模式第一话--单一职责原则

&#x1f973;&#x1f973;&#x1f973; 茫茫人海千千万万&#xff0c;感谢这一刻你看到了我的文章&#xff0c;感谢观赏&#xff0c;大家好呀&#xff0c;我是最爱吃鱼罐头&#xff0c;大家可以叫鱼罐头呦~&#x1f973;&#x1f973;&#x1f973; 从今天开始&#xff0c;将…

基于51单片机的智能婴儿看护床设计

需要源码及原理图文件请私信&#xff01;&#xff01;&#xff01;&#xff01; 基于51单片机的智能婴儿看护床设计1、引言2、功能设计系统结构框图3、系统硬件设计3.1声音电路的设计3.2语音播报电路的设计3.3独立按键电路的设计3.4模拟摇床&#xff08;步进电机驱动电路&#…

Springboot项目快速实现过滤器功能

前言很多时候&#xff0c;当你以为掌握了事实真相的时间&#xff0c;如果你能再深入一点&#xff0c;你可能会发现另外一些真相。比如面向切面编程的最佳编程实践是AOP&#xff0c;AOP的主要作用就是可以定义切入点&#xff0c;并在切入点纵向织入一些额外的统一操作&#xff0…

尚硅谷大数据技术Spark教程-笔记01【Spark(概述、快速上手、运行环境、运行架构)】

视频地址&#xff1a;尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01【Spark(概述、快速上手、运行环境、运行架构)】尚硅谷大数据技术Spark教程-笔记02【SparkCore(核心编程、案例实操)】尚硅谷大数据技术Spark教程-笔记03【SparkSQL…

Scala之面向对象(2)

目录 单例对象&#xff08;伴生对象&#xff09;&#xff1a; 创建对象常用的两种方法&#xff1a; &#xff08;1&#xff09;使用构造器构造&#xff08;new&#xff09; &#xff08;2&#xff09;使用静态方法 伴生对象的定义&#xff1a; apply方法&#xff1a; app…

图像分割技术及经典实例分割网络Mask R-CNN(含基于Keras Python源码定义)

图像分割技术及经典实例分割网络Mask R-CNN&#xff08;含Python源码定义&#xff09; 文章目录图像分割技术及经典实例分割网络Mask R-CNN&#xff08;含Python源码定义&#xff09;1. 图像分割技术概述2. FCN与语义分割2.1 FCN简介2.2 反卷积2.2 FCN与语义分割的关系3. Mask …

Midjourney以图生图的详细教程(含6种案例介绍)

&#x1f3c6; 文章目标&#xff1a;学习并介绍Midjourney以图生图的详细教程 &#x1f340; Midjourney以图生图的详细教程 ✅ 创作者&#xff1a;熊猫Jay &#x1f389; 个人主页&#xff1a;Jay的个人主页 &#x1f341; 展望&#xff1a;若本篇讲解内容帮助到您&#xff0c…

SQL Server 单表数据查询

提示&#xff1a; 本篇文章详细介绍怎样向SQLServer中导入表格数据,导入之后根据不同的查询条件完成查询任务. 文章目录前言一、向SQL Server中导入数据二、例题1.查询所有学生的全部信息2.查询学生的学号和姓名3.查询所有学生的姓名和出生年4. 查询所有学生的姓名和出生年&…

【关于Linux中----生产消费模型】

文章目录一、生产消费模型1.1概念的引入1.2 321原则二、条件变量2.1概念的引入2.2理解条件变量2.3条件变量的使用三、基于BlockingQueue的生产者消费者模型3.1BlockingQueue的介绍3.2C queue模拟阻塞队列的生产消费模型3.3对生产消费任务的模拟封装四、遗留问题一、生产消费模型…