docker swarm 搭建及跨主机网络互连案例分析
准备工作
安装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命令如下:
- docker swarm:集群管理,子命令有init, join,join-token, leave, update
- docker node:节点管理,子命令有demote, inspect,ls, promote, rm, ps, update
- docker service:服务管理,子命令有create, inspect, ps, ls ,rm , scale, update
- 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 搭建及跨主机网络互连案例分析的更多相关文章
- docker swarm 搭建与服务更新
一,docker swarm 是什么 Docker Swarm.Docker Machine与Docker Compose号称Docker三剑客Docker Swarm 和 Docker Compos ...
- Docker:使用Ambassador进行跨主机间容器通信
转载请注明出处:点我 由于Docker自身的网络的原因,想要在多主机间的容器之间进行通信是比较麻烦的事情.可以利用Ambassador容器来实现这一功能. 基本原理: 利用Ambassador来实现主 ...
- docker~swarm搭建docker高可用集群
回到目录 Swarm概念 Swarm是Docker公司推出的用来管理docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Docker API接口作为其前端访问入 ...
- docker swarm搭建tidb踩坑日记
背景 公司新项目数据量翻了一倍,每天上亿数据量的读写,传统的单库单表已经满足不了目前的需求,得考虑下分布式存储了.那用啥呢,之前有考虑用到mycat,但是一进官网,一股山寨气息扑面而来,技术群进群还收 ...
- Docker 网络管理及容器跨主机通信
1.网络模式 docker支持四种网络模式,使用--net选项指定: host,--net=host,如果指定此模式,容器将不会获得一个独立的network namespace,而是和宿主机共用一个. ...
- Docker 跨主机网络方案分析
PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...
- Docker Swarm搭建多服务器下Docker集群
对于有多台服务器来讲,如果每一台都去手动操控,那将会是一件非常浪费时间的事情,毕竟时间这东西,于我们而言,十分宝贵,或许在开始搭建环境的时候耗费点时间,感觉是正常的,我也如此,花费大堆时间在采坑和填坑 ...
- centos7下安装docker(15.6docker跨主机网络---Weave)
Weave是weaveworks开发的容器网络解决方案.weave创建的虚拟网络可以将部署在多个主机上的容器连接起来.对于容器来说,weave就像一个巨大的网络交换机,容器可以直接通信,无需NAT和端 ...
- centos7下安装docker(15.4跨主机网络-flannel)
flannel是CoreOS开发的容器网络解决方案,flannel为每一个host分配一个subnet,容器从这些subnet中分配IP,这些IP可以在host之间路由,容器无需NAT和port ma ...
随机推荐
- Beta冲刺 (7/7)
Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1:(组长)柯奇豪 过去两天完成了哪些任务 部分代码的整合 编辑文章部分的完成 ...
- Codeforces791 B. Bear and Friendship Condition
B. Bear and Friendship Condition time limit per test 1 second memory limit per test 256 megabytes in ...
- WPF 依赖属性&附加属性
依赖属性 暂无 附加属性 1.在没有控件源码的前提下增加控件的属性 2.多个控件需要用到同一种属性 使用附加属性可以减少代码量,不必为每一个控件都增加依赖属性 3.属性不确定是否需要使用 在某些上下文 ...
- 安装VS2017后打开项目提示 asp.net 4.0尚未web服务器注册
Visual Studio 2017 出来了,手痒安装完成后打开原来的项目缺提示,asp.net 4.0尚未web服务器注册.郁闷了… 按照提示的方法,如何:将 ASP.NET Web 应用程序升级到 ...
- Android 实现手写板技术
Android手写板和涂鸦的功能,代码如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andro ...
- Android之ListView,AsyncTask,GridView,CardView,本地数据存储,SQLite数据库
版权声明:未经博主允许不得转载 补充 补充上一节,使用ListView是用来显示列表项的,使用ListView需要两个xml文件,一个是列表布局,一个是单个列表项的布局.如我们要在要显示系统所有app ...
- Mybatis框架二:增删改查
这里是搭建框架和准备数据: http://www.cnblogs.com/xuyiqing/p/8600888.html 实现增删改查功能: 测试类: package junit; import ja ...
- kubernetes集群搭建(2):docker私有仓库
kubernetes集群搭建(1):环境准备 中各节点已经安装好了docker,请确认docker已启动并正常运行 1.通过命令启动私库 docker run -d -p 5000:5000 --pr ...
- Vue-Cli 搭建项目 小白
vue-用Vue-cli从零开始搭建一个Vue项目 Vue是近两年来比较火的一个前端框架(渐进式框架吧). Vue两大核心思想:组件化和数据驱动.组件化就是将一个整体合理拆分为一个一个小块(组件),组 ...
- Sequelize 学习笔记(11)- Migrations 迁移
一.作用 类似 git 管理源代码 一样,维护你的 DB. 二.安装 npm install --save sequelize-cli 三.使用 1.构建项目时 node_modules/.bin/s ...