docker网络连接模式详解

ops/2024/10/22 1:00:12/

五种模式对比

bridge/桥接网络:适用于大多数单主机场景,提供基本的网络隔离和通信。
HOST/主机网络:适用于需要高性能和直接网络访问的场景。
NONE/无网络:适用于不需要网络访问的容器,增加安全性。
container/容器网络:适用于需要多个容器共享同一网络配置的场景。
自定义网络:适用于需要更高级网络功能的场景,如多主机通信和服务发现。

网络模式指定

docker run --network <mode>

<mode>: 可以是

node

bridge

host

container:<容器名或容器ID>

<自定义网络名称>

bridge模式特点

  1. 隔离性

    • 容器隔离:每个容器都有自己的网络命名空间,彼此之间是隔离的。
    • 与宿主机隔离容器与宿主机的网络也是隔离的,除非通过端口映射(-p 选项)将容器的端口暴露到宿主机上。
  2. 自动分配 IP

    • 动态分配:Docker 会自动为每个连接到桥接网络的容器分配一个 IP 地址。
    • 子网划分:每个桥接网络都有自己的子网,通常使用私有 IP 地址段(如 172.17.0.0/16)。
  3. 端口映射

    • 外部访问:通过 -p 选项可以将容器的端口映射到宿主机的端口,从而从外部网络访问容器
    • 内部通信容器之间可以通过各自的 IP 地址或容器名称(如果使用了 --link 或自定义网络中的别名)进行通信。
  4. DNS 解析

    • 容器名称解析:在自定义桥接网络中,容器可以通过名称解析其他容器的 IP 地址,而不仅仅是通过 IP 地址。
    • 服务发现:Docker 提供了基本的服务发现功能,使得容器可以通过名称相互发现和通信。
  5. 网络配置

    • 静态配置:可以在创建自定义桥接网络时指定子网、网关等网络参数。
    • 动态配置:Docker 会自动管理网络配置,简化了网络管理的复杂性

HOST模式特点

  1. 共享网络命名空间

    • 网络接口共享容器和宿主机共享相同的网络接口,容器的网络配置与宿主机完全相同。
    • 网络隔离缺失容器不再有独立的网络栈,因此不能通过 iptables 规则或其他网络隔离技术来限制容器的网络访问。
  2. 高性能

    • 低延迟:由于没有额外的网络层和虚拟化开销,主机网络模式下的网络通信延迟非常低。
    • 高吞吐量:直接使用宿主机的网络接口,可以实现更高的网络吞吐量。
  3. 无需端口映射

    • 直接访问容器的端口直接暴露在宿主机上,无需使用 -p 选项进行端口映射。
    • 简化配置:减少了网络配置的复杂性,特别是对于需要大量端口映射的场景。
  4. 缺乏隔离性

    • 网络冲突容器和宿主机共享相同的网络接口,可能会导致端口冲突和网络配置冲突。
    • 安全性降低:由于缺乏网络隔离,容器可能更容易受到网络攻击。
  5. 适用场景

    • 高性能服务:适用于需要高性能和低延迟的网络服务,如高性能数据库、实时数据处理等。
    • 网络调试:适用于需要直接访问宿主机网络接口的调试场景。
    • 网络密集型应用:适用于需要大量网络通信的应用,如负载均衡器、代理服务器等。

Docker none 网络模式的特点

  1. 完全隔离的网络环境

    • 无网络接口容器没有任何网络接口,除了本地回环接口(lo)。
    • 无网络通信容器不能与其他容器或宿主机进行网络通信,也不能访问外部网络。
  2. 增强安全性

    • 减少攻击面:由于容器没有网络接口,攻击者无法通过网络访问容器,从而减少了潜在的攻击面。
    • 防止意外通信:适用于那些不应该有任何网络通信的容器,防止意外的网络请求或数据泄露。
  3. 简化网络配置

    • 无需网络配置:由于容器没有网络接口,不需要进行复杂的网络配置,简化了部署和管理。
    • 减少冲突:避免了网络地址冲突和其他网络配置问题。
  4. 适用于特定场景

    • 批处理任务:适用于那些只需要执行本地计算任务的容器,如数据处理、批处理作业等。
    • 安全审计:适用于需要在完全隔离的环境中运行的安全审计或敏感数据处理任务。
    • 测试环境:适用于需要在完全隔离的环境中进行测试的场景,确保测试结果不受网络影响。

Docker container 网络模式的特点

  1. 共享网络命名空间

    • 网络配置共享:新启动的容器将使用已存在的容器的网络配置,包括 IP 地址、端口和网络接口。
    • 网络隔离:虽然多个容器共享同一个网络命名空间,但它们仍然是独立的容器,可以独立管理。
  2. 简化网络配置

    • 减少配置复杂性:多个容器可以共享同一个网络配置,减少了网络配置的复杂性。
    • 一致的网络环境:所有共享网络命名空间的容器具有相同的网络环境,便于管理和调试。
  3. 适用于特定场景

    • 多进程应用:适用于需要在一个网络命名空间中运行多个进程的应用,如一个主进程和多个辅助进程。
    • 服务发现:多个容器可以共享同一个网络命名空间,方便服务发现和内部通信。
    • 调试和测试:在调试和测试环境中,可以快速启动多个容器并共享同一个网络配置。

 自定义网络模式包括桥接网络(Bridge)、覆盖网络(Overlay)、MACVLAN 网络和 IPvLAN 网络

1. 桥接网络(Bridge)

特点
  1. 隔离性

    • 容器隔离:每个容器都有自己的网络命名空间,彼此之间是隔离的。
    • 与宿主机隔离容器与宿主机的网络也是隔离的,除非通过端口映射(-p 选项)将容器的端口暴露到宿主机上。
  2. 自动分配 IP

    • 动态分配:Docker 会自动为每个连接到桥接网络的容器分配一个 IP 地址。
    • 子网划分:每个桥接网络都有自己的子网,通常使用私有 IP 地址段(如 172.17.0.0/16)。
  3. 端口映射

    • 外部访问:通过 -p 选项可以将容器的端口映射到宿主机的端口,从而从外部网络访问容器
    • 内部通信容器之间可以通过各自的 IP 地址或容器名称(如果使用了 --link 或自定义网络中的别名)进行通信。
  4. DNS 解析

    • 容器名称解析:在自定义桥接网络中,容器可以通过名称解析其他容器的 IP 地址,而不仅仅是通过 IP 地址。
    • 服务发现:Docker 提供了基本的服务发现功能,使得容器可以通过名称相互发现和通信。
  5. 网络配置

    • 静态配置:可以在创建自定义桥接网络时指定子网、网关等网络参数。
    • 动态配置:Docker 会自动管理网络配置,简化了网络管理的复杂性。

2. 覆盖网络(Overlay)

特点
  1. 多主机通信

    • 跨主机通信:覆盖网络允许多个 Docker 守护进程之间的容器相互通信,适用于 Docker Swarm 模式。
    • 服务发现:Docker 提供了内置的服务发现机制,使得容器可以通过服务名称进行通信。
  2. 网络隔离

    • 网络隔离:覆盖网络提供了网络隔离,不同网络中的容器不能直接通信。
  3. 动态配置

    • 自动配置:Docker 会自动管理覆盖网络的配置,简化了网络管理的复杂性。
  4. 加密通信

    • 加密:覆盖网络支持加密通信,确保数据传输的安全性。

3. MACVLAN 网络

特点
  1. 模拟物理网络

    • 独立 MAC 地址:每个容器有自己的 MAC 地址,可以直接连接到物理网络。
    • 直接访问容器可以直接访问物理网络,而不需要通过 Docker 的网络桥接。
  2. 网络隔离

    • 网络隔离:MACVLAN 网络提供了网络隔离,不同网络中的容器不能直接通信。
  3. 静态配置

    • 静态配置:可以在创建 MACVLAN 网络时指定子网、网关等网络参数。

4. IPvLAN 网络

特点
  1. L3 层通信

    • IP 层通信:IPvLAN 网络使用 L3 层(IP 层)进行通信,每个容器有自己的 IP 地址。
    • 直接访问容器可以直接访问物理网络,而不需要通过 Docker 的网络桥接。
  2. 网络隔离

    • 网络隔离:IPvLAN 网络提供了网络隔离,不同网络中的容器不能直接通信。
  3. 静态配置

    • 静态配置:可以在创建 IPvLAN 网络时指定子网、网关等网络参数。

 docker 自定义网络模式特点和桥接模式的区别

  1. 网络创建方式

    • 桥接网络:默认创建,所有未指定网络的容器都会自动连接到这个网络。
    • 自定义网络:用户根据需要手动创建,可以创建多个自定义网络,每个网络可以有不同的配置。
  2. 服务发现

    • 桥接网络:仅支持通过 --link 选项进行容器名称解析。
    • 自定义网络:支持强大的服务发现功能,容器可以通过名称解析其他容器的 IP 地址。
  3. 多主机通信

    • 桥接网络:仅限于单主机通信。
    • 自定义网络:覆盖网络(Overlay)允许多主机通信,适用于 Docker Swarm 模式。
  4. 网络配置

    • 桥接网络:默认子网和网关,较少的配置选项。
    • 自定义网络:支持多种类型的网络,可以指定子网、网关等网络参数。
  5. 网络隔离

    • 桥接网络:所有容器连接到同一个默认桥接网络,隔离性较差。
    • 自定义网络:可以创建多个自定义网络,实现更细粒度的网络隔离

 生产实例

桥接网络模式
# 启动MySQL容器
docker run -d --name mysql_db -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:5.7# 启动Node.js应用服务器容器
docker run -d --name node_app --link mysql_db:db -e DB_HOST=db my_node_app_image# 启动Nginx容器
docker run -d --name nginx_server -p 80:80 nginx
自定义桥接网络模式
# 创建自定义桥接网络
docker network create my_bridge# 启动MySQL容器
docker run -d --name mysql_db --network my_bridge --alias db \-e MYSQL_ROOT_PASSWORD=my-secret-pw \mysql:5.7# 启动Node.js应用服务器容器
docker run -d --name node_app --network my_bridge --alias app \-e DB_HOST=db \my_node_app_image# 启动Nginx容器
docker run -d --name nginx_server --network my_bridge --alias web \-p 80:80 \nginx


http://www.ppmy.cn/ops/127428.html

相关文章

【每日一面】day04

Q&#xff1a;为什么MySQL的InnoDB采用B树作为索引结构&#xff0c;而Redis采用跳表实现Zset&#xff1f;或者说&#xff0c;InnoDB为什么不用跳表&#xff0c;Redis为什么不用B树&#xff1f; 对于MySQL来说&#xff0c;高度&#xff0c;代表磁盘IO次数&#xff0c;在相同高度…

开源呼叫中心系统 FreeIPCC:大模型、知识库、企业官网与企业论坛社区的联动策略

大模型、知识库、企业官网与企业论坛社区的联动策略 作者&#xff1a;开源呼叫中心系统 FreeIPCC 在当今数字化时代&#xff0c;企业为了提升竞争力&#xff0c;不仅需要拥有强大的技术实力&#xff0c;还需要构建一套高效的信息管理和交互系统。大模型、知识库、企业官网以及…

随机数生成

Math.random double val Math.random(); 生成的是[0,1]之间的浮点数&#xff0c; 生成一个[120.500]区间的随机数 int and Double.valueOf(Math.ceil(Math.random()*381120)).intValue();Math.ceil只取浮点数的整数部分 Math.random()的实现 private static final class R…

中小型医院网站:Spring Boot框架实践

6 系统测试 6.1 测试定义 系统测试主要是判断系统是否可以正常运行&#xff0c;功能模块是否可以实现操作。程序代码中是否有错误出现。测试程序是开发过程中的一个主要问题。就算系统完成的再好&#xff0c;再进行程序测试时也会也会发现一个重来没有被发现的错误信息。 测试不…

uniappx uts自学(2024/10/14)

uts需要类型 uts声明变量 let 或 const let相当于 TypeScript 中的 let、kotlin 中的 var、swift 中的 var。 cosnt相当于 TypeScript 中的 const、kotlin 中的 val、swift 中的 let。 let [变量名] : [类型] 值; let str :string "hello"; // 声明一个字符串…

【MySQL】事务

目录 事务的概念 CURD不加控制会导致什么问题 什么是事务 为什么需要事务 事务的操作 事务的版本支持 事务的提交方式 事务常见操作方式 事务的隔离级别 如何理解隔离性 四个隔离级别 查看与设置隔离级别 隔离级别的使用 进一步探究读写隔离 了解MVCC 事务的概念…

从0到1构建webpack多页面多环境应用

Webpack凭借强大的功能&#xff0c;成为最流行和最活跃的打包工具&#xff0c;也是面试时高级程序员必须掌握的“软技能”&#xff1b;笔者结合在项目中的使用经验&#xff0c;介绍webpack的使用&#xff1b;本文是入门篇&#xff0c;主要介绍webpack的入口、输出和各种loader、…

vue后台管理系统从0到1(5)

文章目录 vue后台管理系统从0到1&#xff08;5&#xff09;完善侧边栏修改bug渲染header导航栏 vue后台管理系统从0到1&#xff08;5&#xff09; 接上一期&#xff0c;我们需要完善我们的侧边狼 完善侧边栏 我们在 element 组件中可以看见&#xff0c;这一个侧边栏是符合我们…