一文带你了解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 网络模型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker  Registry 私有仓库搭建详细步骤

    Docker Registry 私有仓库搭建详细步骤

    这篇文章主要介绍了Docker Registry 私有仓库搭建的相关资料,需要的朋友可以参考下
    2016-10-10
  • Docker 实现在线集成开发环境实例详解

    Docker 实现在线集成开发环境实例详解

    这篇文章主要介绍了Docker 实现在线集成开发环境实例详解的相关资料,这里对实现在线集成开发环境,进行了详细的介绍及实现,需要的朋友可以参考下
    2016-11-11
  • Docker挂载资料卷部署Nginx

    Docker挂载资料卷部署Nginx

    这篇文章介绍了Docker挂载资料卷部署Nginx,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01
  • Docker ZooKeeper3.4.10集群安装配置过程

    Docker ZooKeeper3.4.10集群安装配置过程

    这篇文章主要介绍了ZooKeeper3.4.10集群安装配置-Docker,集群部署配置步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • docker 容器网络模式详解

    docker 容器网络模式详解

    这篇文章主要为大家介绍了docker 容器网络模式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • docker限制容器内存的方法详解

    docker限制容器内存的方法详解

    在服务器中使用 docker 时,如果不对 docker 的可调用内存进行限制,当 docker 内的程序出现不可预测的问题时,就很有可能因为内存爆炸导致服务器主机的瘫痪,本文将介绍使用 docker 进行容器内存限制的方法,感兴趣的朋友一起看看吧
    2023-11-11
  • docker kubernetes dashboard安装部署详细介绍

    docker kubernetes dashboard安装部署详细介绍

    这篇文章主要介绍了docker kubernetes dashboard安装部署详细介绍的相关资料,需要的朋友可以参考下
    2016-10-10
  • 使用docker部署django的详细步骤

    使用docker部署django的详细步骤

    当用Django框架开发的网站项目完成后上线的话可以用物理主机、虚拟机来部署,也可以容器,下面这篇文章主要给大家介绍了关于使用docker部署django的详细步骤,需要的朋友可以参考下
    2022-08-08
  • docker镜像导入的实现方法

    docker镜像导入的实现方法

    如果服务器网络不好或者pull不下来镜像,只能进行导入,本文主要介绍了docker镜像导入的实现方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Docker 安装 Jenkins 并解决初始安装插件失败问题

    Docker 安装 Jenkins 并解决初始安装插件失败问题

    这篇文章主要介绍了Docker 安装 Jenkins 并解决初始安装插件失败问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04

最新评论