本文系统讲解Docker的四种网络模式,从原理到实践,彻底搞懂容器网络。
前言
Docker网络是容器化技术的核心难点之一。很多人用Docker只会-p 8080:80映射端口,对底层网络一知半解。
今天我们来彻底搞懂Docker的网络模型,包括:
- bridge(默认)
- host
- none
- macvlan
- overlay(跨主机)
一、Docker网络基础
1.1 查看网络
# 列出所有网络docker networkls# 默认输出NETWORK ID NAME DRIVER SCOPE xxxx bridge bridgelocalxxxxhosthostlocalxxxx none nulllocalDocker安装后默认创建三个网络:bridge、host、none。
1.2 查看网络详情
docker network inspect bridge输出包含:
- 子网配置(Subnet)
- 网关(Gateway)
- 连接的容器
- 网络选项
二、Bridge模式(默认)
2.1 原理
┌─────────────────────────────────────────────────────────┐ │ 宿主机 │ │ │ │ ┌─────────────┐ ┌─────────────┐ │ │ │ Container1 │ │ Container2 │ │ │ │ 172.17.0.2 │ │ 172.17.0.3 │ │ │ └──────┬──────┘ └──────┬──────┘ │ │ │ │ │ │ └───────┬────────┘ │ │ │ │ │ ┌───────┴───────┐ │ │ │ docker0 │ (172.17.0.1) │ │ │ (Bridge) │ │ │ └───────┬───────┘ │ │ │ │ │ ┌───────┴───────┐ │ │ │ eth0 │ (宿主机网卡) │ │ └───────────────┘ │ └─────────────────────────────────────────────────────────┘特点:
- 每个容器有独立的Network Namespace
- 通过虚拟网桥docker0连接
- 容器之间可以互通(同一bridge)
- 访问外网通过NAT
2.2 实践
# 默认使用bridge网络docker run -d --name web1 nginx docker run -d --name web2 nginx# 查看IPdocker inspect web1|