docker整合consul实现跨主机容器间的通信

docker整合consul实现跨主机容器间的通信

一、Consul的准备

1 安装consul

linux安装:官网下载后者

//ubuntu 下载
sudo wget https://releases.hashicorp.com/consul/0.7.2/consul_0.7.2_linux_amd64.zip

准备安装

docker整合consul实现跨主机容器间的通


标签(空格分隔): docker

一、Consul的准备

1 安装consul

linux安装:官网下载后者

//ubuntu 下载
sudo wget https://releases.hashicorp.co
m/consul/0.7.2/consul_0.7.2_linux_amd64
.zip

准备安装

//解压下载的安装包
unzip consul_0.7.2_linux_amd64.zip
sudo mv consul /usr/local/bin
//创建consul存储位置
sudo mkdir /opt/consul
taoliu     文件    发布     ````java
//解压下载的安装包
unzip consul_0.7.2_linux_amd64.zip
sudo mv consul /usr/local/bin
//创建consul存储位置
sudo mkdir /opt/consul

Consul的常用指令

//查看详细的route的配置
consule members
//将client加入集群
consule join 
//注册ip到集群
consul agent

2 配置consul(示例两个ip)

开启两个服务

目前有两个主机IP为 192.168.1.1和192.168.1.2

//再ip 192.168.1.1 上开启服务(servce) ,
//注释:&,让终端后台运行
sudo nohup consul agent -server -bootstrap -data-dir /opt/consul -bind=192.168.1.1 &
//再ip 192.168.1.2 上开启服务(client)
sudo nohup consul agent -data-dir /opt/consul -bind=192.168.1.2 &

启动成功结果展示

silent@silent-X200:~$ consul members
Node                  Address             Status  Type    Build  Protocol  DC
hicetech.thinkserver  192.168.1.1:8301    alive   server  0.7.2  2         dc1
silent-X200           192.168.1.2:8301    alive   client  0.7.2  2         dc1

二、docker 配置

运行环境linux:Ubuntu、centOS7

1 docker的参数

参数 解释
--api-enable-cors=false 开放远程API调用的CORS头信息。这个接口开关对想进行二次开发的上层应用提供了支持。
-b, --bridge="" 挂载已经存在的网桥设备到 Docker 容器里。注意,使用 none 可以停用容器里的网络。
D, --debug=false 开启Debug模式。例如:docker -d -D
-d, --daemon=false 开启Daemon模式
H, --host=[] 在后台模式下指定socket绑定,可以绑定一个或多个 tcp://host:port, unix:///path/to/socket, fd://* 或 fd://socketfd。例如: docker -H tcp://0.0.0.0:2375 ps 或者export DOCKER_HOST="tcp://0.0.0.0:2375"$ docker ps
--icc=true 启用内联容器的通信
--ip="0.0.0.0" 容器绑定IP时使用的默认IP地址
--storage-opt=[] 配置存储驱动的参数
--mtu=0 设置容器网络的MTU值,如果没有这个参数,选用默认 route MTU,如果没有默认route,就设置成常量值 1500。
-p, --pidfile="/var/run/docker.pid" 后台进程PID文件路径。
-r, --restart=true 重启之前运行中的容器
-s, --storage-driver="" 强制容器运行时使用指定的存储驱动,例如,指定使用devicemapper, 可以这样:docker -d -s devicemapper

2 docker的启动命令

注意配置docker的配置文件

//在Red Hat 和centOS
$ sudo service docker stop  
Redirecting to /bin/systemctl stop  docker.service  
$ sudo service docker start  
Redirecting to /bin/systemctl start  docker.service 

//在Ubuntu
$ sudo stop docker  
docker stop/waiting  
$ sudo start docker  
docker start/running, process 18192 

带参数启动docker

//在Ubuntu中启动  
//--cluster-advertis :本地的网卡名称   enp1s0
//--cluster-store :本地主机的IP
docker daemon  --cluster-store=consul://192.168.1.2:8500 --cluster-advertise=enp1s0:2357 &

//在CentOS中启动 
dockerd  -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock  --cluster-store=consul://localhost:8500 --cluster-advertise=eno1:2357

3 在ip为192.168.1.1的服务器的docker中创建网卡

//--ip-range=192.168.2.0/24 和--subnet=192.168.2.0/24 指分配的网段0~24
//--gateway 网关
//overlay 配置的网卡类型
docker network create -d overlay --ip-range=192.168.2.0/24 --gateway=192.168.2.1 --subnet=192.168.2.0/24 multihost

3.1成功结果显示

//主机ip 为192.168.1.1上面展示的网卡
//当再192.168.1.1 上配置完成后辉显示两个 docker_gwbridge 和multihost 两个网卡,使用的时候使用multihsot,docker_gwdocker 的作用和bridge相同,当他是专门来服务multihost的
[root@tao vaccine]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
2b77d6d370f0        bridge              bridge              local
4a934d1b9942        docker_gwbridge     bridge              local
e073e478a440        host                host                local
5b3c3262ded8        multihost           overlay             global
a2ee0a3fc0de        none                null                local
//主机ip 为192.168.1.2上面展示的网卡
//在ip 192.168.1.1会自动同步到ip为192.168.1.2上面的docker network ,此时说明两台服务器的docker是可以互通的,
root@silent-X200:/etc/docker# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
562e5565db92        bridge              bridge              local               
9fc873fe3a82        docker_gwbridge     bridge              local               
c94896f54401        host                host                local               
5b3c3262ded8        multihost           overlay             global              
d53ab98cc279        none                null                local

注释:当你创建完成multihost时

3.2本地网卡变化

//ip 192.168.1.1 此时除了到docker 默认的docker0,还多了一个docker_gwbridge的网卡,docker_gwbridge 他是容器间进行通信的桥梁
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 0.0.0.0
        inet6 fe80::42:daff:fee5:15d4  prefixlen 64  scopeid 0x20<link>
        ether 02:42:da:e5:15:d4  txqueuelen 0  (Ethernet)
        RX packets 2561  bytes 214365 (209.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2333  bytes 3068911 (2.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker_gwbridge: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.0.1  netmask 255.255.0.0  broadcast 0.0.0.0
        inet6 fe80::42:b3ff:fe49:e42d  prefixlen 64  scopeid 0x20<link>
        ether 02:42:b3:49:e4:2d  txqueuelen 0  (Ethernet)
        RX packets 868802  bytes 123326175 (117.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 868802  bytes 123326175 (117.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
//ip 192.168.1.2 同时也多了一个 docker_gwbridge 
docker0   Link encap:以太网  硬件地址 02:42:b3:67:6e:94  
          inet 地址:172.17.0.1  广播:0.0.0.0  掩码:255.255.0.0
          inet6 地址: fe80::42:b3ff:fe67:6e94/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  跃点数:1
          接收数据包:5434 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:4542 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:0 
          接收字节:662528 (662.5 KB)  发送字节:683433 (683.4 KB)

docker_gwbridge Link encap:以太网  硬件地址 02:42:51:0d:34:37  
          inet 地址:172.18.0.1  广播:0.0.0.0  掩码:255.255.0.0
          inet6 地址: fe80::42:51ff:fe0d:3437/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  跃点数:1
          接收数据包:38256 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:40898 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:0 
          接收字节:7064590 (7.0 MB)  发送字节:8310066 (8.3 MB)

推荐阅读更多精彩内容