Docker笔记3-网络入门-桥接网络

2018-02-26  本文已影响111人  8813d76fee36

概述

使用桥接网络

在网络方面,桥接网络是一种链路层设备,它将网络段之间的流量转发。桥接网络可以是硬件设备也可以是运行在宿主机内核中的软件。

在Docker方面,桥接网络使用软件桥接,它允许处在同一个桥接网络中的container通讯,以此与没有连接到该桥接网络的其他container隔离。Docker桥接驱动自动在宿主机上安装规则,所以在不同桥接网络中的container不能直接互通。

桥接网络适用于运行在同一个Docker daemon主机的container。如果想要实现运行在不同Docker daemon上的container通信,需要维护系统级别的路由,或者可以使用覆盖网络(Overlay Network)。

当Docker启动时,一个默认的桥接网络(名称为bridge)被自动创建,并且新建的container会连接到该网络上,直到明确指定其他网络。


默认的桥接网络

你可以自定义桥接网络。桥接网络优于默认的桥接网络

若使用桥接网络,推荐使用自定义桥接网络

自定义桥接网络与默认桥接网络的区别

自定义桥接网络在容器化应用之间提供更好的隔离性和交互性。

连接到同一个自定义桥接网络的container会互相暴露所有的接口,但不会向外界暴露任何接口。这就使容器化的应用通讯起来更加方便,同时也不必担心不小心向外界暴露了端口。

设想一个应用包含前端web程序和后端数据库程序。外界需要访问前端系统(可能通过80端口访问),前端系统再根据IP和端口访问数据库,而数据的IP和端口不需要对外界公开,只需要暴露给前端系统即可。

使用自定义桥接网络,只需要前端系统开放端口,而数据库系统不需要开放任何端口,因为前端系统可以通过桥接网络访问到数据库。

如果同样的一套系统使用默认桥接网络,则需要使用-p--publish标签来开放前端系统和数据库系统的端口。这意味着Docker主机需要通过其他方式来锁定外界对数据库系统端口的访问。

自定义桥接网络在container之间提供DNS自动解析

使用默认桥接网络的容器只能通过IP地址来互相访问,除非使用--link,但它已经过时了。
在自定义桥接网络中,容器可以通过名称或别名互通。

容器可以即时地从自定义桥接网络连接或断开

在容器的生命周期中,你可以即时地连接或断开自定义桥接网络。如果要断开默认的桥接网络,你需要停止容器,然后指定一个网络重新创建它。

每个自定义桥接网络都是可配置的

如果使用默认桥接网络,虽然它是可以更改配置的,但所有容器都使用相同一份配置,类似于MTU和iptables规则。除此之外,配置默认桥接网络是在Docker外完成的,配置后需要重启Docker。

自定义桥接网络使用docker network create完成创建和配置。

连接在默认桥接网络的容器共享环境变量

原始情况下,两个容器之间共享环境变量的唯一方式是使用--link标签。
在自定义桥接网络下,这种变量共享的方式不可用。然而我们可以使用一些更好的方式:

总结

连接到同一个自定义网络下的容器互相暴露所有端口。如果某个端口需要被其他网络上的容器或非Docker主机访问,那该端口必须使用-p-publish发布。

管理用户自定义桥接网络

创建自定义桥接网络

使用docker network create -d bridge my-net创建一个自定义桥接网络。
可以指定子网、IP地址范围、网关等其他选项。

$ docker network -d "bridge" my-net

docker network create

移除自定义桥接网络

使用docker network rm my-net移除自定义网络。在删除之前,需要断开与其相连的容器。

$ docker network rm my-net

创建一个容器,使其连接到自定义桥接网络

docker container create --name my-nginx \
--network my-net \
--publish(-p) 8080:80 \
nginx:latest

$ docker network connect my-net my-nginx

使容器断开自定义网络

使一个正在运行的容器断开自定义桥接网络,使用docker network disconnect命令。
下面的命令使my-nginx容器从my-net网络断开。

$ docker network disconnect my-net my-nginx

使用IPv6

在容器或swarm服务内使用IPv6之前,需要开启Docker daemon的IPv6支持选项。

注意:IPv6网络仅能够在运行在Linux主机上的Docker daemon开启。
1、 编辑/etc/docker/daemon.json,将键为ipv6的值设置为true

{
  "ipv6": true
}

2、重新加载Docker配置文件

$ systemctl reload docker
3、创建网络时使用--ipv6标签,并使用--ip6标签为容器分配IP6地址。

Demo见文档Networking with standalone containers

参考文档
Use bridge networks
Enable IPv6 support
Networking with standalone containers

上一篇 下一篇

猜你喜欢

热点阅读