Docker Network drivers

2018-08-24  本文已影响82人  x_zhaohu

bridge

docker 默认网络,每个 container 通过 docker0 进行通信,docker0(虚拟交换机) 是指装 docker 的时候默认创建的,所以默认创建的容器会绑到 docker0

docker0.png
每当开启一个容器时,会生成一个对应的 veth* 的网络接口,用来连接 containerdocker0

演示:

ip addr
docker run -d <image-id>
docker container ls
ip addr
docker container kill <contanier-id>
ip addr

ip 是 linux 一个命令,显示路由,网络设备,网络接口和隧道。
ip addr 显示分配给所有网络接口的地址。

overlay

overlay network 一个分布式的网络,可以实现跨主机容器间的通信。
创建该网络有些必要条件:

尽管 docker 官网首推配合 swarmoverlay 一起使用,swarm 又不是最 NB 的解决方案,关于 overlay 官方文档上的 demo 全是基于 swarm 的(差评),所以宁愿用借助第三方存储配合 overlay 一起使用。

docker swarm 默认 ingress。docker swarm 初始化或加入一个集群时, 创建 docker_gwbridge, 连接不同主机间容器的桥梁。

Consul 集群搭建

资源准备
host1
consul agent -server \
  -bootstrap-expect 1 \
  -node=host1 \
  -bind=0.0.0.0 \
  -advertise=139.198.6.23 \
  -data-dir workspace/data/consul/ \
  -client=0.0.0.0 -ui

consul members wan
host2
sudo consul agent -bind=0.0.0.0 \
  -advertise=139.198.6.56 \
  -data-dir workspace/data/consul/ \
  -node=host2 \
  -client=0.0.0.0 -ui

sudo consul join 139.198.6.23

consul members wan

如果 127.0.0.1 绑定 IP 是访问不到的,需要改成 0.0.0.0

Docker 配置参数
ExecStart=/usr/bin/dockerd \
  -H tcp://127.0.0.1:2375 \
  -H unix:///var/run/docker.sock \
  --cluster-store consul://139.198.6.23:8500 \
  --cluster-advertise 139.198.6.23:2375
wKiom1khdu3iDnaiAAGbL6U-F9k709.png
http://blog.51cto.com/littledevil/1922922

host

由于容器和宿主机共享同一个网络命名空间,换言之,容器的IP地址即为宿主机的IP地址。所以容器可以和宿主机一样,使用宿主机的任意网卡,实现和外界的通信。
采用host模式的容器,可以直接使用宿主机的IP地址与外界进行通信,若宿主机具有公有IP,那么容器也拥有这个公有IP。同时容器内服务的端口也可以使用宿主机的端口,无需额外进行NAT转换,而且由于容器通信时,不再需要通过linuxbridge等方式转发或者数据包的拆封,性能上有很大优势。当然,这种模式有优势,也就有劣势,主要包括以下几个方面:
最明显的就是容器不再拥有隔离、独立的网络栈。容器会与宿主机竞争网络栈的使用,并且容器的崩溃就可能导致宿主机崩溃,在生产环境中,这种问题可能是不被允许的。
容器内部将不再拥有所有的端口资源,因为一些端口已经被宿主机服务、bridge模式的容器端口绑定等其他服务占用掉了。

none

在这种模式下,容器有独立的网络栈,但不包含任何网络配置,只具有lo这个loopback网卡用于进程通信。也就是说,none模式为容器做了最少的网络设置,但是俗话说得好“少即是多”,在没有网络配置的情况下,通过第三方工具或者手工的方式,开发这任意定制容器的网络,提供了最高的灵活性。

上一篇 下一篇

猜你喜欢

热点阅读