Docker Network drivers

bridge

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

Docker Network drivers_第1张图片
docker0.png

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

演示:

ip addr
docker run -d 
docker container ls
ip addr
docker container kill 
ip addr

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

overlay

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

  • 必须集群才能创建 overlay network
  • 开放需要的端口
    TCP port 2377 for cluster management communications
    TCP and UDP port 7946 for communication among nodes
    UDP port 4789 for overlay network traffic

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

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

Consul 集群搭建

资源准备
  • 两台云主机
  • 两个外网 IP
    host1 -> 139.198.6.23 host2 -> 139.198.6.56
    consul server -> host1 consul client -> host2
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

Docker Network drivers_第2张图片
wKiom1khdu3iDnaiAAGbL6U-F9k709.png

http://blog.51cto.com/littledevil/1922922

host

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

  • 共享一个命名空间
  • 直连物理网桥
  • 端口

none

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

你可能感兴趣的:(Docker Network drivers)