Docker 使用基础(5)—Network

 

                                         🎬慕斯主页修仙—别有洞天

                                       ♈️今日夜电波:秒針を噛む—ずっと真夜中でいいのに。

                                                           0:34━━━━━━️💟──────── 4:20
                                                                🔄   ◀️   ⏸   ▶️    ☰  

                                 💗关注👍点赞🙌收藏您的每一次鼓励都是对我莫大的支持😍


 目录

首先理解几个概念

Docker网络模型

核心组件

网络驱动

常见网络类型

docker网络管理命令

1. docker network create

2. docker network rm

3. docker network inspect

4. docker network ls

5. docker network prune

6. docker network connect

7. docker network disconnect

网络运用详解

docker bridge网络

docker Host网络

docker Container网络

docker none 网络


首先理解几个概念

        Docker 容器网络是为应用程序所创造的虚拟环境的一部分,它能让应用从宿主机操作系统的网络环境中独立出来,形成容器自有的网络设备、 IP 协议栈、端口套接字、 IP路由表、防火墙等等与网络相关的模块。 以下是Docker网络架构的关键组成部分和概念的简介:

Docker网络模型

        Docker的网络模型允许容器之间的网络连接和通信,同时也支持容器与宿主机以及外部网络的通信。Docker网络模型基于Linux的命名空间(namespace)和控制组(cgroups)技术,为每个容器提供隔离的网络环境。

核心组件

Docker网络架构的核心组件包括:

  • CNM (Container Network Model):这是Docker网络架构的设计规范,规定了网络的基本组成要素和接口。CNM 中规定了 Docker 网络的基础组成要素: Sandbox、 Endpoint、 Network。

• Sandbox:提供了容器的虚拟网络栈,也即端口、套接字、 IP 路由表、防火墙、

DNS 配置等内容。主要用于隔离容器网络与宿主机网络,形成了完全独立的容器网络

环境。

• Network: Docker 内部的虚拟子网,使得网络内的参与者能够进行通讯。

• Endpoint:就是虚拟网络的接口,就像普通网络接口一样, Endpoint 的主要职责

是负责创建连接。 Endpoint 类似于常见的网络适配器,那也就意味着一个 Endpoint 只

能接入某一个网络, 当容器需要接入到多个网络,就需要多个 Endpoint。

如上图所示,容器 B 有两个 Endpoint 并且分别接入 Networkd A 和 Network B。那么容器 A 和容器 B 之间是可以实现通信的,因为都接入了 NetworkA。但是容器 A 和容器 C 不可以通过容器 B 的两个 Endpoint 通信

  • Libnetwork:这是CNM的实现,用Go语言编写,提供了网络的抽象和实现细节,包括网络的创建、删除、连接和断开等功能。
  • 驱动:Libnetwork通过各种驱动程序来支持不同的网络拓扑和功能,例如bridge、overlay、macvlan、host等网络模式。主要负责实现数据层相关内容,例如网络的连通性和隔离性是由驱动来处理的。驱动通过实现特定网络类型的方式扩展了 Docker 网络栈,例如桥接网络和覆盖网络。
网络驱动

Docker支持多种网络驱动,每种驱动提供了不同的网络隔离和连接能力:

  • Bridge:这是默认的网络驱动,为每个容器创建一个虚拟网络接口,并将其连接到一个名为docker0的虚拟桥接设备上,从而实现容器之间的通信。
  • Host:容器直接使用宿主机的网络堆栈,没有网络隔离,适用于需要直接访问宿主机网络的服务。
  • None:容器不被分配任何网络接口,除了环回接口(loopback interface),用户可以在此基础上进行自定义网络配置。
  • Overlay:允许容器跨多台主机进行通信,通常用于构建集群环境中的服务发现和负载均衡。
  • Macvlan:允许容器直接使用宿主机的物理网络接口,提供更高的网络性能和更低的延迟。
  • Other Custom Drivers:Docker还支持用户自定义的网络驱动,如Weave、Flannel、Calico等,这些驱动提供了更高级别的网络功能,如网络策略、服务质量(QoS)、安全组等。

常见网络类型
  1. bridge 网络
    bridge 驱动会在 Docker 管理的主机上创建一个 Linux 网桥。默认情况下,网桥上
    的容器可以相互通信。也可以通过 bridge 驱动程序配置,实现对外部容器的访问。
    Docker 容器的默认网络驱动.当我们需要多个容器在同一个 Docker 主机上通信时,桥
    接网络是最佳选择
  2. host 网络
    对于独立容器,移除容器和 Docker 主机之间的网络隔离,并直接使用主机的网络。
    当网络堆栈不应该与 Docker 主机隔离,但是希望容器的其他资源被隔离时,主机网络
    是最佳选择。
  3. container 网络
    这个模式指定新创建的容器和引进存在的一个容器共享一个网络 ,而不是和宿主
    机共享。新创建的容器不会创建自己的网卡,配置自己的 ip,而是和一个指定的容器
    共享 ip,端口等,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离
    的。两个容器的进程可以通过 lo 网卡设备通信
  4. none 网络
    Docker 容器拥有自己的 Network Namespace,但是,并不为 Docker 容器进行任
    何网络配置。也就是说,这个 Docker 容器没有网卡、 IP、路由等信息。容器完全网络
    隔离。
  5. overlay 网络
    借助 Docker 集群模块 Docker Swarm 搭建的跨 Docker Daemon 网络。将多个
    Docker 守护进程连接在一起,使集群服务能够相互通信。当我们需要运行在不同
    Docker 主机上的容器进行通信时,或者当多个应用程序使用集群服务协同工作时,覆
    盖网络是最佳选择。

docker网络管理命令

        Docker 网络管理命令提供了对 Docker 容器网络配置的全面控制,以下是对主要网络管理命令的详细解释,包括它们的用途、语法和关键参数:

1. docker network create

用途
创建一个新的 Docker 网络。这可以是一个自定义的桥接网络、overlay 网络或其他类型的网络。

语法

docker network create [OPTIONS] NETWORK

关键参数

  • --driver:指定网络驱动类型,例如 bridgeoverlay
  • --subnet:指定网络的子网地址范围。
  • --ip-range:指定网络中 IP 地址的可用范围。
  • --gateway:指定网络的网关地址。
  • --label:为网络添加元数据标签。
  • --opt:设置网络驱动特定的选项。
  • --ipv6: 启用 ipv6

示例

docker network create --driver bridge --subnet 192.168.1.0/24 --ip-range 192.168.1.2-192.168.1.254 --gateway 192.168.1.1 my-net

2. docker network rm

用途
删除一个或多个 Docker 网络。

语法

docker network rm [OPTIONS] NETWORK [NETWORK...]

关键参数
无特殊参数,但需要注意的是,在删除网络前必须先断开所有连接到该网络的容器。

示例

docker network rm my-net

3. docker network inspect

用途
显示一个或多个网络的详细信息,包括网络的配置和连接的容器列表。

语法

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

关键参数
无特殊参数,但可以使用 -f--format 指定输出格式。

示例

docker network inspect my-net

4. docker network ls

用途
列出系统中的所有 Docker 网络。

语法

docker network ls [OPTIONS]

关键参数
可以使用 --filter 参数过滤网络列表,例如按标签筛选。

示例

docker network ls

5. docker network prune

用途
删除所有未使用的网络,即没有容器连接的网络。注意这里所指的未使用的网络实际上是没有容器连接的网络。

语法

docker network prune [OPTIONS]

关键参数

  • --force:立即删除网络而不等待,可能中断正在运行的容器。

示例

docker network prune

6. docker network connect

用途
将一个容器连接到现有的 Docker 网络。

语法

docker network connect [OPTIONS] NETWORK CONTAINER

关键参数

  • --alias:为容器在网络中指定别名。
  • --link:链接到其他容器(此功能已被弃用)。

示例

docker network connect my-net my-container

7. docker network disconnect

用途
将容器从 Docker 网络中断开。

语法

docker network disconnect [OPTIONS] NETWORK CONTAINER

关键参数

  • --force:强制断开连接,即使容器正在运行。

示例

docker network disconnect my-net my-container

网络运用详解

docker bridge网络

        Docker Bridge 网络采用内置的 bridge 驱动, bridge 驱动底层采用的是 Linux 内核中Linux bridge 技术。就网络而言, bridge 网络是在网络段之间转发流量的链路层设备,而网桥可以是在主机内核中运行的硬件设备或软件设备;就 Docker 而言,桥接网络使用软件网桥 docker0,它允许连接到同一网桥网络的容器进行通信,同时提供与未连接到该网桥网络容器的隔离。

示例:

        首先创建一个bridge网络,再让两个容器关联上该网络,注意,当我们直接在运行容器时使用--network指定网络时,该容器只会连接到指定的网络而不会连接到默认的网络,这里镜像我使用了busybox:

后续进入双方的shell,发现双方都是可以互相ping通的!

        Docker 自定义桥接网络是支持通过 Docker DNS 服务进行域名解析的, 也就是说我们可以直接使用容器名进行通信,因为 DNS 服务可以解析容器名到 IP 地址的映射, 但是默认的 bridge 网络是不支持 DNS 的。

docker Host网络

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

示例:

可以看到容器与宿主机见的IP和端口是相同的:

        需要注意的是,由于容器是直接映射宿主机的端口,那么当宿主机的端口被占用了,容器也会启动失败!

docker Container网络

        Docker Container 的 other container 网络模式是 Docker 中一种较为特别的网络的模式。之所以称为“other container 模式”,是因为这个模式下的 Docker Container,会使用其他容器的网络环境。之所以称为“特别”,是因为这个模式下容器的网络隔离性会处于 bridge 桥接模式与 host 模式之间。 Docker Container 共享其他容器的网络环境,则至少这两个容器之间不存在网络隔离,而这两个容器又与宿主机以及除此之外其他的容器存在网络隔离。

示例:

我们先让一个容器加入到一个bridge网络中,再让另外一个容器加入到前一个容器的container中,可以发现两个容器的网络配置是相同的!

docker none 网络

none 网络就是指没有网络。挂在这个网络下的容器除了 lo(本地回环),没有其他任何网卡。

示例:

如下我们指定一个容器加入到none网络中,再查看他的网络配置以及尝试ping本地以及外部的ip:


                      感谢你耐心的看到这里ღ( ´・ᴗ・` )比心,如有哪里有错误请踢一脚作者o(╥﹏╥)o! 

                                       

                                                                        给个三连再走嘛~  

 

  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕斯( ˘▽˘)っ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值