一、引言
Docker网络是在Docker容器中实现网络通信和连接的重要组成部分。它提供了多种网络模式和配置选项,使得容器可以与其他容器、主机以及外部网络进行通信,在实际应用中,通过选择合适的网络类型和配置参数,可以构建高效、安全、可扩展的Docker网络解决方案。
二、Docker网络模式(Network Modes)
1、桥接模式(Bridge Network)
Docker的bridge网络模式是Docker的默认网络模式。当Docker进程启动时,它会在主机上创建一个名为docker0的虚拟网桥。此主机上启动的Docker容器会连接到这个虚拟网桥上。这个虚拟网桥的工作方式类似于物理交换机,使得主机上的所有容器都通过交换机连接在一个二层网络中。
在这种模式下,Docker会为每个新创建的容器分配独立的Network Namespace和IP段等,同时文件系统、进程等也是隔离的。容器内部会有一个虚拟网卡,名为eth0,容器之间可以通过这个虚拟网卡和内部的IP地址进行通信。另外,从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。
然而,处于桥接模式的容器和宿主机网络不在同一个网段,容器一般使用172.16.0.xx/24这种网段。因此,容器不能直接和宿主机以外的网络进行通信,而必须要经过NAT转换。同时,容器需要在宿主机上竞争端口,完成端口映射的配置后,从外部到容器内的网络访问tcp流量将会通过DNAT从宿主机端口转发到容器内对应的端口上。此外,容器对于宿主机以外是不可见的,从容器发出的网络请求会通过SNAT从已对接的虚拟网桥(如宿主机的docker0)上统一发出。
如服务器未安装docker,可以参考在CentOS系统中轻松安装和配置Docker指南这篇文章
2、Host 网络
Docker的host网络模式是另一种网络模式,与bridge模式不同,它将容器直接融入到主机的网络栈中,使得容器直接使用主机的网络接口和IP地址。在这种模式下,容器不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。因此,容器内部的服务可以使用宿主机的网络地址和端口,无需进行NAT转换,网络性能较好。
使用host网络模式的一个典型场景是需要容器与宿主机共享网络资源或者容器需要快速访问宿主机网络服务的场景。例如,如果需要在容器内部运行一些网络相关的应用,如网络监控、日志收集等,这些应用需要直接访问宿主机的网络接口和IP地址,此时就可以使用host网络模式。
需要注意的是,由于容器与宿主机共用一个网络栈,因此容器的网络隔离性较差,可能存在安全隐患。如果需要在不同主机上运行容器并实现跨主机通信,则不能使用host网络模式。
总的来说,Docker的host网络模式提供了一种将容器与宿主机网络栈直接融合的方式,使得容器可以直接使用宿主机的网络接口和IP地址,适用于一些需要快速访问宿主机网络服务的场景。但是需要注意的是,该模式下容器的网络隔离性较差,需要谨慎使用
3、None 网络
- Docker的none网络模式是Docker提供的一种特殊网络模式,它将容器与宿主机隔离开来,不提供任何网络能力。在这种模式下,容器内部没有网卡、IP地址、路由等信息,只有一个回环网络(loopback)接口。这意味着容器不能访问外部网络,也不能被外部网络访问。
- none网络模式通常用于一些特殊场景,比如需要在容器内部运行一些独立的、与网络无关的应用程序,或者需要进行一些网络调试。由于容器与外部网络完全隔离,这种模式可以增加容器的安全性。
4、container 模式
Docker的container网络模式是指新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。这意味着新创建的容器不会创建自己的网卡、配置自己的IP地址,而是和一个已存在的容器共享IP地址、端口范围等网络资源。同时,这两个容器的进程可以通过lo网卡设备通信。然而,这两个容器在其他方面,如文件系统、进程列表等,仍然是隔离的。
使用container网络模式的一个典型场景是,当需要多个容器之间共享网络配置时,可以使用该模式。例如,可以使用该模式创建一个nginx容器,并指定其网络模型为container模式,和另一个已经存在的容器共享网络命名空间。这样,nginx容器就可以直接使用另一个容器的IP地址和端口,无需进行额外的网络配置。
三、Docker网络驱动程序
Docker使用Linux内核的一些特性来实现其网络功能,而这些功能是通过不同的网络驱动程序来实现的。Docker支持多种网络驱动程序,每种驱动程序都有其特定的用途和场景。
- bridge(桥接):这是Docker的默认网络驱动程序。它会在宿主机上创建一个虚拟网桥(通常是docker0),并将容器连接到这个网桥上。容器之间以及容器与宿主机之间可以通过这个网桥进行通信。bridge模式适用于单个宿主机上的容器互联场景。
- host:host网络驱动程序将容器直接融入主机的网络栈中,容器将共享主机的网络接口和IP地址。这意味着容器内部的服务可以直接使用主机的网络地址和端口,无需进行NAT转换。host模式适用于需要容器与宿主机共享网络资源的场景,但需要注意安全性和隔离性问题。
- overlay:overlay网络驱动程序用于创建跨多个Docker守护进程的分布式网络。它通过内置的DNS服务实现容器之间的跨主机通信。overlay模式适用于需要构建分布式应用程序的场景,可以让容器在不同宿主机之间进行通信。
- macvlan:macvlan网络驱动程序允许容器使用宿主机的物理网络接口,并为其分配一个MAC地址。这样,容器可以像虚拟机一样直接连接到物理网络上,并与其他设备通信。macvlan模式适用于需要容器直接访问物理网络的场景。
- ipvlan:ipvlan是另一种类似于macvlan的网络驱动程序,但它基于IP地址而不是MAC地址来分配网络。ipvlan模式提供了更好的扩展性和灵活性,适用于不同的网络场景。
- none:none网络驱动程序不提供任何网络功能,容器将处于完全隔离的状态。它通常用于一些特殊场景,如运行与网络无关的应用程序或进行网络调试。
四、Docker网络配置
创建网络:docker network create
docker network create 命令用于在 Docker 中创建一个新的网络。这个命令允许指定网络的名称、驱动程序以及其他选项,以满足不同的网络需求。
语法:
docker network create [OPTIONS] NETWORK
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
资料预览
给大家整理的视频资料:
给大家整理的电子书资料:
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算