1.单节点通信网络模式:
1.bridge网络
- 在网络方面,桥接网络是在网段之间转发流量的链路层设备。
- 桥可以是在主机内核中运行的硬件设备或软件设备。不同网桥网络上的容器无法直接相互通信。桥接网络适用于在同一Docker守护程序主机上运行的容器。在多docker daemon中网络通信选用 overlay network.
docker bridge网络特性:
- 用户定义的网桥可在容器之间提供自动DNS解析。由docker
daemon维护的dns服务器,每个容器中域名解析namespace为127.0.0.11 - 默认桥接网络上的容器只能通过IP地址互相访问
- 用户定义的桥可提供更好的隔离。
- 容器可以随时随地从用户定义的网络连接和分离。
docker network create --driver bridge my_bridge
docker run -d --name nginx --network my_bridge nginx
docker run -d --name centos --network my_bridge centos sleep 50000
docker-compose:
version: "3"
services:
nginx:
container_name: nginx
image: nginx
networks:
my-bridge:
centos:
container_name: centos
image: centos
networks:
my-bridge:
entrypoint: ["sleep","5000"]
networks:
my-bridge:
driver: bridge
- 将某容器移除某网络
docker network connect/disconnect my_bridge containId
2.host网络
- 与宿主机共享同一个网络空间,host模式网络对于优化性能以及在容器需要处理大量端口的情况下很有用,因为它不需要网络地址转换(NAT)
docker run -d --network host --name nginx nginx
docker-compose:
version: "3"
services:
nginx:
container_name: nginx
network_mode: host
image: nginx
3.none网络
- 如果要完全禁用容器上的网络堆栈,可以–network none在启动容器时使用该标志。
docker run -d --network none --name busybox busybox sleep 50000
docker-compose:
version: "3"
services:
bosybox:
container_name: busybox
network_mode: none
image: busybox
entrypoint: ["sleep","50000"]
4.container网络
- 新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。
docker run -d --name nginx nginx
docker run -d --network container:nginx --name centos centos sleep 5000
version: "3"
services:
nginx:
container_name: nginx
image: nginx
centos:
container_name: centos
network_mode: container:nginx
image: centos
depends_on:
- nginx
entrypoint: ["sleep","50000"]
nat 模式端口映射 Published ports
docker run -d -p 80:80/tcp --name nginx nginx
docker-compose:
version: "3"
services:
nginx:
container_name: nginx
image: nginx
ports:
- 80:80/tcp
docker 网络模型图:
2.多节点主机通信网络模式:
overlay网络
- 可以跨主机通信,支持容器明直接访问通信
overlay网络创建的条件:
docker daemon开启swarm模式,集群模式下将会暴露的端口,以及作用 用于群集管理通信的TCP端口2377
TCP和UDP端口7946,用于节点之间的通信 UDP端口4789,用于覆盖网络流量
开启集群模式的命令:
docker swarm init
或
docker swarm join
overlay网络流量加密
--opt encrypted 参数
docker network create --opt encrypted --driver overlay --attachable my-attachable-multi-host-network
macvlan网络
可以跨主机通信,不支持容器名直接访问通信,只能ip通信