Docker network driver分类及介绍 Bridge、host、overlay、macvlan(1)
https://docs.docker.com/network/1 分类Docker中的网络驱动(network driver)是可插拔的,docker中默认已经存在了几种网络驱动以提供核心的网络功能,主要有以下几类:bridge: docker 默认的network driver。如果不显示指定driver类型,docker默认会使用bridge模式的network。通常,当应用程序运行在独立的
https://docs.docker.com/network/
1 分类
Docker中的网络驱动(network driver)是可插拔的,docker中默认已经存在了几种网络驱动以提供核心的网络功能,主要有以下几类:
bridge
: docker 默认的network driver。如果不显示指定driver类型,docker默认会使用bridge模式的network。通常,当应用程序运行在独立的容器中,并且要相互通信,可以使用bridge模式。Bridge模式下容器与docker host的网络是相互隔离的。host
: Host模式下,独立的容器与docker host的网络隔离被移除, 容器直接使用docker host的network.overlay
: Overlay network能够连通不同的docker daemon,能够使swarm service之间能够相互通信. Overlay network也能够使 swarm service与独立的容器连通, 能够使位于不同Docker daemon上的独立的容器连通。Overlay模式省去了容器之间操作系统层级的路由工作。macvlan
: Macvlan network能够给容器分配一个MAC地址,使的此容器就像一个此网络上的物理设备。Docker Daemon可以通过MAC地址给容器路由消息。对于一些遗留的应用需要直接连接到物理网络而不是通过docker host的网络栈转发时,macvlan
驱动是最好的选择.none
: 禁止网络功能For this container, disable all networking. 通常用在使用自定义网络驱动的情形。none
模式对 swarm services不适用。- Network plugins: 可以使用第三方的network 插件.
2 Bridge network
https://docs.docker.com/network/bridge/
Bridge network是一个链路层设备,在不用的网络单元之间转发消息。一个bridge可以是硬件设备也可以是运行在host OS内核的软件设备。
在Docker中,bridge network是一个软件bridge,能够允许连接到同一个bridge network的容器之间进行通信,同时能够隔离没有连接到此bridge network的容器。Docker的bridge驱动会自动在host machine安装路由规则,所以不同bridge network 上的容器之间不能直接相互通信。
Bridge network应用在同一个docker host上的容器。在不同docker host上的容器之间通信时,要么在操作系统层加路由,要么使用overlay network。
启动一个docker时,一个默认的bridge network会被自动创建,新启动的容器会连接到它,除非特别指定网络。也可以创建一个自定义的bridge network。
2.1 自定义bridge与默认bridge的区别
用户自定义的bridge 要优于默认的bridge,它们的区别如下:
1)自定义的bridge提供容器之间的自动DNS解析。
默认bridge上的容器只能通过IP地址访问彼此,除非使用过时的—link选项。自定义的bridge能够通过name或者alias访问彼此。
2)自定义的bridge提供更好的隔离性。
所有没有指定--network的容器都会连接到默认bridge,这可能会产生风险,因为不相关的容器也能够访问彼此。
自定义的bridge只有明确指定此network的容器才能够彼此通信。
3)容器能够随时加入和退出自定义的network
在一个容器的生命周期中,可以随时加入和退出一个自定义的network。 但是,如果想要从一个默认bridge上移除一个容器,就需要先停止这个容器,然后使用不同的network选项重新创建一个容器。
4)每一个自定义的network使用独立的配置选项
如果一个容器使用默认bridge,可以配置它,但是所有的容器使用相同的配置,例如MTU和iptables rules. 同时,配置默认的bridge是在docker本身之外并且需要重启docker。自定义的bridge通过docker network create 创建和配置。如果不同组内的应用有不同的网络需求,可以单独配置自定义的网络。
5)默认bridge上连接的容器共享环境变量
最开始,容器之间共享环境变量的唯一方式是使用--link. 但是这种变量共享的方法不适用于自定义的bridge。 现在,有更好的方法来实现环境变量共享。
- 多个容器可以使用docker volume挂载同一个文件或者目录来共享信息。
- 个容器可以使用docker-compose一起启动并且使用compose file来定义共享的变量。
- 可以使使用swarm service 代替独立的容器以使用共享秘钥和配置。
2.2 常用命令
1) 创建一个自定义bridge
$docker network create my-net
可以指定subnet,IP range,gateway以及其他选项。可以通过docker network create –help查看命令详情。
2) 删除一个自定义bridge
$docker network rm my-net
如果有容器正连接到此网络,需要先断开连接(docker network disconnect)。
3)连接/断开一个自定义bridge
创建一个容器时可以使用--network来指定一个自定义网络。
例如:创建Nginx容器到my-net网络,同时发布容器的80端口到docker host的8080端口,可以使用如下命令:
$ docker create --name my-nginx \
--network my-net \
--publish 8080:80 \
nginx:latest
连接一个正在运行的容器到一个已经存在的自定义bridge可以使用docker network connect命令。例如: 连接已经运行的容器my-nginx到已经存在的网络my-net.
$ docker network connect my-net my-nginx
断开一个正在运行的容器,使用docker network connect, 例如:
$ docker network disconnect my-net my-nginx
更多推荐
所有评论(0)