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 实现。

相关推荐
jingshaoqi_ccc8 小时前
ubuntu 24下面安装docker
ubuntu·docker·eureka
关关长语9 小时前
Vue本地部署包快速构建为Docker镜像
前端·vue.js·docker
水滴与鱼10 小时前
DOCKER制作ROS运行的镜像文件
运维·docker·容器
洒家肉山大魔王12 小时前
Kubernetes中Pod 处于 CrashLoopBackOff 状态(生产环境)
linux·容器·kubernetes·pod·pod循环重启
杨浦老苏13 小时前
安全的消息传递和协作工具Virola Messenger
docker·即时通讯·群晖·im
Lynnxiaowen13 小时前
今天我们学习kubernetes内容Ingress资源对象
学习·容器·kubernetes
jason成都14 小时前
emqx的docker部署
运维·docker·容器
mixboot15 小时前
docker 国内镜像源
docker·镜像源
谷粒.15 小时前
云原生时代的测试策略:Kubernetes环境下的测试实践
运维·网络·云原生·容器·kubernetes
java_logo16 小时前
Milvus GUI ATTU Docker 容器化部署指南
运维·数据库·docker·容器·eureka·milvus