[Docker#10] network | 架构 | CRUD | 5种常见网络类型 (实验)

目录

1. Docker 为什么需要网络管理

2. Docker 网络架构简介

CNM(Container Network Model)

Libnetwork

驱动

3. ⭕常见网络类型(5 种)

4. Docker 网络管理命令

一. bridge 网络

1. 操作案例:容器间网络通信

实验步骤

示例命令

观察

2. 创建自定义 Bridge

示例命令

连接到自定义Bridge网络 2.0

3.DNS解析

一、Docker 自定义桥接网络支持 DNS 解析服务

二、准备实验环境

三、是否支持 DNS 解析服务

端口暴露和转发

1. 暴露方式

2. 端口转发

二. Docker host 网络模式

1. 网络介绍

2. 操作案例

三、Docker container 网络模式

1. 网络介绍

2. 实现逻辑

3. 操作案例

4. 使用场景

四、Docker none 网络模式

1. 网络介绍

2. 操作案例

3. 使用场景


1. Docker 为什么需要网络管理

容器的网络默认与宿主机及其他容器相互隔离,但实际应用中需要解决以下问题:

  • 多个容器之间的通信
  • 容器与宿主机的通信
  • 容器与外界主机的通信
  • 外部访问容器内的网络应用
  • 容器网络不隔离的需求
  • 容器无需网络的情况
  • 定制化网络需求(如集群网络、局域网)

我们想尽量的通过命令,来实现上述功能

2. Docker 网络架构简介

Docker 容器网络是应用程序的虚拟环境的一部分,包括虚拟网络设备、IP 协议栈、端口套接字、IP 路由表、防火墙等。Docker 网络架构主要由三部分组成:CNM、Libnetwork 和驱动。

CNM(Container Network Model)

Docker 网络架构采用的设计规范是 CNM(Container Network Model)。CNM 中规定了 Docker 网络的基础组成要素:Sandbox、Endpoint、Network。

  • Sandbox:提供容器的虚拟网络栈,隔离容器网络与宿主机网络
  • NetworkDocker 内部的虚拟子网,使网络内的参与者能够通信。
  • Endpoint虚拟网络接口,负责创建连接。一个 Endpoint 只能接入一个网络,容器需要接入多个网络时需要多个 Endpoint。

如上图所示,容器 B 有两个 Endpoint 并且分别接入 Networkd A 和 Network B。

  • 那么 容器 A 和容器 B 之间是可以实现通信的,因为都接入了 NetworkA。
  • 但是容器 A 和容 器 C 不可以通过容器 B 的两个 Endpoint 通信。

可以理解 A B 为宿舍上网打游戏,联机成功了

Libnetwork
  • 介绍Libnetwork 是 CNM 的一个标准实现。Libnetwork 是开源库,采用 Go 语言编写(跨 平台的),也是 Docker 所使用的库,Docker 网络架构的核心代码都在这个库中。
  • 功能:实现了 CNM 中定义的全部三个组件,此外它还实现了本地服务发现、基 于 Ingress 的容器负载均衡,以及网络控制层和管理层等功能。
驱动
  • 功能实现数据层内容,如网络的连通性和隔离性。
  • 驱动通过实现特定网络类型的方式扩展了 Docker 网络栈,例如桥接网络和覆盖网络。Docker 内置了若干驱动,通常被称作原生驱动或者本地驱动。
  • 类型:Bridge Driver、Host Driver、Overlay Driver、MacVLan Driver、IPVLan Driver、None Driver 等。
  • 每个驱动负责创建其上所有网络资源的创建和管理。

3. ⭕常见网络类型(5 种)

bridge 网络

  • 描述:默认网络驱动,创建 Linux 网桥,容器在同一主机上可以相互通信。
  • 用途多个容器在同一个 Docker 主机上通信。

host 网络

  • 描述:移除容器与宿主机的网络隔离,直接使用主机的网络。
  • 用途:网络堆栈不应与 Docker 主机隔离,但希望容器的其他资源被隔离。

container 网络

  • 描述:新创建的容器与现有容器共享网络,不创建自己的网卡和 IP。
  • 用途容器间网络共享,但仍保持文件系统和进程列表隔离。

none 网络

  • 描述:容器没有网络配置,完全网络隔离。
  • 用途容器完全不需要网络的情况。

overlay 网络

  • 描述:跨 Docker Daemon 网络,连接多个 Docker 守护进程,使集群服务能够相互通信。
  • 用途:运行在不同 Docker 主机上的容器通信,或多个应用程序使用集群服务协同工作
  • overlay 网络 可以使用 Kubernetes (k8s) 时,通过网络插件(如 Flannel、Calico)实现跨主机的容器网络通信,提供了一个简单的网络解决方案,使得不同节点上的 Pod 能够相互通信。


4. Docker 网络管理命令

docker network create:创建网络

docker network create [OPTIONS] NETWORK

关键参数

  • -d, --driver:网络驱动
  • --gateway:网关地址
  • --subnet:子网
  • --ipv6:启用 IPv6

样例

docker network create --driver=bridge --subnet=192.168.0.0/16 br0

docker network inspect:查看网络详情

docker network inspect [OPTIONS] NETWORK [NETWORK...]

关键参数

-f, --format:指定格式

样例

docker network inspect mynetwork

docker network connect:连接网络

docker network connect [OPTIONS] NETWORK CONTAINER

关键参数

  • --ip:指定 IP 地址
  • --ip6:指定 IPv6 地址

样例

docker network connect multi-host-network my_container1
docker run -itd --network=multi-host-network busybox-container
docker network connect --ip 10.10.36.122 multi-host-network container2

测试:

发现

docker network disconnect:断开网络

docker network disconnect [OPTIONS] NETWORK CONTAINER

关键参数

-f:强制退出

样例

docker network disconnect multi-host-network my_container1

docker network prune:删除不使用的网络

docker network prune [OPTIONS]

关键参数

-f, --force:不提示

样例

docker network prune

docker network rm:删除网络

docker network rm NETWORK [NETWORK...]

关键参数

-f:强制退出

样例

docker network rm br0

docker network ls:列出网络

docker network ls [OPTIONS]

别名

docker network list

关键参数

  • -f, --filter:指定过滤条件
  • --format:指定格式
  • --no-trunc:不截断
  • -q, --quiet:仅仅显示 id

样例


一. bridge 网络

Docker Bridge 网络使用内置的 bridge 驱动,基于 Linux 内核中的 Linux bridge 技术。作为链路层设备,bridge 网络在网段之间转发流量,可以是硬件或软件设备。Docker 使用软件网桥 docker0,允许同一网桥网络中的容器通信,同时隔离未连接网桥网络的容器。

Docker Container 的 bridge 桥接模式可以参考下图

默认 Bridge 网络

  • 创建容器时,若未指定 --network 参数,容器默认加入名为 bridge 的网络。
  • bridge 网络映射到内核中的 docker0 网桥。

生活案例

  • Bridge 网络如同立交桥,连接不同方向的通道。

1. 操作案例:容器间网络通信

实验步骤

  1. 使用 busybox 镜像创建两个容器 c1c2
  2. 查看容器 IP 地址,确认容器间能通过 IP 地址通信。

示例命令

  • 创建容器:
docker container run -itd --name c1 busybox
docker container run -itd --name c2 busybox
  • 查看容器 IP:
docker container exec -it c1 ip a
docker container exec -it c2 ip a

  • 容器间通信测试:
docker container exec -it c1 ping 172.17.0.4

观察

  • 容器 c1c2 通过 docker0 网桥通信。
  • 停止容器后,容器与 docker0 网桥的连接断开。

2. 创建自定义 Bridge

  • 使用 docker network create -d bridge new-bridge 创建新的 bridge 网络。
  • 通过 --network 参数指定容器连接到自定义 bridge。

示例命令

  • 创建自定义 bridge:
docker network create -d bridge new-bridge
  • 创建容器并连接到自定义 bridge:
docker container run -itd --name c3 --network new-bridge busybox
  • 查看自定义 bridge 网络信息:
docker network inspect new-bridge

使用命令 docker network inspect 查看 new-bridge 网络信息会发现这个网络的子 网 IP 是 172.18.0.0/16,它表示如果我们创建容器并连接到该网络上,就会给该容 器分配一个 172.18.xx.xx 这个网段的 IP 地址。

连接到自定义Bridge网络 2.0

  1. 使用--network选项:在运行容器时,通过--network选项指定要连接的网络( 172.18.xx.xx )。如果不指定,容器将默认连接到名为bridge(172.17.0.1/16)的网络。
# 创建名为c3的容器,并指定连接到new-bridge网络
docker container run -itd --name c3 --network new-bridge busybox
  1. 查看容器网络信息:使用docker container inspect命令查看容器的网络配置,确认容器已连接到指定的网络。
# 查看c3容器的网络相关信息
docker container inspect c3 | grep "Networks" -A 17

3.DNS解析

一、Docker 自定义桥接网络支持 DNS 解析服务
  • Docker DNS服务:Docker自定义桥接网络支持通过Docker DNS服务进行域名解析。这意味着可以直接使用容器名进行通信,因为DNS服务可以解析容器名到IP地址的映射。而默认的bridge网络不支持DNS。
二、准备实验环境
  1. 创建容器并连接到不同的网络
# 创建 c4 容器,连接 new-bridge
docker container run -itd --name c4 --network new-bridge busybox# 查看当前容器列表
docker container ls# 查看 bridge 网络连接的容器
docker network inspect bridge | grep "Containers" -A 20# 查看 new-bridge 网络连接的容器
docker network inspect new-bridge | grep "Containers" -A 20
  • c3c4 容器连接到自定义的 new-bridge 网络。

三、是否支持 DNS 解析服务
  1. 查看 c3c4 容器的 IP 地址
# 查看 c3 容器的 IP 地址
docker container exec -it c3 ip a# 查看 c4 容器的 IP 地址
docker container exec -it c4 ip a

  1. 测试 c3 容器与 c4 容器的通信
# c3 容器 ping c4 容器的 IP 地址
docker container exec -it c3 ping 172.18.0.3# c3 容器 ping c4 容器名
docker container exec -it c3 ping c4

输出示例:

结论:自定义的 new-bridge 网络支持 DNS 解析服务。


端口暴露和转发

1. 暴露方式
  • -P:将指定的容器端口映射至主机所有地址的一个动态端口。
  • -p <hostPort>:<containerPort>:将容器端口 <containerPort> 映射至指定的主机端口 <hostPort>
2. 端口转发

连接 bridge 网络的容器只能与连接在当前网络中的容器进行通信。如果一个容器想要对外提供一些网络服务,需要进行端口转发。

示例:启动一个 nginx 容器,并将容器的 80 端口映射到宿主机的 8088 端口。

docker container run --name test-nginx --rm -d -p 8088:80 nginx
  • --rm:运行完自动删除该容器。
  • --name:指定容器名。

如下图所示,两个容器内部均开放 80 端口,它 们分别映射到宿主机的 8088 和 8089 端口

  • 即表示任何发送到 8088 端口的流量都会转发到----> Container 1 容器的 80 端口
  • 发送到 8089 端口的流程都会转发到----> Container 2 容器的 80 端口

二. Docker host 网络模式

1. 网络介绍

Docker 容器运行默认都会分配独立的 Network Namespace。但如果基于 host 网络模式,容器将不会获得一个独立的 Network Namespace,而是和宿主机共用同一个 Network Namespace。容器将不会虚拟出自己的网卡、IP 等,而是直接使用宿主机的 IP 和端口。

2. 操作案例
  1. 创建容器 c1 使用 bridge 网络
# 创建容器 c1 使用 bridge 网络
docker container run --name c1 -itd busybox
  1. 创建容器 c2 使用 host 网络
# 创建容器 c2 使用 host 网络
docker container run --name c2 -itd --network=host busybox
  1. 查看容器 c1c2 的网络信息
# 查看 c1 的网络信息
docker container exec c1 ip a# 查看 c2 的网络信息
docker container exec c2 ip a

输出示例:

  • c1 容器的网络信息:

  • c2 容器的网络信息:

三、Docker container 网络模式

1. 网络介绍
  • 定义container 网络模式是一种特殊的网络模式,其中新创建的容器会共享另一个容器的网络命名空间。

特点

  • 容器之间的网络隔离性介于 bridge 模式和 host 模式之间。
  • 共享网络环境的容器之间没有网络隔离,但与宿主机和其他容器之间存在网络隔离。
  • 传输效率较高,容器可以通过 localhost 访问共享网络命名空间的其他容器。
2. 实现逻辑
  1. 查找需要被共享网络环境的容器(other container)的网络命名空间。
  2. 新创建的容器的网络命名空间设置为 other container 的网络命名空间。
3. 操作案例

创建第一个容器 netcontainer1

docker run -itd --name netcontainer1 busybox

使用 netcontainer1 的网络创建第二个容器 netcontainer2

docker run -itd --name netcontainer2 --network container:netcontainer1 busybox

进入两个容器,查看网络信息

  • 结论:两个容器的 IP 和 MAC 地址完全相同。

停止容器 netcontainer1,再次查看 netcontainer2 的网络信息

docker stop netcontainer1
docker exec -it netcontainer2 sh

  • 结论:netcontainer2eth0 网卡消失,只剩本地回环网络。

重启容器 netcontainer1netcontainer2,再次查看网络信息

docker restart netcontainer1
docker restart netcontainer2
docker exec -it netcontainer2 sh

  • 结论:容器网络恢复。
4. 使用场景
  • 高效率网络传输:容器可以通过 localhost 访问共享网络命名空间的其他容器,传输效率较高。
  • 依赖关系:两个容器之间存在依赖,如果依赖容器重启,会导致另一个容器的网络不可用。

四、Docker none 网络模式

1. 网络介绍
  • 定义none 网络模式下,容器没有任何网络接口,除了本地回环网络(lo

特点

  • 适合对安全性要求较高的应用,避免网络通信带来的安全风险。
  • 容器无法与其他网络进行通信。
2. 操作案例

创建容器 c3 使用 none 网络

docker container run -itd --name c3 --network none busybox

查看容器 c3 的网络信息

docker container exec -it c3 ip a

输出示例:

结论:c3 容器只有本地回环网络,没有其他网络接口。

3. 使用场景
  • 高安全性需求:针对一些对安全性要求较高且不需要联网的应用,如生成随机密码,避免生成的密码被第三方获取。
  • 第三方应用:一些第三方应用可能需要 Docker 创建一个没有网络的容器,网络配置由第三方自行管理。

对于第五种常见网络类型,将在之后的 k8s 专栏中讲解~

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

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

相关文章

Spring Cloud Gateway快速入门Demo

1.什么是Spring Cloud Gateway&#xff1f; Spring Cloud Gateway 是一个基于 Spring Framework 和 Spring Boot 构建的 API 网关服务。它提供了一种简单而有效的方式来路由请求、提供跨领域的关注点&#xff08;如安全、监控/指标和弹性&#xff09;以及其他功能。Spring Clo…

【AI换脸整合包及教程】Rope:AI 换脸工具的功能、原理、应用

在人工智能技术迅猛发展的当下&#xff0c;AI 换脸技术无疑是近年来备受瞩目的焦点之一。其中&#xff0c;Rope 作为一款开源的 AI 换脸工具&#xff0c;因其出色的易用性和强大的功能而广受青睐。本文将对 Rope 的功能、技术原理、应用场景以及所面临的法律和伦理问题进行详细…

Yocto项目 - VIRTUAL-RUNTIME,它有什么用?

Yocto 项目是一个完整的 Linux 分布构建工具集&#xff0c;提供了构建完全自定义小型核心或完整应用的能力。在这样一个构建系统中&#xff0c;VIRTUAL-RUNTIME这个概念是应用构建和选择处理中的重要部分。这篇文章将从概念、优势、应用场景和实战案例几个方面&#xff0c;全面…

BB1-NHS ester被用于将各种生物活性分子与蛋白质或其他生物大分子进行共轭连接,2082771-52-4

CAS号&#xff1a;2082771-52-4 中文名&#xff1a;BB1-琥珀酰亚胺酯&#xff0c;BB1-活性酯 英文名&#xff1a;BB1-NHS ester&#xff0c;或BB1-Succinimidyl Ester 分子式&#xff1a;C32H32N6O4 分子量&#xff1a;564.63 纯度&#xff1a;≥95% 供应商&#xff1a;陕…

初级数据结构——栈

目录 前言一、栈的基本概念二、栈的实现方式三、栈的性能分析四、栈的应用场景五、栈的变体六、出栈入栈的动态图解七、代码模版八、总结结语 前言 数据结构栈&#xff08;Stack&#xff09;是一种线性的数据结构&#xff0c;它只允许在序列的一端&#xff08;称为栈顶&#x…

Jdbc学习笔记(四)--PreparedStatement对象、sql攻击(安全问题)

目录 &#xff08;一&#xff09;使用PreparedStatement对象的原因&#xff1a; 使用Statement对象编写sql语句会遇到的问题 ​编辑 &#xff08;二&#xff09;sql攻击 1.什么是sql攻击 2.演示sql攻击 &#xff08;三&#xff09;防止SQL攻击 1.PreparedStatement是什么 …

前端开发必备!2024年最全工具和框架资源大汇总

在前端开发的过程中&#xff0c;我们会使用各种工具、框架和库来提升开发效率和用户体验。随着技术的不断发展&#xff0c;前端生态系统逐渐丰富&#xff0c;开发者面临着越来越多的选择。本文将分享一些常见的前端资源&#xff0c;帮助开发者根据项目需求选择合适的工具。 1.…

备份可以起到什么作用?

在数字化时代&#xff0c;数据已经成为企业最宝贵的资产。然而&#xff0c;数据丢失和系统故障可能给企业带来巨大的损失。华为云备份服务作为一款全面的数据保护解决方案&#xff0c;致力于帮助企业保障数据安全&#xff0c;确保业务的连续性。九河云来给大家说一下华为云备份…

labview实现导出excel表格

有些项目数据读写在数据库里&#xff0c;有时客户会要求读写出来&#xff0c;这样就用到了labview把数据导出来&#xff0c;一般在测试程序界面&#xff0c;我们会把测试数据放在多列列表框里&#xff0c;这里我们需要对多列列表框进行操作。把多列列表框中的项名拆分出来。 接…

深度解读AI在数字档案馆中的创新应用:高效识别与智能档案管理

一、项目背景介绍 在信息化浪潮推动下&#xff0c;基于OCR技术的纸质档案电子化方案成为解决档案管理难题的有效途径。该方案通过先进的OCR技术&#xff0c;能够统一采集各类档案数据&#xff0c;无论是手写文件、打印文件、复古文档还是照片或扫描的历史资料&#xff0c;都能实…

vue3 vant4 NumberKeyboard 根据焦点输入

说明&#xff1a; 使用该组件时焦点在最后&#xff0c;客户要求可更改前面输错信息 实现逻辑 1.获取输入框焦点位置&#xff0c;此次采用的是ref&#xff0c;也可使用document相关 const inputElement numberKeyboardRef.value;if (inputElement) {cursorPosition.value i…

DHT22温湿度传感器(Espressif驱动)

DHT22&#xff1a; 温度范围&#xff1a;-40-80C温度精度&#xff1a;0.5C湿度范围&#xff1a;0-100%RH湿度精度&#xff1a;2-5%RH分辨率&#xff1a;0.1C / 0.1%RH #define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE#include <stdio.h> #include <freertos/FreeRTOS.h>…

数据结构——排序(续集)

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…

MySQL主从复制

主节点 server id 1. 更改server id 指定二进制日志文件目录 [rootmaster ~]#vim /etc/my.cnf.d/mariadb-server.cnf [mysqld] server-id8 log-bin 2. 新建目录并赋予权限 mkdir -p /data/mysql/logbin/chowm -R mysql.mysql /data/mysql/ 3. 重新启动 systemctl enabl…

酥皮点心,味蕾上的享受

甘肃酥皮点心承载着悠久的历史与深厚的文化底蕴。它起源于古老的丝绸之路&#xff0c;在岁月的长河中&#xff0c;经过一代又一代甘肃人的传承与创新&#xff0c;成为了如今令人陶醉的美食。每一块酥皮点心都仿佛在诉说着过去的故事&#xff0c;见证着甘肃大地的变迁与发展。食…

SpringCloud核心组件(三)

文章目录 Nacos 注册中心1. 简介功能1.服务发现和服务健康监测2.动态配置服务3. 动态 DNS 服务4. 服务及其元数据管理 优势设计理念易于使用面向标准高可用方便扩展 部署模式单机模式集群模式 Nacos 生态&#xff1a; 2. 安装 Nacos第一步&#xff1a;拉取镜像第二步&#xff1…

反射、枚举以及lambda表达式

反射、枚举以及lambda表达式 反射定义用途反射基本信息反射相关的类Class类(反射机制的起源)Class类中的相关方法 反射示例获得Class对象的三种方式反射的使用 反射优点和缺点重点总结 枚举的使用背景及定义使用枚举优点缺点枚举和反射总结单例模式 Lambda表达式背景Lambda表达…

Java学习Day60:回家!(ElasticStatic)

1.what is ElasticStatic The Elastic Stack, 包括 Elasticsearch、 Kibana、 Beats 和 Logstash&#xff08;也称为 ELK Stack&#xff09;。能够安全可靠地获取任何来源、任何格式的数据&#xff0c;然后实时地对数据进行搜索、分析和可视化。 Elaticsearch&#xff0c;简称…

java八股-jvm入门-程序计数器,堆,元空间,虚拟机栈,本地方法栈,类加载器,双亲委派,类加载执行过程

文章目录 PC Register堆虚拟机栈方法区(Metaspace元空间双亲委派机制类加载器 类装载的执行过程 PC Register 程序计数器&#xff08;Program Counter Register&#xff09;是 Java 虚拟机&#xff08;JVM&#xff09;中的一个组件&#xff0c;它在 JVM 的内存模型中扮演着非常…

Docker 篇-Docker 详细安装、了解和使用 Docker 核心功能(数据卷、自定义镜像 Dockerfile、网络)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Docker 概述 1.1 Docker 主要组成部分 1.2 Docker 安装 2.0 Docker 常见命令 2.1 常见的命令介绍 2.2 常见的命令演示 3.0 数据卷 3.1 数据卷常见的命令 3.2 常见…