Docker的4种网络通信模式

这篇具有很好参考价值的文章主要介绍了Docker的4种网络通信模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

由于Docker 容器彼此之间是逻辑隔离的,所以,在安装 Docker 时会在容器中创建隔离的网络环境。在该隔离的网络模式环境中,运行在宿主机上的各个容器具有完全独立的网络栈,并自Docker 容器的网络环境与宿主机相互隔离。通过使用 Docker 的不同网络模式,可以使 Docke容器共享宿主机的网络命名空间,也可以实现Docker容器间的相互访问

Docker一共提供了4种网络通信模式:bridge、container、host和none。下面对比了这4种模式的特点

Docker的4种网络通信模式,Docker,docker,容器

下面分别介绍这四种模式

1. bridge模式

bridge模式是Docker默认的网络通信模式,是开发者最常用的模式

在bridge模式下,Docker引擎会创建独立的网络命名空间。这样就可以保证运行在每一个命名空间中的容器具有独立的网卡等网络资源

利用bridge模式,可以非常方便地实现容器与容器之间、容器与宿主机之间的网络隔离。通过使用宿主机上的docker0网桥,可以实现Docker容器与宿主机(乃至外部网络)的网络通信。下面通过演示如何使用bridge模式

使用bridge模式创建容器

(1)使用busybox的镜像创建容器

[root@node1 ~]# docker run -it --network=bridge busybox /bin/sh

 Docker的4种网络通信模式,Docker,docker,容器

(2)在容器内查看网络信息

Docker的4种网络通信模式,Docker,docker,容器

2. host模式

在使用host模式时,容器与宿主机共享同一个网络命名空间,容器的IP地址与宿主机的IP地址相同。如果宿主机具有公网的IP地址,则容器也拥有这个公网的IP地址。即这时容器可以直接使用宿主机的IP地址与外界进行通信,且容器内服务的端口也可以直接使用宿主机的端口,无须进行任何的转换

由于在host模式下不再需要宿主机的转发,因此其性能得到了极大的提高,下图说明了host模式的工作机制

Docker的4种网络通信模式,Docker,docker,容器

使用host模式来创建容器

[root@node1 ~]# docker run -it --network=host busybox /bin/sh

对比一下容器内的网络信息和宿主机网络信息,如下面两张图可以发现,容器与宿主机共享了一个网络命名空间,即容器使用了宿主机的网络配置信息

Docker的4种网络通信模式,Docker,docker,容器

Docker的4种网络通信模式,Docker,docker,容器

尽管使用host模式可以很方便地通过localhost或者127.0.0.1实现容器与宿主机的相互 访问并且性能也比较好。但是这种模式也存在以下两个问题

  • 由于容器使用了宿主机的网络环境,因此网络环境的隔离性功能被减弱,从而造成了宿主机和容器争用网络资源。容器本身也不再拥有所有的网络资源,而是与宿主机共享网络资源
  • 宿主机和容器使用了相同的IP地址,这不利于网络的配置和管理

3. container模式

在container模式下,容器之间会共享网络环境。即一个容器会使用另一个容器的网络 命名空间。因此,在这种模式下,容器之间可以通过 localhost 或者 127.0.0.1 进行相互间 的访问,从而提高了传输的效率

Docker的4种网络通信模式,Docker,docker,容器

 container模式在一些特殊场景中非常有用。例如在 Kubernetes 中创建Pod时,会首先创建Pod的基础容器;而Pod 中的其他容器则采用 container 模式与基础容器进行通信。Pod中的各个容器采用localhost或者127.0.0.1进行通信,从而将 Pod中的所有容器形成一 个逻辑整体。

container模式的工作机制如图

Docker的4种网络通信模式,Docker,docker,容器

下面演示如何使用container模式

(1)使用busybox的镜像创建一个容器A,并查看容器的网络信息

[root@node1 ~]# docker run -it busybox /bin/sh
/ # ifconfig

Docker的4种网络通信模式,Docker,docker,容器 (2)开启一个新的命令行仓库查看容器A的ID。A的容器ID为eaf7c2748a2f

Docker的4种网络通信模式,Docker,docker,容器

 (3)开启一个新的命令行窗口,并使用container模式创建一个新的容器B

[root@node1 ~]# docker run -it --network=container:eaf7c2748a2f busybox /bin/sh

 其中,参数--network用于指定新容器使用哪一个容器的网络信息,这里指定的是容器A

(4)查看容器B的网络信息

Docker的4种网络通信模式,Docker,docker,容器

(5)对比两张图会发现容器A和容器B使用了相同的网络命名空间这是因为在 创建容器B时使用了container模式,使得容器B不再创建自己的网络命名空间,而直接使用容器A的网络命名空间

4. none模式

none模式下的容器具有独立的网络命名空间,但不包含任何网络配置,只能通过Local Loopback网卡与容器进行通信,即只能使用localhost或者127.0.0.1访问容器

在none模式下需要手动进行网络配置,例如使用pipwork工具指定容器的IP地址等

下面使用none模式来创建一个容器

[root@node1 ~]# docker run -it --network=none busybox /bin/sh

 由于none模式不包含任何网络配置,所有在其网络配置信息中就包含一个127.0.0.1的IP地址

Docker的4种网络通信模式,Docker,docker,容器文章来源地址https://www.toymoban.com/news/detail-753086.html

到了这里,关于Docker的4种网络通信模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 万字长文深入理解Docker镜像分层原理、容器数据卷、网络通信架构(Docker系列第2章,共3章)

    在执行docker pull时,会发现多个Pull complete 字样,就能体现分层,如果是一个文件,只会有一个Pull complete 。 概念:文件系统是计算机系统中用于组织和管理数据存储的一种方式。它定义了数据如何存储、命名、访问和修改的方式。 举例:如Windows自带的NTFS、FAT32、EXFAT,和L

    2024年04月14日
    浏览(39)
  • Docker网络(网络通信),资源控制(CPU优化,内存优化,磁盘优化),数据管理(数据卷,端口映射,容器互联)

    目录 docker网络 网络实现原理 网络实现实例 网络模式 查看Docker中的网络列表: 指定容器网络模式 模式详解 Host模式(主机模式): Container模式(容器模式): None模式(无网络模式): Bridge模式(桥接模式): 自定义网络: cpu优化概述 1. 资源限制: 2. CPU 实时调度策略:

    2024年01月16日
    浏览(84)
  • 【Docker】三、docker网络通信机制

    1、如果已经进入了容器则查看hosts文件即可:cat /etc/hosts、 2、如果没有进入容器则使用:docker inspect 查看其中的NetworkSettings下面的IPAddress字段即为容器IP; 宿主机ping容器 容器ping宿主机 - 容器访问外网 - 宿主机访问外网 外网访问容器, 外网访问容器,则需要通过端口映射,

    2024年02月09日
    浏览(80)
  • Docker跨主机网络通信

    常见的跨主机通信方案主要有以下几种: 形式 描述 Host模式 容器直接使用宿主机的网络,这样天生就可以支持跨主机通信。这样方式虽然可以解决跨主机通信的问题,但应用场景很有限,容易出现端口冲突,也无法做到隔离网络环境,一个容器崩溃很可能引起整个宿主机的

    2024年02月08日
    浏览(43)
  • Docker数据管理和网络通信

    Docker 的数据管理 管理 Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)。 1.数据卷 数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像

    2024年02月08日
    浏览(55)
  • 【云原生】Docker网络Overlay搭建Consul实现跨主机通信

    目录 1.overlay网络是什么? 实现overlay环境 1.overlay网络是什么?         在Docker中,Overlay网络是一种容器网络驱动程序,它允许在多个Docker主机上创建一个虚拟网络,使得容器可以通过这个网络相互通信。         Overlay网络使用VXLAN(Virtual Extensible LAN)技术来实现多主

    2024年02月14日
    浏览(40)
  • 专项技能训练五《云计算网络技术与应用》实训5-6:Docker之间网络互联通信配置

    实验前准备:在5-5环境下继续做。 1. 使用VMware安装CentOS 7虚拟机,将其命名为“Docker”。 2. 安装完虚拟机后,进入虚拟机,修改网络配置(onboot改为yes)并重启网络服务,查看相应IP地址,并使用远程连接软件进行连接。 3. 配置默认镜像yum源。 配置教程详见:[https://blog.cs

    2024年04月25日
    浏览(44)
  • docker macvlan虚拟化网络与宿主机通信问题解决——筑梦之路

    默认情况下各个macvlan之间可以通讯,但是不能与宿主机进行通讯!! 主要原因:为了安全而禁止互通 如宿主机ping容器的ip,尽管他们属于同一网段,但也是ping不通的,反过来也是。 这里用两个实例来说明如何解决这个问题。 实例一  实例二 参考资料: 解决Docker macvlan网络

    2024年02月07日
    浏览(52)
  • K8s进阶之网络:pod内不同容器、同节点不同pod通信、CNI插件、不同节点pod通信、Flannel容器网络、Serivce连接外部网络、服务发现、Nginx反向代理与域名、Ingress代理

    Pod是Kubernetes中最小的可部署单元,它是一个或多个紧密关联的容器的组合,这些容器共享同一个网络命名空间和存储卷,因此Pod中的 所有容器都共享相同的网络命名空间和IP地址——PodIP ,所以在同一个Pod内的容器间通信可以 通过localhost直接通信 。 k8s创建Pod时永远都是首先

    2024年02月05日
    浏览(56)
  • 【Kubernetes】k8s中容器之间、pod之间如何进行网络通信?

    首先来回顾一下Pod: Pod 是用于构建应用程序的最小可部署对象。单个 Pod 代表集群中正在运行的工作负载,并 封装一个或多个 Docker 容器、任何所需的存储以及唯一的 IP 地址 。 集群中每一个 Pod 都会获得自己的、 独一无二的 IP 地址。一个Pod里的一组容器共享相同的IP地址。

    2024年04月28日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包