Docker 网络模式

目录

[一. 默认网络驱动程序](#一. 默认网络驱动程序)

[a. Bridge 网络](#a. Bridge 网络)

[b. Host 网络](#b. Host 网络)

[c. Overlay 网络](#c. Overlay 网络)

[d. Macvlan 网络](#d. Macvlan 网络)

[二. 网络模式](#二. 网络模式)

[三. 网络配置和管理](#三. 网络配置和管理)

网络创建

网络连接

网络断开

查看网络

[四. 端口映射和暴露](#四. 端口映射和暴露)

端口映射

端口暴露


Docker 的网络模型为容器提供了灵活的网络配置选项,使得容器可以彼此通信,也可以与外部世界进行交互。Docker 支持几种主要的网络驱动程序,每种驱动程序都适用于不同的场景。以下是 Docker 网络模型的主要组成部分:

一. 默认网络驱动程序

a. Bridge 网络
  • 特点:

    • 这是 Docker 的默认网络驱动程序。
    • 在单台主机上,容器通过虚拟网桥(docker0)进行通信。在Docker中,docker0 是一个虚拟网桥,用于容器之间的通信以及容器与宿主机之间的通信。当你安装并启动Docker服务时,docker0 网桥会自动创建。这个网桥通常使用一个私有网络地址范围,默认是 172.17.0.0/16。使用ip addr show docker0可查看详细信息。
    • 容器在桥接网络上使用私有 IP 地址,相互之间可以直接通信,但外部主机需要通过端口映射来访问容器。
  • 使用方式:

    bash 复制代码
    # --driver bridge 指定了网络类型为桥接网络
    docker network create --driver bridge my_bridge_network
b. Host 网络
  • 特点:

    • 容器直接使用主机的网络堆栈,没有网络隔离。
    • 性能更高,但容器与主机共享网络,可能带来安全隐患。
    • 当容器使用 host 网络模式时,它将直接使用宿主机的网络接口,因此,容器内的服务可以通过宿主机的网络接口直接暴露给外部网络。这种网络模式适用于那些需要直接使用宿主机网络环境的容器,比如某些网络应用或服务
  • 使用方式:

    bash 复制代码
    # 在这个命令中,--network host 指定了容器应该使用宿主机的网络命名空间。
    docker run --network host my_image

host 网络模式的主要特点是:

  • 共享网络命名空间:容器和宿主机共享相同的网络命名空间。
  • 无网络隔离:容器不拥有自己的网络栈,因此与宿主机之间没有网络隔离。
  • 性能优势 :由于不经过网络地址转换(NAT),host 网络模式通常在网络性能上优于桥接网络。
c. Overlay 网络
  • 特点:

    • 主要用于 Docker Swarm 集群中,使得跨主机的容器可以通信。
    • 通过 VXLAN 隧道实现多主机间的网络覆盖。

在Docker中,Overlay网络是一种跨多个主机工作的网络,它允许运行在不同主机上的容器之间进行通信。Overlay网络通常用于Swarm集群模式,其中多个Docker宿主机被配置为一个集群,共同工作以运行分布式应用程序。

Overlay网络的关键特性包括:

  1. 跨主机通信:容器可以跨越不同的宿主机进行通信,这对于微服务架构和分布式应用非常重要。
  2. 加密传输:Overlay网络通常使用加密技术来确保容器之间的通信安全。
  3. 动态服务发现:在Swarm集群中,服务可以通过Overlay网络自动发现其他服务,即使它们位于不同的宿主机上。
  4. 可扩展性:Overlay网络可以随着集群的扩大而扩展,支持成千上万的容器和服务。

要创建一个Overlay网络,通常是在Swarm集群模式下进行的。可以使用以下命令:

bash 复制代码
docker network create -d overlay my-overlay-network

在这个命令中,-d overlay 指定了网络类型为Overlay网络,my-overlay-network 是新网络的名称。

在Swarm集群中,创建服务时可以指定使用这个Overlay网络:

bash 复制代码
docker service create --name my-service --network my-overlay-network my-image

在这个命令中,--network my-overlay-network 指定了服务应该连接到名为 my-overlay-network 的Overlay网络。

d. Macvlan 网络
  • 特点:

    • 容器直接获得一个物理网络接口的 MAC 地址,适用于需要容器拥有独立 IP 地址的场景。
    • 容器能够像普通网络设备一样与网络设备进行交互,适合与传统网络设备集成的场景。

Macvlan 是 Docker 支持的一种网络驱动,它允许你为容器分配一个或多个独特的 MAC 地址,并让它们出现在物理网络上,就像物理设备一样。Macvlan 网络可以让你将一个物理网络接口(如 eth0)分割成多个虚拟网络接口,每个接口都可以有自己的 IP 地址和 MAC 地址。

Macvlan 的主要特点包括:

  1. MAC 地址隔离:每个 Macvlan 接口都有自己的 MAC 地址,这提供了比传统的桥接网络更高的隔离性。
  2. 直接连接:Macvlan 容器直接连接到物理网络,不需要经过 Docker 桥接网络,这可以提供更好的网络性能。
  3. 易于管理:Macvlan 网络可以很容易地集成到现有的网络基础设施中,因为它遵循标准的网络协议。

要在 Docker 中使用 Macvlan,首先需要确保系统支持 Macvlan,并且你的网络管理员允许使用它。然后,可以使用以下命令创建一个 Macvlan 网络:

bash 复制代码
docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 \
  my-macvlan-network

在这个命令中:

  • -d macvlan 指定网络驱动为 Macvlan。
  • --subnet--gateway 指定了子网和网关。
  • -o parent 指定了父接口,即宿主机上的物理网络接口。

创建 Macvlan 网络后,你可以运行容器并指定使用这个网络:

bash 复制代码
docker run -d --name my-container --network my-macvlan-network my-image

使用 Macvlan 网络的容器将直接连接到父接口所在的物理网络,并且可以像物理设备一样进行通信。

扩展:

  1. 自定义网络:

在Docker中,自定义网络是一种功能,它允许用户根据特定需求创建和管理网络。自定义网络的区分主要是基于不同的网络驱动程序和配置选项,这些驱动程序和选项提供了不同的网络功能和特性,以满足不同的使用场景。

  1. Swarm

Swarm 是 Docker 官方提供的一个集群管理工具,用于管理多个 Docker 宿主机,使它们协同工作,形成一个高可用、可扩展的集群环境。Swarm 提供了以下主要功能:

  1. 集群管理:Swarm 可以管理多个 Docker 宿主机,使它们作为一个整体运行。管理员可以在 Swarm 集群中添加或移除宿主机,而不会影响到集群中运行的应用。

  2. 服务编排:Swarm 允许用户定义和部署服务,包括服务所需的容器数量、资源限制、网络配置等。Swarm 会自动根据定义的规则来调度和管理这些服务。

  3. 负载均衡:Swarm 能够自动在不同的宿主机之间分配负载,确保服务的高可用性和性能。

  4. 服务发现:Swarm 提供服务发现功能,允许容器通过服务名称相互通信,而不需要知道彼此的 IP 地址。

  5. 滚动更新:Swarm 支持滚动更新,允许用户平滑地更新服务,减少服务中断。

Swarm 集群由两种类型的节点组成:

  • 管理节点(Manager Nodes):负责处理集群的编排任务,如服务部署、更新、故障转移等。

  • 工作节点(Worker Nodes):执行由管理节点分配的任务,如运行容器、处理网络请求等。

二. 网络模式

  • None :none 网络是一种特殊的网络模式,它表示容器没有网络接口。当容器连接到 none 网络时,它将完全与外部网络隔离,没有任何网络通信能力。这种网络模式可以用于需要完全隔离和安全的场景。

bash 复制代码
docker run --network none my_image
  • Container :container 网络模式是一种让容器共享另一个容器的网络命名空间的网络模式。当使用 container 网络模式时,新创建的容器不会获得自己的网络接口,而是与指定的容器共享IP地址和端口等网络资源。这意味着两个容器将共享相同的网络栈,包括网络接口、IP地址、端口等。

    bash 复制代码
    docker run --network container:other_container my_image
    • 容器与另一个容器共享网络命名空间,共享 IP 地址和端口。可以通过 --network container:<container_id> 参数进行配置。

三. 网络配置和管理

网络创建

创建一个自定义网络并指定驱动程序:

bash 复制代码
docker network create --driver bridge my_custom_network
网络连接

将容器连接到指定网络:

bash 复制代码
docker network connect my_custom_network my_container
网络断开

将容器从指定网络中断开:

bash 复制代码
docker network disconnect my_custom_network my_container
查看网络

列出所有网络:

bash 复制代码
docker network ls

查看网络的详细信息:

bash 复制代码
docker network inspect my_custom_network

四. 端口映射和暴露

端口映射

将主机端口映射到容器端口:

bash 复制代码
docker run -p 8080:80 my_image
端口暴露

在 Dockerfile 中声明容器要暴露的端口:

bash 复制代码
EXPOSE 80

EXPOSE 指令不进行端口映射,仅仅是文档化容器预期要使用的端口,实际的端口映射需通过 docker run -p 实现。

相关推荐
君不见,青丝成雪1 天前
网关整合验签
大数据·数据结构·docker·微服务·系统架构
oneslide1 天前
Kubernetes环境部署Redis集群
redis·容器·kubernetes
企鹅侠客1 天前
k8s之Headless浅谈
云原生·容器·kubernetes
SHIPKING3931 天前
【Docker安装】Windows10专业版安装教程
运维·docker·容器
编程的一拳超人1 天前
Docker核心概念、常用命令与实战指南
运维·docker·容器
编程的一拳超人1 天前
Docker 核心命令速查表(精细分类版)
运维·docker·容器
风吹一夏v1 天前
Docker 部署 GitLab 和 GitLab Runner 指南
docker·容器·gitlab
曦樂~1 天前
【Docker】网络
docker·容器·php
刘晓倩1 天前
Docker Desktop(Windows/Mac)零外网部署 Dify 极简指南
macos·docker·容器
Lucis__1 天前
从基本用法到迭代器实现—list重难点突破
c++·容器·list