序言

闲来无事,记录学习历程,交个朋友。欢迎讨论碰撞,产生好的解决方案!!!👏👏👏

Docker网络模式

Bridge 模式

概述

  • Bridge(桥接)模式是 Docker 默认的网络模式
  • 容器在这种模式下会连接到 Docker 内部的一个虚拟网桥(通常叫 docker0)
  • 每个容器都会分配一个私有 IP(比如 172.17.0.x)
  • 容器之间可以通过 IP 或容器名互相通信
  • 外部访问容器需要通过 端口映射 (-p) 或配置额外网络
特性说明
私有网络容器在 docker0 上有独立 IP,不直接暴露给宿主机外网
容器互通同一 Bridge 网络内的容器可以相互访问
外部访问需要端口映射,例如 -p 8080:80
默认网络Docker 不指定 --network 时自动使用 bridge

在这里插入图片描述

部署测试

Ubuntu 虚拟机部署Docker后,会多出 dokcer0 虚拟网卡
在这里插入图片描述
部署 Nginx,部署两台

docker run -d --name nginx1 -p 8080:80 nginx:latest
docker run -d --name nginx2 -p 8081:80 nginx:latest

在这里插入图片描述
可以看出来多了两个veth,每个容器中有 eth0和它一一对应,
在这里插入图片描述

查看容器 IP

docker inspect nginx1
docker inspect nginx2

可以看出来部署的Nginx,用的网关就是docker0,和docker0是一个网段
Nginx1
Nginx2

访问方式

虚拟机&虚拟机的宿主机

虚拟机和虚拟机所在的宿主机都无法通过 172.17.0.2/172.17.0.3 来访问,必须通过虚拟机IP + 转发的端口 访问

curl 127.0.0.1:8080
http://192.168.18.104:8080/

在这里插入图片描述

容器内

进入Nginx1容器内,可以看到可以访问Nginx2,这是因为用的是一个Bridge 的网络

docker exec -it nginx1 /bin/bash

在这里插入图片描述

Host 模式

概览

  • Host 模式是 Docker 提供的一种网络模式
  • 容器 不再使用 Docker 的虚拟网桥
  • 容器直接共享宿主机的网络栈
  • 容器使用宿主机的 IP 地址,端口映射(-p)不再需要
特性说明
IP 地址与宿主机相同,没有独立容器 IP
端口映射不需要 -p,直接使用宿主机端口
容器间隔离容器与宿主机共享网络,安全性低于 Bridge
性能TCP/UDP 网络性能最好,没有 NAT 转发开销

在这里插入图片描述

部署测试

部署一台Host模式Nginx

docker run -d --name nginx-host --network host nginx:latest

可以看出部署了Nginx-host 不会生成veth
在这里插入图片描述
查看容器 IP

docker inspect nginx-host

可以看出不会对容器单独生成 IP
在这里插入图片描述

访问方式

虚拟机&虚拟机的宿主机访问

curl 127.0.0.1:80
http://192.168.18.104:80/

只能通过 虚拟机 IP 进行访问。
在这里插入图片描述

容器内

因为是基于虚拟机的IP进行访问,所以规则按照虚拟机IP就能访问。

Macvlan 模式

可以实现容器有独立的虚拟IP,虚拟机和虚拟机的宿主机,可以直接通过 IP 访问,和Bridge模式访问不同点是前者不需要用IP映射。

概览

  • Macvlan 是 Docker 的一种网络模式
  • 容器会获得 与宿主机同一局域网的独立 IP 地址
  • 容器像网络上的独立物理主机一样存在
  • 与 Host 模式不同,Macvlan 不共享宿主机 IP,容器有独立 IP
特性说明
独立 IP容器像局域网独立主机一样存在
外部访问局域网内其他设备可以直接访问容器 IP
端口映射不需要 -p,容器自己就有 IP
与宿主机隔离容器默认不能直接访问宿主机 IP(需要配置路由)
性能网络性能高,没有 NAT 转发开销

创建 Macvlan 网络

#创建 Macvlan 网络
docker network create -d macvlan
–subnet=192.168.18.0/24
–gateway=192.168.18.1
-o parent=ens33 macvlan_net

我这里创建的是和虚拟机在同一个网段的网络。(需要用到同一个网关,可以用VMNet8,固定虚拟机的IP,比如 10.10.10.2,128~255 留给macVlan)

部署测试

创建Nginx-lan

docker run -d --name nginx-macvlan --network macvlan_net nginx

在这里插入图片描述
查看容器IP

docker inspect nginx-macvlan

容器 IP 192.168.18.2 和 虚拟机在一个网段。虚拟机也没有新增eth。

在这里插入图片描述在这里插入图片描述

访问方式

虚拟机&虚拟机的宿主机访问

curl 192.168.18.2
http://192.168.18.104:80/

虚拟机无法访问,宿主机本身无法直接访问 Macvlan 容器 IP(这是 Macvlan 的设计)。

在这里插入图片描述

Container 模式

概述

不讨论
不讨论

None 模式

不讨论

更多推荐