准备工作

安装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. USART of STM32

    /*************************************************************************** * 文件名:USART.h * * 编写人:离 ...

  2. Qt中的CSS配置(QDarkStyleSheet)

    QDarkStylesheet gihub地址 https://github.com/ColinDuquesnoy/QDarkStyleSheet

  3. 长方体类Java编程题

    1. 编程创建一个Box类(长方体),在Box类中定义三个变量,分别表示长方体的长(length).宽(width)和高(heigth),再定义一个方法void setBox(int l, int w ...

  4. 网易易盾最新一代Java2c加固究竟有什么厉害之处?

    导语:几个月前,网易易盾正式推出Java2c加固.它以独有的"静态保护"技术,使得应用程序中的代码出现"下沉",达到不可逆的效果,兼顾"冷热启动时间& ...

  5. cad.net 利用win32api实现不重复打开dwg路径的文件夹(资源管理器)

    这里地址的方法也是可用的,但是net3.5不能使用 为此我选择使用win32api的方式来遍历当前桌面所有资源管理器 /// <summary> /// 不重复打开dwg路径的资源管理器 ...

  6. 二进制加法Java实现

    二进制整数的Java实现 任意两个二进制数(不论在什么位置)相加,只可能出现4种情况.它们是: 0+0=0 1+0=0+1=1 1+1=10=0+向高一位的进位1 1+1+1=11=1+向高一位的进位 ...

  7. 往github提交代码流程

    一 首先在Github新建一个仓库,回到首页,点击右上角的New repository新建仓库. 二  在本地依次使用下面命令 …or create a new repository on the c ...

  8. python tricks

    1. cities = ['Marseille', 'Amsterdam', 'New York', 'Londom'] # the good way for i, city in enumerate ...

  9. IDEA的maven配置

    刚接触maven的时候,也知道maven目录下有个setting文件可以设置远程maven库的地址,但自己实践的时候,发现setting文件的地址都被注释掉了,但是jar包还是能成功下载下来,那这个下 ...

  10. Python网络编程-IO阻塞与非阻塞及多路复用

    前言 问题:普通套接字实现的服务端的缺陷 一次只能服务一个客户端!                         accept阻塞! 在没有新的套接字来之前,不能处理已经建立连接的套接字的请求 re ...