在使用docker中有一些容器对网络的依赖比较严重,配置也相对复杂,此时给这种容器一个单独的IP地址会极大的简化配置复杂程度,macvlan就可以给容器单独分配一个IP地址。
怎么创建Linux和配置必要环境就不写了,本文只介绍关键重点部分。
一、macvlan模式:
Bridge 模式 (默认模式):
- 在这种模式下,macvlan 为每个容器创建一个虚拟网络接口,这些接口都连接到一个虚拟的 macvlan 桥接。
- 容器可以直接与外部网络通信,但不能与同一宿主机上的其他 macvlan 接口通信,除非有外部路由器支持。
- 这种模式适合于需要让容器直接暴露在外部网络上,但又不需要容器之间或容器与宿主机之间的直接通信的场景。
Private 模式:
- 在 Private 模式下,每个容器可以访问外部网络,但无法与同一宿主机上的任何其他容器进行通信,包括那些没有使用 macvlan 的容器。
- 这种模式提供了容器级别的网络隔离。
Vepa 模式 (Virtual Ethernet Port Aggregator):
- 在 Vepa 模式下,容器无法直接与同一宿主机上的其他容器通信。所有通信都需要通过外部交换机。
- 这种模式通常用于高度规范化的环境,比如数据中心。
Passthru 模式(直通模式):
- 这种模式允许单个容器完全控制物理网络接口。
- 这种模式适合于需要高度网络性能和最小化额外网络开销的场景,但牺牲了灵活性和容器之间的隔离。
- 不同的模式适用于不同的使用场景,因此选择哪种模式取决于你的特定需求和网络架构。在选择模式时,需要权衡网络隔离、性能和灵活性。
二、创建macvlan网络
要想让docker容器单独分配到IP地址,必须先创建macvlan网络,然后再让容器加入到创建好的网络中来,才可以正常访问。
当然也可以直接在yaml文件中写好macvlan网络的设置和容器一起启动,这样做不够灵活,因此不推荐此操作。
创建macvlan命令如下:
docker network create \ -d macvlan \ --subnet=10.10.1.0/24 \ --gateway=10.10.1.5 \ -o parent=ens33 \ macvlan_ens33
Tips:记得修改网卡名称为你机器实际的网卡名称,网段和网关需要设置正确。
三、部署docker
下面以PLEX为例子:
version: "3.8"
services:
plex:
image: lscr.io/linuxserver/plex:latest
container_name: plex
restart: always
networks:
macvlan_ens33:
ipv4_address: 10.10.1.34
dns:
- 10.10.1.5
environment:
- PUID=0
- PGID=0
- TZ=Asia/Shanghai
- VERSION=docker
- PLEX_CLAIM=claim-n_E7LCLEzKUgEgsAtZMh
volumes:
- /home/docker/plex/config:/config
- /home/media/:/media
networks:
macvlan_ens33:
external: true
Tips:记得修改必要参数!
在macvlan中定义好网络怎么走,它就会直接把数据包转发过去,不会受到宿主机的设置影响。
完成!