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容器
docker·容器
二十雨辰1 小时前
[linux]docker基础
linux·运维·docker
time never ceases2 小时前
使用docker方式进行Oracle数据库的物理迁移(helowin/oracle_11g)
数据库·docker·oracle
YCyjs2 小时前
K8S群集调度二
云原生·容器·kubernetes
Hoxy.R2 小时前
K8s小白入门
云原生·容器·kubernetes
MonkeyKing_sunyuhua4 小时前
ubuntu22.04 docker-compose安装postgresql数据库
数据库·docker·postgresql
追风林4 小时前
mac m1 docker本地部署canal 监听mysql的binglog日志
java·docker·mac
€☞扫地僧☜€5 小时前
docker 拉取MySQL8.0镜像以及安装
运维·数据库·docker·容器
茶馆大橘5 小时前
微服务系列六:分布式事务与seata
分布式·docker·微服务·nacos·seata·springcloud
全能全知者7 小时前
docker快速安装与配置mongoDB
mongodb·docker·容器