docker的四种网络模式
docker的四种网络模式为:
1、host模式,使用 “-net=host” 指定;
2、container模式,使用"-net=container:NAME_or_ID"指定
3、none模式,用"-net=none"指定;
4、bridge模式。
1、host模式
- 如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。
- 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统,进程列表等还是和宿主机隔离的。
- 使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好。
描述:
- 容器与宿主机共享网络堆栈。容器的网络接口与宿主机的网络接口绑定在一起,没有额外的虚拟网络层。
- 容器使用宿主机的 IP 地址和网络端口。
使用场景:
1、性能要求高的应用
当需要最大化网络性能时,主机模式可以避免额外的网络抽象层。
2、与宿主机网络直接交互
当容器需要直接与宿主机的网络接口交互,如需要访问宿主机上的服务或资源时。
3、网络延迟敏感应用
对于低延迟应用,主机模式可以减少网络层的开销。
示例:
docker run --network host -d nginx
2、container模式
- 这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是宿主机共享。
- 新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。
- 两个容器的进程可以通过lo网卡设备通信。
描述: - 容器共享另一个容器的网络堆栈,即使容器有自己的网络命名空间,但它们共享同一个 IP 地址和端口空间。
- 适用于容器之间需要直接通信的情况。
使用场景:
1、多进程应用
当你需要在多个容器中运行一个服务的不同进程,但它们需要共享网络设置(如同一个 IP 地址和端口)时。
2、服务集成
例如,将 Web服务器和数据库放在不同的容器中,它们可以通过容器网络共享同一个 IP 地址进行通信。
示例:
docker run -d --name web nginx
docker run -d --network container:web myapp
3、none模式
- 使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。
- 这种网络模式下容器只有lo回环网络,没有其他网卡。none模式可以在容器创建时通过–network=none来指定。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。
描述:
- 允许用户创建自定义网络,提供更多的灵活性和控制,如子网、网关等。
- 自定义网络通常包括桥接网络(bridge)、覆盖网络(overlay)等。
- 提供 DNS 服务,容器可以使用服务名称进行相互通信。
使用场景:
1、跨主机网络(overlay networks)
适用于多主机集群环境,如使用 Docker Swarm 或 Kubernetes
部署的应用。
2、网络隔离
提供不同的网络隔离,容器可以只与同一自定义网络中的其他容器通信。
3、复杂应用场景
需要配置网络拓扑和子网的应用,如微服务架构中的服务发现和负载均衡。
示例:
# 创建自定义网络
docker network create my_network
# 在自定义网络中启动容器
docker run --network my_network -d nginx
4、bridge模式
- 当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。
- 虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
描述:
- 默认的网络模式。每个 Docker 容器连接到一个名为 bridge 的虚拟网络中。
- Docker 为每个容器分配一个内部 IP 地址,并通过 NAT(网络地址转换)使其可以与外部网络通信。
- 容器之间可以通过内部 IP 地址进行通信。
使用场景:
1、本地开发和测试
适用于开发和测试环境中,容器之间需要通过 IP 地址通信,但不需要直接暴露在主机网络上。
2、小规模应用
对于小型应用或服务,桥接模式可以提供简单的网络配置和隔离。
示例:
docker run --network bridge -d nginx
总结
桥接模式:适用于单主机上的容器网络,默认网络模式。
主机模式:适用于需要高性能和直接与宿主机网络交互的场景。
容器模式:适用于需要共享网络栈的容器。
自定义网络模式:适用于复杂的网络需求,如多主机环境和网络隔离。