文章目录
docker 网络模式介绍
# Tips:如下模式在集群模式下无法使用
bridge: --net=bridge # 桥模式(默认模式,创建容器时可省略,容器与宿主机共享Network namespace)
host: --net=host # 宿主机模式(直接绑定在宿主机ip,无端口映射功能,容器与宿主机共享Network namespace)
none: --net=none # 无网络(容器有独立的Network namespace,但未进行任何配置,如需要可自行定义配置网络)
container: --net=container:NAME_or_ID # 容器模式(当前容器与另一指定容器共享Network namespace)
overlay:# 用于创建跨主机通信网络
ipvlan: # 用于在一台主机接口虚拟出多个虚拟网络接口,共享mac地址(有L2、L3两种模式,同一个父接口网卡只能属于一种模式)(要求 kernel>=4.2)
macvlan:# 用于在主机物理网卡虚拟多个网卡,mac地址不同
# Tips、bridge 与 host 模式的区别
1、bridge 模式下,容器有独立的ip,与主机或其他容器的隔离性好(小心映射到0.0.0.0 上的端口,在不写acl时firewalld未进行拦截)
2、host 模式,可能会出现端口冲突,不支持端口映射(因为容器内的port直接绑定到物理机上)
# Tips、默认桥接网络docker0 与 自定义桥接网络的差别
默认桥接网络docker0:
1、网络中所有主机只能使用ip访问,(--link创建的容器可以直接使用 容器名 进行访问----新版已不推荐)
自定义网络桥接网络:
1、网络中所有主机除ip访问外,还可以直接用容器名(container-name)作为hostname相互访问。
# macvlan 能为容器提供独立于主机的 mac地址与ip地址,确定是需要将主网卡设置为混杂模式(云主机肯定是不行的)
docker network 日常使用命令
# 查看容器网络
[root@OSS ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
7e8786d962ce bridge bridge local
ae0ee70c6e6c host host local
0bbaf35776c1 none null local
425f4266976b redis_byy-edge bridge local
89e488e4aa58 zookeeper_and_kafka_byy-edge bridge local
# 查看某容器的网络类型
docker inspect --format='{{.HostConfig.NetworkMode}}' <container_name_or_id>
# 查看容器网络详情
docker network inspect NETWORK_NAME
# 创建容器网络
docker network create [OPTIONS] NETWORK_NAME
docker network create -d bridge my-bridge # 创建一个桥接网络
docker network create -d bridge --subnet 192.168.1.0/24 my-bridge # 创建指定网络的桥接网络
# 创建一个名为macvlan, 类型为macvlan, 主网卡为 eth0, 网段为 192.168.80.0/24 , 网关为 192.168.80.1的 macvlan网络
docker network create -d macvlan --subnet=192.168.80.0/24 --gateway=192.168.80.1 -o parent=eth0 macvlan
# 附、linux如何创建macvlan类型的网络
# ip link add net1 link eth0 type macvlan mode bridge # 创建一个以eth0为主网卡,名称为net1的macvlan类型接口
# 删除容器网络
docker network rm NETWORK_NAME
# 清理未使用的网络(-f 强制删除)
docker network prune
# 将容器连接到网络
docker network connect NETWORK_NAME CONTAINER
# 将容器从某网络断开
docker network disconnect NETWORK_NAME CONTAINER
docker compose 中如何指定网络模式
## 其他模式参考写法
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
示例一、host模式
[root@OSS ~]# cat docker-compose.yaml
services:
nginx:
image: nginx:lastest
container_name: nginx
restart: unless-stopped
environment:
TZ: Asia/Shanghai
network_mode: host
示例二、多容器使用 同一个mynet自定义网络
[root@OSS ~]# cat docker-compose.yaml
services:
web:
image: nginx
networks: mynet
db:
image: mysql
networks: mynet
networks:
mynet:
driver: bridge
示例三、使用自定义网段网络
services:
web:
image: nginx
networks:
- my-network
networks:
my-network:
driver: bridge
ipam:
config:
- subnet: 192.168.1.0/24
示例四、ipvlan-l2模式
## IPvlan L2 模式(常用)
1、容器像二层直连一样存在
2、同一网段内的物理设备能直接访问容器
## 场景介绍
宿主机网段:192.168.31.0/24
宿主机 IP:192.168.31.122
网关:192.168.31.1
## 步骤一、创建L2的ipvlan网络
docker network create -d ipvlan \
--subnet=192.168.31.0/24 \
--gateway=192.168.31.1 \
-o ipvlan_mode=l2 \
-o parent=eth0 ipvlan-l2
## 步骤二、启动容器测试,分配192.168.31.69 给容器
docker run -it --rm --network ipvlan-l2 --ip 192.168.31.69 alpine sh
示例五、ipvlan-l3模式(没做成功)
## IPvlan L3 模式
1、只能三层路由,不共享二层广播
2、容器 IP 必须与主机不同网段(因为IP栈与宿主机是隔离的,所以主机访问不了容器,一般也不访问)
3、可跨主机路由
## 场景介绍(L3 模式适合路由分段)
宿主机网段:192.168.31.0/24, 网关:192.168.31.1
容器独立网段:192.168.2.0/24,
## 步骤一、创建L3的ipvlan网络
docker network create -d ipvlan \
--subnet=192.168.2.0/24 \
--gateway=192.168.2.1 \
-o ipvlan_mode=l3 \
-o parent=eth0 ipvlan-l3
## 步骤二、启动容器测试,分配192.168.2.10 给容器
docker run -it --rm --network ipvlan-l3 --ip 192.168.2.10 alpine sh
示例六、macvlan模式
## macvlan 模式
1、macvlan_mode=bridge:宿主机和容器在同一个二层广播域
2、subnet 必须和宿主机所在网段一致
3、容器 IP 必须在网段内,不能冲突已有设备
## 场景介绍
宿主机网段:192.168.31.0/24, 网关:192.168.31.1
分配容器IP:192.168.31.69
## 步骤一、创建macvlan网络
docker network create -d macvlan \
--subnet=192.168.31.0/24 \
--gateway=192.168.31.1 \
-o macvlan_mode=bridge -o parent=eth0 macvlan
## 步骤二、启动容器测试,分配192.168.31.69 给容器
docker run -it --rm --network macvlan --ip 192.168.31.69 alpine sh
如果文章对你有帮助,欢迎点击上方按钮打赏作者
谢谢你请我吃辣条
暂无评论