目录
1.自定义的桥接器可以在容器化应用程序之间提供更好的隔离和互操作性。
桥接网络 bridge
是在网段之间转发流量的链路层设备,可以是硬件设备或在主机内核中运行的软件设备。
对docker而言,桥接网络使用软件桥,桥接器允许连接到同一桥接网络的容器进行通信,同时提供与未连接到该桥接网络的容器的隔离。
docker桥驱动程序自动在主机中安装规则,以便不同网桥上的容器无法直接相互通信。
桥接网络适用于在同一个docker守护程序主机上运行的容器。对于在不同docker守护程序主机上运行的容器之间的通信,可在操作系统级别管理路由,也可使用覆盖网络。
启动docker时,会自动创建默认桥接网络(bridge),除非另行指定,否则新启动的容器将连接到该网络。可以自定义网桥,自定义网桥优先于bridge。
用户自定义网桥与默认网桥之间的差异
1.自定义的桥接器可以在容器化应用程序之间提供更好的隔离和互操作性。
连接到同一用户定义的网桥的容器会自动将所有端口相互暴露,并且不会向外界显示任何端口。使得容器化应用程序可以轻松相互通信,而不会意外的打开对外界的访问。
如果在默认网桥上运行相同的应用程序堆栈,则需要打开web端口和数据库端口,并使用每个的标记-p或者--push标记。意味着docker主机需要通过其他方式阻止对数据库端口的访问。
2.用户定义的桥接器在容器之间提供自动dns解析
默认网桥上的容器只能通过ip地址相互访问,除非使用--link选项。
在自定义网桥上,容器可以通过名称或者别名相互解析。
3.容器可以在运行中与用户定义的网络连接和分离
在容器生命周期中,可以动态的将其与用户定义的网络连接或断开连接。
要从默认桥接网络中删除容器,需要停止容器并使用不同的网络选项重新创建容器。
4.每个用户定义的网络都会创建一个可配置的网桥
如果使用默认网桥,则可以对其进行配置,但所有容器都使用相同的设置。此外,配置默认桥接网络发生在docker之外,并且需要重启docker。
使用和配置用户定义的网桥,docker network create。如果不同的应用程序组具有不同的网络要求,则可以在创建时单独配置每个用户定义的网桥。
5.默认桥接网络上的链接容器共享环境变量
多个容器使用docker 卷装入包含共享信息的文件或目录
一起启动多个容器docker-compose,并且compose文件可以定义共享变量
可以使用swarm服务而不是独立容器,并利用共享机密和配置。
管理用户定义的桥
docker network create my-net // 创建用户自定义的桥接网络
docker network rm my-net // 删除用户自定义的桥接网络
当创建或删除用户自定义的网桥或者从用户定义的网桥连接或断开容器时,docker使用特定于操作系统的工具来管理地产网络基础结构,例如iptables在linux上添加或删除网桥设备或配置规则。、
将容器连接到用户定义的桥
创建容器可以指定一个或者多个--netwoprk标志。
// 将nginx容器连接到my-net网络,将容器中的80端口发布到docker主机上的端口8080,因此外部客户端可以/访问该端口。连接到my-net网络的任何其他容器都可以访问到my-nginx容器上的所有端口,反之亦然。
docker create --name my-nginx --network my-net --publish 8080:80 nginx:latest
要将正在运行的容器连接到现有的用户定义的桥。
// 将已经在运行的my-nginx容器连接到已存在的my-net网络
docker network connect my-net my-nginx
端口容器与用户定义的桥接器的连接
// 断开正在运行的容器与用户定义的桥的连接。将my-nginx容器与my-net网络断开连接
docker network disconnect my-net my-nginx
使用ipv6
创建网络的时候指定--ipv6
启用从docker容器转发到外部世界
默认情况下,来自连接到默认网桥的容器的流量不会转发到外部世界,要启用转发,不是docker命令。
// 设置linux内核以允许ip转发
sysctl net.ipv4.conf.all.forwarding=1
// 将策略的iptables forward策略更改 drop 为 accept
sudo iptables -P forward accept
这些设置在重启后不会持续存在,可以添加到启动脚本中。