- 3.1 查看容器的IP地址
- eg: docker inspect –format ‘’ nginx
-
命令行 ip add grep global 或 cat /etc/hosts
- 3.2 将容器端口暴露到主机上
- docker run的 -p 选项将容器内的端口动态绑定到宿主机上。
- 端口映射通过两种机制实现
- 首先,默认情况下docker会修改宿主机的iptables 规则。 查看命令 iptables -L
-
其次,docker会在宿主机上启动一个轻量级代理程序。这个进程监听宿主机的所有网络接口,监听端口是为容器动态分配的端口。查看系统进程,就能看到这个代理程序。 ps -ef grep docker - 可以修改这些默认设置来禁止docker修改iptables,这时你必须自己处理网络相关功能。
- 3.3 容器连接
- 在单台主机上 –link 即可,但在一个大规模系统中,需要使用其他的服务发现方式。键值存储 和 DNS 的解决方案是很不错的选择。
- 如果你重启了一个容器,那么这个容器的 /etc/hosts 文件会自动更新,而其环境变量保持不变。因此,推荐使用 /etc/hosts 文件对所链接的容器进行IP地址解析
- 当你启动容器时,可以为每个容器都设置名称。容器名称可以用来定义容器链接。格式: –link
: - 基于DNS 或 动态容器注册机制的系统具备扩展性和自动更新功能。
- 3.4 理解docker容器网络
- 在默认情况下,docker会在宿主机上创建一个名为 docker0 的linux网桥设备。该网桥设备拥有一个私有网络地址地址及其所属子网。
- 所有容器都会链接到该网桥设备上,并从中分配一个位于子网中的IP地址。容器链接到网桥的网络接口会把docker0网络设备作为网关。
- 创建新容器时,docker会创建一对网络设备接口,并将它们放到两个独立的网络命名空间:一个网络设备放到容器的网络命名空间(即 eth0);另一个网络设备放到宿主机的网络命名空间,并链接到docker0 网桥设备上。
- ip命令 : ip -d link show
- 如果安装了 bridge-utils 包,也可以使用 brctl工具。 eg: brctl show
- 3.4.3 讨论
- 访问外部的网络流量将会通过IP转发功能转发到docker主机的其他网络接口上,并通过 iptables 的地址伪装规则进行NAT地址转换。
- cat /proc/sys/net/ipv4/ip_forward
- 如果关闭IP转发功能,你就会发现容器将不能再链接到外部网络。
- 查看为外部通信而创建的用于IP伪装的NAT规则 iptables -t nat -L
- 访问外部的网络流量将会通过IP转发功能转发到docker主机的其他网络接口上,并通过 iptables 的地址伪装规则进行NAT地址转换。
- 3.5 选择容器网络模式 * 通过 –net 选项 选择 容器启动时的网络模式 * none 不带任何网络功能的容器 * host 使用与宿主机相同的网络 不建议使用这种模式,可能会导致你在容器中不小心对主机中的网络进行了修改。但是这种模式非常适合那些对网络I/O性能特别敏感的进程。 * container:CONTAINER_OR_ID 与已经启动的容器共享一个网络命名空间。
- 3.6 配置docker守护进程iptables和IP转发设置
- –ip-forward 和 –iptables
- –icc=false 这将会为docker网桥上的数据包添加一个默认丢弃的规则,容器之间也不能互相访问。
- 3.7 通过pipework理解容器网络 * pipework 通过 cgroups 和 网络命名空间 来创建容器网络。 * 阅读一下它的bash脚本,可以学习到创建一个容器网络所需的所有详细步骤。
-
3.8 定制docker网桥设备
- 3.9 在docker中使用OVS * 虚拟交换机软件 Open Switch (OVS)
- 3.10 在docker主机间创建GRE隧道 * 你需要在位于不同docker主机上的容器中使用它们独立的IP地址进行网络通信。 * 可以构建一个通用路由封装(Generic Routing Encapsulation GRE)来对IPv4通信进行封装,并为容器之间互连提供基于容器私有地址的路由。
- 3.11 在weave网络上运行容器
* 你想要为跨越多个数据中心的、规模从单台到数千台的主机上运行的容器创建一个网络,该网络具备自动IP地址分配功能,并且集成基于DNS的服务发现。
* host1$ weave launch
-
host2$ weave launch host1_ip
-
scope launch
-
-
3.11.4 在AWS上运行 Weave网络
-
3.13 在docker主机上部署flannel覆盖网络
- 3.14 在多台docker主机中使用docker network * VXLAN * 使用consul服务来存储 键值
- 3.15 深入docker network命名空间配置