准备工作

安装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. 修改VS 中的代码编辑颜色-Vs主题修改

    有个性的开发人员总是喜欢使用属于的主题和配色方案,它们可以看出开发者的个性,更改它们可以缓解审美疲劳,总之选择一个适合自己的解决方案可能极大的增加自己的编码舒适度. 1. 配色方案的选择和使用 手动修 ...

  2. poj 2505 A multiplication game

    题目 题意:两个人轮流玩游戏,Stan先手,数字 p从1开始,Stan乘以一个2-9的数,然后Ollie再乘以一个2-9的数,直到谁先将p乘到p>=n时那个人就赢了,而且轮到某人时,某人必须乘以 ...

  3. .Wait()与.GetAwaiter()之间有什么区别

    两者都是同步等待操作的结果差异主要在于处理异常.使用Wait,异常堆栈跟踪不会改变并表示异常时的实际堆栈,因此如果您有一段代码在线程池线程上运行,那么您将拥有类似的堆栈 ThreadPoolThrea ...

  4. Python脱产8期 Day014 2019/4/28

    一 带参装饰器 1.通常,装饰器为被装饰的函数添加新功能,需要外界的参数 # -- outer参数固定一个,就是func # -- inner参数固定同被装饰的函数,也不能添加新参数 # -- 可以借 ...

  5. APK防护——Anti_Virtual App的思路和实现

    作者:HAI_i 原文来自:https://bbs.ichunqiu.com/thread-42982-1-1.html 0×00 前言 Virtual App是一个很强大的存在,破坏了Android ...

  6. 关于javac和java

    1.为什么安装完jdk后不配置环境变量就能直接运行java,而不能运行javac 在安装jdk的时候jdk会自带一个jre(java运行环境),还会单独安装一个jre,默认路径是和jdk在同级目录,而 ...

  7. 为什么 echo 3 . print(2) . print(4) . 5 . 'c'的结果是45c2131

    例子:请写出echo 3 . print(2) . print(4) . 5 . 'c'的输出结果为____? 许多人看到这个题的第一印象是输出结果不就是3245c嘛,然而正确的是答案却是45c213 ...

  8. Java 实现删除文件工具类

    工具代码 package com.wangbo; import java.io.File; /** * 删除目录或文件工具类 * @author wangbo * @date 2017-04-11 1 ...

  9. mysql快熟入门

    前提:假设我们的电脑或服务器已经正确安装了mysql服务器 一:连接和断开mysql服务器 1.1连接数据库服务器 shell> mysql -u user -p (user用户名通常为root ...

  10. 七:理解控件的运行机制(例:基于CompositeControl命名空间的控件)

    组合控件与WebControl控件的事件和属性相差不大组合控件,顾名思义就是把一些控件组合起来形成一个控件这个控件将包含这些控件称为他的子控件 CompositeControl类实现了INameCon ...