准备工作

安装docker,不建议直接使用Docker官方的yum install docker

wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-selinux-1.12.6-1.el7.centos.noarch.rpm
wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-1.12.6-1.el7.centos.x86_64.rpm
wget http://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-debuginfo-1.12.6-1.el7.centos.x86_64.rpm
yum localinstall -y docker-engine-selinux-1.12.-.el7.centos.noarch.rpm docker-engine-1.12.-.el7.centos.x86_64.rpm docker-engine-debuginfo-1.12.-.el7.centos.x86_64.rpm

http://download.csdn.net/detail/yiyu1/9875469

一、开放相关端口

firewall-cmd --zone=public --add-port=/tcp --permanent
firewall-cmd --zone=public --add-port=/tcp --permanent
firewall-cmd --zone=public --add-port=/udp --permanent
firewall-cmd --zone=public --add-port=/tcp --permanent
firewall-cmd --zone=public --add-port=/udp --permanent
firewall-cmd --reload

二、修改配置 版本不同,可以忽略

vi /etc/docker/daemon.json
"live-restore": false

有关集群的docker命令如下:

  1. docker swarm:集群管理,子命令有init, join,join-token, leave, update
  2. docker node:节点管理,子命令有demote, inspect,ls, promote, rm, ps, update
  3. docker service:服务管理,子命令有create, inspect, ps, ls ,rm , scale, update
  4. docker stack/deploy:试验特性,用于多应用部署

创建swarm 集群

查看docker swarm 命令说明

# docker swarm -h
Flag shorthand -h has been deprecated, please use --help
Usage: docker swarm COMMAND
Manage Docker Swarm
Options:
--help Print usage
Commands:
init Initialize a swarm
join Join a swarm as a node and/or manager
join-token Manage join tokens
update Update the swarm
leave Leave a swarm
Run 'docker swarm COMMAND --help' for more information on a command.

创建集群

#命令格式: docker swarm init --listen-addr <MANAGER-IP>:<PORT>
[root@centos-web ~]# docker swarm init --listen-addr 172.18.30.29:
Swarm initialized: current node (a60d5c3ttymvtozr46uvk17q4) is now a manager.
docker swarm init --advertise-addr 122.62.24.161 --listen-addr 122.62.24.161:2377

查看集群

# docker node ls
ID HOSTNAME MEMBERSHIP STATUS AVAILABILITY MANAGER STATUS
a60d5c3ttymvtozr46uvk17q4 * centos-web Accepted Ready Active Leader

获取加入集群命令token

#docker swarm join-token manager
docker swarm join \
--token ********* \
172.18.30.29:

子节点加入集群

docker swarm join \
--token ********* \
172.18.30.29:

删除集群子节点

docker node demote ***
docker swarm leave --force(节点上)
docker node rm --force(manager上)

创建一个overlay 跨主机网络

查看当前网络

[root@H-T- ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
47d05fd82e77 bridge bridge local
76e0302f7929 docker_gwbridge bridge local
81c22e7f1b48 host host local
4enpk54t9oy2 ingress overlay swarm
c80502ba134b none null local

创建一个新的overlay网络

#swarm上默认已有一个名为ingress的overlay 网络

 [root@centos-node4 ~]# docker network create --driver overlay docker-net
2o223p435s5glx69dw211u5d2
[root@centos-web ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
abec77415f48 bridge bridge local
aoqs3p835s5g docker-net overlay swarm
e2fff9d572a6 docker_gwbridge bridge local
166bd71f7d0e host host local
9gr6bfff1rv9 ingress overlay swarm
1d2bfc590294 none null local

docker-net就是新创建的网络

在新的跨主机overlay 网络(docker-net)上创建应用

部署应用

docker service create --constraint=node.HOSTNAME==H-C-42 --replicas  --publish : --name lvs --network=docker-net inits/lvs

指定一个节点部署应用

# docker node ls
ID HOSTNAME MEMBERSHIP STATUS AVAILABILITY MANAGER STATUS
a60d5c3ttymvtozr46uvk17q4 * centos-web Accepted Ready Active Leader
#docker service create --constraint=node.HOSTNAME==centos-web --replicas 1 --publish 28152:22 --publish 8152:8080 --name web --network=docker-net  inits/source2.0.3
ce2qc5paxmfa2gxrtu320v5m6

–replicas 副本数量
–publish 服务发现,端口映射
–mount 挂载文件

--mount type=bind,src=/home,dst=/home,readonly
–name service名称

#前提节点服务器上images上有inits/lvs镜像

部署结果

docker service ls
ID NAME REPLICAS IMAGE COMMAND
5lgdq3ihiez0 lvs / inits/lvs
[root@centos-node4 ~]# docker service tasks helloworld
ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE
eul3bus45qz3b555wekotdmo5 lvs. helloworld alpine Running seconds Running centos-node5
55uhq6xxcv53xlkqv2f0be9b9 lvs. helloworld alpine Running seconds Running centos-node4

分别在运行两个节点上查看容器运行情况

#ssh 172.18.30.29
[root@H-T- ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
389f9eefe455 inits/lvs:latest "/usr/sbin/sshd -D" minutes ago Up minutes /tcp lvs..aco0uuf1of90tl31skh6a6ndv
#ssh 172.18.30.12
[root@H-C- ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
af573b0ae945 inits/lvs:latest "/usr/sbin/sshd -D" minutes ago Up minutes /tcp lvs..0a1s4la7prc3qmfdfdqazitsn

其他

docker service ls 查看集群列表
docker service ps lvs 查看集群下所有节点状态
docker service rm lvs 删除集群
docker service inspect --pretty lvs 集群属性
docker service scale lvs=4 #扩容集群节点数量

测试两个主机的网络是否能互通

# docker exec -ti lvs..0a1s4la7prc3qmfdfdqazitsn sh
/ # ping lvs..aco0uuf1of90tl31skh6a6ndv
PING lvs..aco0uuf1of90tl31skh6a6ndv (10.0.9.3): data bytes
bytes from 10.0.9.3: seq= ttl= time=0.514 ms
bytes from 10.0.9.3: seq= ttl= time=0.508 ms
bytes from 10.0.9.3: seq= ttl= time=0.381 ms
bytes from 10.0.9.3: seq= ttl= time=0.408 ms
^C
--- lvs..aco0uuf1of90tl31skh6a6ndv ping statistics ---
packets transmitted, packets received, % packet loss
round-trip min/avg/max = 0.381/0.452/0.514 ms

同理去另一台主机测试网络是否正常

或已暴露22端口,直接

ssh 172.18.30.29 -p
ifconfig
172.18..29内部ip
ping 172.18..12内部ip
ssh 172.18.30.12 -p
ifconfig
172.18..12内部ip
ping 172.18..29内部ip

dokcer swarm自带的负载均衡

创建一组服务

docker service create --replicas  --name nginx -p :80 --network=docker-net inits/nginx

测试服务

浏览器访问:
http://172.18.30.29
刷新浏览器
系统将轮询访问集群节点下服务

docker swarm 搭建及跨主机网络互连案例分析的更多相关文章

  1. docker swarm 搭建与服务更新

    一,docker swarm 是什么 Docker Swarm.Docker Machine与Docker Compose号称Docker三剑客Docker Swarm 和 Docker Compos ...

  2. Docker:使用Ambassador进行跨主机间容器通信

    转载请注明出处:点我 由于Docker自身的网络的原因,想要在多主机间的容器之间进行通信是比较麻烦的事情.可以利用Ambassador容器来实现这一功能. 基本原理: 利用Ambassador来实现主 ...

  3. docker~swarm搭建docker高可用集群

    回到目录 Swarm概念 Swarm是Docker公司推出的用来管理docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Docker API接口作为其前端访问入 ...

  4. docker swarm搭建tidb踩坑日记

    背景 公司新项目数据量翻了一倍,每天上亿数据量的读写,传统的单库单表已经满足不了目前的需求,得考虑下分布式存储了.那用啥呢,之前有考虑用到mycat,但是一进官网,一股山寨气息扑面而来,技术群进群还收 ...

  5. Docker 网络管理及容器跨主机通信

    1.网络模式 docker支持四种网络模式,使用--net选项指定: host,--net=host,如果指定此模式,容器将不会获得一个独立的network namespace,而是和宿主机共用一个. ...

  6. Docker 跨主机网络方案分析

    PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...

  7. Docker Swarm搭建多服务器下Docker集群

    对于有多台服务器来讲,如果每一台都去手动操控,那将会是一件非常浪费时间的事情,毕竟时间这东西,于我们而言,十分宝贵,或许在开始搭建环境的时候耗费点时间,感觉是正常的,我也如此,花费大堆时间在采坑和填坑 ...

  8. centos7下安装docker(15.6docker跨主机网络---Weave)

    Weave是weaveworks开发的容器网络解决方案.weave创建的虚拟网络可以将部署在多个主机上的容器连接起来.对于容器来说,weave就像一个巨大的网络交换机,容器可以直接通信,无需NAT和端 ...

  9. centos7下安装docker(15.4跨主机网络-flannel)

    flannel是CoreOS开发的容器网络解决方案,flannel为每一个host分配一个subnet,容器从这些subnet中分配IP,这些IP可以在host之间路由,容器无需NAT和port ma ...

随机推荐

  1. HPS基本概念及其设计

    DE1-SOC开发版上的FPGA在一个基于ARM的用户定制系统(SOC)中集成了分立处理器(HPS).FPGA和数字信号处理(DSP)功能.HPS是基于ARM cortex-A9双核处理器,具有丰富的 ...

  2. 请教:WCF速度似乎比Remoting慢

    两段极为相似的代码,主要想看看过输与序列化过程两者的用时差异,结果10000次的调用,WCF用了11秒多,remoting用了5秒不到!这是测试的源代码 Remoting的服务端 public cla ...

  3. cad.net 利用win32api实现一个命令开关参照面板

    首先我要判断是否已经打开了参照面板. 然而cad自己没有相关的系统变量.这时我就需要利用到win32api来判断程序是否打开了参照面板了. 首先学习的是 https://blog.csdn.net/b ...

  4. Android 追加写入文件的三种方法

    一.使用FileOutputStream 使用FileOutputStream,在构造FileOutputStream时,把第二个参数设为true public static void method1 ...

  5. Go语言常量

    常量是一个简单值的标识符,在程序运行时,不会被修改的量. 常量中的数据类型只能是布尔型.数字型(整数型.浮点型和复数)和字符串型. 常量的定义格式: //const 常量名 类型 值 const id ...

  6. Bootstrap轮播如何支持移动端左右滑动

    一直觉得bootstrap的轮播用起来很好用,代码简单,又支持响应式,不过从来没想过,也不知道原来bootstrap的轮播竟然不支持在手机上左右滑动 解决方法就是:使用滑动手势js插件:hammer. ...

  7. 分布式任务调度系统xxl-job源码探究(一、客户端)

    前面讲了xxl-job的搭建,现在来粗略的解析下该分布式调度系统的源码,先来客户点代码 客户端源码 客户端开启的时候会向服务中心进行注册,其实现用的是jetty连接,且每隔半分钟会发送一次心跳,来告诉 ...

  8. MySQL:事务的隔离性

    [参考文章]:数据库的事务特性及隔离级别 1. 事务的四大特性 1.1 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用 ...

  9. 从一个集合中查找最大最小的N个元素——Python heapq 堆数据结构

    Top N问题在搜索引擎.推荐系统领域应用很广, 如果用我们较为常见的语言,如C.C++.Java等,代码量至少也得五行,但是用Python的话,只用一个函数就能搞定,只需引入heapq(堆队列)这个 ...

  10. requestAnimFrame 动画的使用方法

    //requestAnimFrame 封装,可以兼容所有浏览器 window.requestAnimFrame = (function(){ return window.requestAnimatio ...