一文带你了解Docker网络模型

 更新时间:2023年07月05日 08:28:23   作者:山河亦问安  
Docker是一种容器化平台,它提供了一种轻量级的虚拟化解决方案,使得应用程序能够以容器的形式运行,Docker网络模型基于Linux内核的网络命名空间和虚拟以太网桥技术,本文就给大家详细介绍一下Docker 网络模型,需要的朋友可以参考下

1.Docker网络

1.1 Docker网络模型概述

Docker是一种容器化平台,它提供了一种轻量级的虚拟化解决方案,使得应用程序能够以容器的形式运行。在Docker中,每个容器都有自己的网络栈,可以与其他容器或主机进行通信。Docker网络模型为容器提供了灵活的网络配置和连接选项。

Docker网络模型基于Linux内核的网络命名空间和虚拟以太网桥技术。每个Docker容器都有自己的网络命名空间,这意味着每个容器都有自己的网络接口、IP地址和路由表。Docker还提供了一些网络驱动程序,用于实现容器之间的通信和与外部网络的连接。

Docker网络模型是一个三层的网络模型,它允许容器之间的通信,并提供了多种网络驱动程序供用户选择。Docker网络模型的核心组件包括:

  1. Docker网络:Docker网络是一组容器的虚拟网络,它允许容器之间进行通信。每个Docker网络都有自己的IP地址范围和子网掩码。

  2. Docker网桥:Docker网桥是一个虚拟交换机,它连接了Docker网络和物理网络,并负责容器之间的通信。

  3. 容器网络接口(CNI):CNI是一个插件接口,用于配置容器的网络。它定义了一组标准接口和一套配置规范,使得不同的网络驱动程序可以无缝切换。

1.2 Docker网络驱动程序

Docker提供了多种网络驱动程序,用于实现不同的网络连接方式。以下是一些常用的网络驱动程序:

1.2.1 host模式

host驱动程序将容器与主机网络共享,容器将直接使用主机的网络栈和IP地址。这意味着容器可以通过主机的IP地址与外部网络进行通信,但容器之间无法直接通信。使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好。

使用host驱动程序创建一个容器网络,只需运行以下命令:

$ docker run --name mycontainer --network host nginx

1.2.2 bridge模式

bridge驱动程序是Docker默认的网络驱动程序。它基于Linux内核的bridge技术,创建一个虚拟的以太网桥,用于连接容器和主机网络。每个容器都会分配一个独立的IP地址,并通过桥接方式与其他容器通信。bridge模式是docker的默认网络模式,不写--net参数,就是bridge模式。

Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器都会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。如下图:

从上图中我们可以看到,可以看到容器内部和Linux主机都会创建一个新的网卡,而这两个网卡都是成对的。使用的技术就是evth-pair。evth-pair 就是一对的虚拟设备接口,他们是成对出现的,一段连着协议,一段彼此相连。evth-pair充当一个桥梁,连接各种虚拟网络设备。

Docker容器完成bridge网络配置的过程如下:
 1. 在主机上创建一对虚拟网卡veth pair设备。veth设备总是成对出现的,它们组成了一个数据的通道,数据从一个设备进入,就会从另一个设备出来。因此,veth设备常用来连接两个网络设备。
 2. Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0。另一端放在主机中,以veth这样类似的名字命名,并将这个网络设备加入到docker0网桥中。
 3. 从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。一般在docker中docker0的IP地址就相当于localhost。

使用bridge驱动程序创建一个容器网络非常简单,只需运行以下命令:

$ docker run --name mycontainer --network bridge nginx

1.2.3 container模式

 这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace (网络命名空间),而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。

1.2.4 none模式

 使用none模式,Docker 容器拥有自己的Network Namespace ,但是,并不为Docker 容器进行任何网络配置。也就是说,这个Docker 容器没有网卡、IP、路由等信息。这种网络模式下容器只有lo回环网络,没有其他网卡。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。

1.3 Docker网络命令示例

1.3.1 创建一个自定义网络

$ docker network create mynetwork

1.3.2 列出所有网络

$ docker network ls

1.3.3 连接容器到网络

$ docker network connect mynetwork mycontainer

1.3.4 断开容器与网络的连接

$ docker network disconnect mynetwork mycontainer

1.3.5 查看容器的网络信息

$ docker network inspect mynetwork

到此这篇关于一文带你了解Docker网络模型的文章就介绍到这了,更多相关Docker 网络模型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Dockerfile的CMD指令用法

    Dockerfile的CMD指令用法

    这篇文章主要介绍了Dockerfile的CMD指令用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • docker启动nginx无法访问的问题解决

    docker启动nginx无法访问的问题解决

    本文主要介绍了docker启动nginx无法访问的问题解决,主要遇到404错误,问题原因是配置文件路径错误和权限问题,下面就来具体介绍一下问题解决,感兴趣的可以了解一下
    2025-02-02
  • Docker容器修改配置文件的实现

    Docker容器修改配置文件的实现

    这篇文章主要介绍了Docker容器修改配置文件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Docker Desktop搭建RocketMQ的图文步骤

    Docker Desktop搭建RocketMQ的图文步骤

    RocketMQ支持发布/订阅模式和点对点模式,可以根据业务需求选择合适的消息模式,本文主要介绍了Docker Desktop搭建RocketMQ的图文步骤,感兴趣的可以了解一下
    2024-02-02
  • Mac为docker和kubectl添加自动补全命令的方法

    Mac为docker和kubectl添加自动补全命令的方法

    很多朋友不太明白如何为docker和kubectl添加自动补全命令,本文通过一些示例给大家介绍kubectl基础概念及语法知识,需要的朋友参考下吧
    2021-06-06
  • Docker安装iTop快速搭建IT服务管理平台

    Docker安装iTop快速搭建IT服务管理平台

    本文主要介绍了Docker安装iTop快速搭建IT服务管理平台,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • 解决docker重启redis,mysql数据丢失的问题

    解决docker重启redis,mysql数据丢失的问题

    这篇文章主要介绍了解决docker重启redis,mysql数据丢失的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Docker搭建PHP运行环境完整步骤(图文教程)

    Docker搭建PHP运行环境完整步骤(图文教程)

    PHP是一种广泛使用的编程语言,被用于Web开发和服务器管理等各种用途,而Docker则是一种非常流行的容器化平台,可以方便地管理应用程序和环境,这篇文章主要给大家介绍了关于Docker搭建PHP运行环境的完整步骤,需要的朋友可以参考下
    2023-09-09
  • Dockerfile和docker-compose使用详解

    Dockerfile和docker-compose使用详解

    Dockerfile用于构建镜像,包含指令和说明,使用FROM开始构建,WORKDIR设置工作目录,RUN执行命令,COPY拷贝文件,EXPOSE暴露端口,CMD指定容器启动命令,docker-compose用于管理多容器,通过docker-compose.yml配置,支持多服务实例,可设定服务依赖和环境变量,支持挂载卷
    2024-11-11
  • Docker实现导入导出镜像(Image)文件的代码示例

    Docker实现导入导出镜像(Image)文件的代码示例

    在 Docker 中,镜像(Image)是容器的基础,包含了应用程序运行所需的所有文件系统和配置,有时,我们需要将 Docker 镜像导出到文件中,以便在其他地方使用,以下将详细介绍如何使用 Docker 导入导出镜像文件,需要的朋友可以参考下
    2024-08-08

最新评论