【Docker】网络模式和宿主机访问
序言
闲来无事,记录学习历程,交个朋友。欢迎讨论碰撞,产生好的解决方案!!!👏👏👏
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是一个网段


访问方式
虚拟机&虚拟机的宿主机
虚拟机和虚拟机所在的宿主机都无法通过 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 模式
不讨论
更多推荐

所有评论(0)