Docker 网络 ¶
DOCKER LINK 和 DOCKER NETWORK ¶
#docker #网络
docker link 参数
- --link name:alias
- 其中 name 是指要链接到的名称,alias 要连接的容器在内部的主机名
- 效果相当于在要启用LINK参数的容器内部host增加一个名为alias的条目,指向被连接的容器IP
- DOCKER LINK 一般在系统比较简单的情况下使用,如果系统比较复杂,可能就要用 DOCKER NETWORK 了
docker network
须先创建一个 docker network 网络
docker network create $NAME --driver bridge --subnet 172.31.0.0/24
# --driver 网络类型,可以时 bridge/host 等
# -- 其中 bridge 是一个普通网络,与主机不互通,需要将端口暴露出来主机才能访问
# -- host 直接使用主机网络,容器内端口是直接暴露的
# --subnet 指定子网段,防止和外部网络冲突
容器创建时要指定 HOSTNAME 和 NETWORK
docker run --name $dn \
--hostname host1 --network network1 \
$image \
$command
那么应用间就可以通过容器的 HOSTNAME 来相互访问。
MAC VLAN ¶
三个条件
- 如果在虚拟机中,需要主机给它开启 MAC Spofing 或者 SR-IOV/Network Enhancing 功能,在不同的平台上叫法不一样,如果 HyperV 平台上,需要针对虚拟机的网卡-高级选项里面开启 MAC欺骗
- 虚拟机对应网卡需要开启混杂模式:ip link set eth0 promisc on
- 需要开启ip_forward: sysctl -w net.ipv4.ip_forward=1; sysctl -p
一个限制
- 同LXC的MACVLAN一样,容器无法同宿主机通信,这是LINUX内核安全策略决定的,如果需要与宿主机通信,需要创建一个网桥,将物理网卡接到网桥上,并将MACVLAN网络的parent也设置成网桥。
创建 mac-vlan 网络
# macvlan-1 是创建的网络名
docker network create -d macvlan \
--subnet=192.168.0.0/24 \
--gateway=192.168.0.1 \
--ip-range=192.168.0.32/27 \
-o parent=eth0 \
macvlan-1
编写 docker-compose 文件
services:
stirling-pdf:
image: stirlingtools/stirling-pdf:latest
container_name: stirling-pdf
ports:
- '8080:8080'
volumes:
- ./configs:/configs # Settings & database
restart: unless-stopped
networks:
pdf_network:
ipv4_address: 192.168.0.32
networks:
pdf_network:
external: true
name: macvlan-1
Bridged ¶
- bridged 桥接网络,默认类型,默认会桥接到一个名为docker0的私有网络中 (略)
IPVLAN ¶
容器和宿主机共享mac地址,但ip地址不一样,主要都是用于解决宿主机端口会冲突的问题
docker network create -d ipvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 \
ipvlan_net
其他 ¶
- host 模式,这个并不能解决多个容器的端口冲突问题,容器端口会直接绑定到宿主机网卡上,这种性能最高
- 还有种邪道玩法,就是在宿主机网卡配置多个IP地址,容器绑定外部端口时,如果冲突就换一个IP绑定,就用 -p IP:PORT:PORT 这样的语法
综合来看,如果要解决同一宿主机多个容器的端口冲突问题,貌似IPVLAN L2限制更少一点。
ipvlan/macvlan模式下,容器默认都不能和宿主机通信。
评论
请登录后发表评论。
暂无评论。成为第一个评论者!