Dcoker跨宿主机容器通信之overlay

 http://www.cnblogs.com/CloudMan6/p/7270551.html
环境准备,三台机器,主机名为docker01(192.168.111.11)、docker02(192.168.111.12)、docker03(192.168.111.13)
voerlay将所有docker环境的主机(IP)地址进行集中管理IP分配情况(通过consul分配管理,consul会知道哪个IP地址被分配了,下一次在起新容器的时候就会从consul这里分配,所以IP地址就不会冲突;consul类似于nosql,以键值对存在,当作非关系型数据库使用
docker01和docker02都要配置daemon.json文件添加cluster信息连接docker03(consul服务)。
还要配置发送clinet信息标识,便于区分docker主机,连接consul服务的时候也要带上主机的信息IP:PORT
20.Dcoker跨宿主机容器通信之overlay_docker

1)准备工作

docker03上:

#镜像不存在,可以在线下载即可
docker pull progrium/consul
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
  • 1.
  • 2.
  • 3.

注释:–name表示给容器起一个名字
-h 表示给容器的主机名起一个名字,也就是容器里面的hostname设置容器的主机名
consul:kv类型的存储数据库(key:value)
浏览器访问http://192.168.111.13:8500/出现web界面
20.Dcoker跨宿主机容器通信之overlay_overlay_02

docker01、02上:(配置里面起一个2376监听端口,在起一个通讯sock;)

vim  /etc/docker/daemon.json
{
  "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
  "cluster-store": "consul://192.168.111.13:8500",
  "cluster-advertise": "192.168.111.11:2376"
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

docker01和docker02机器配置文件添加
20.Dcoker跨宿主机容器通信之overlay_跨宿主机之间的通信_03

daemon.json配置文件修改重启docker服务发现报错
20.Dcoker跨宿主机容器通信之overlay_overlay_04

查看报错日志/var/log/messages;发现根据我要报错的内容发生冲突了,我报错的内容是tcp:等,但是他检测的是fd://
20.Dcoker跨宿主机容器通信之overlay_跨宿主机之间的通信_05

通过查看docker状态,来查看docker.service的文件进行修改
20.Dcoker跨宿主机容器通信之overlay_docker_06

vim /usr/lib/systemd/system/docker.service
将docker01和docker02主机都将-H fd://内容直接删除掉即可
20.Dcoker跨宿主机容器通信之overlay_overlay_07

docker01和docker02两台机器重启服务
systemctl daemon-reload
systemctl restart docker
在访问浏览器点击nodes发现两个docker节点
20.Dcoker跨宿主机容器通信之overlay_docker_08

2)创建overlay网络

#docker01和docker02任意一台主机执行即可
docker network create -d overlay --subnet 172.16.1.0/24 --gateway 172.16.1.254 ol1
  • 1.
  • 2.

发现两台机器的网络类型都已经存在global,而且网络ID都是一样的
20.Dcoker跨宿主机容器通信之overlay_docker_09

3)启动容器测试

docker run -it --network ol1 --name test01  busybox /bin/sh
  • 1.

根据容器的名字进行区分创建容器,ping容器的名字可以知道IP地址,而且不通宿主机的容器之间都可以互通。
20.Dcoker跨宿主机容器通信之overlay_跨宿主机之间的通信_10

每个容器有两块网卡,eth0实现容器间的通讯,eth1实现容器访问外网
20.Dcoker跨宿主机容器通信之overlay_overlay_11

容器中的eth1对应宿主机的docker_awbridae进行上网
20.Dcoker跨宿主机容器通信之overlay_docker_12

网络通信的流程,容器的eth1通过宿主机的bw_gateway网卡然后nat转换内核转发到eth0,上外网

20.Dcoker跨宿主机容器通信之overlay_跨宿主机之间的通信_13