文档章节

使用docker 1.12-rc3 搭建多主机docker swarm集群

东方星痕
 东方星痕
发布于 2016/07/03 13:25
字数 1163
阅读 254
收藏 3

使用docker 1.12-rc3 搭建多主机docker swarm集群

准备

  1. 准备至少两台的centos 7 主机(全新最小安装, 可以使用虚拟机安装)
  1. 开放端口2377 tcp端口, 7946 4789 tcp udp 端口
  • 本文使用192.168.99.101(hostname:centos-node4) 作为swarm manager
  • 192.168.99.102(hostname:centos-node5) 作为swarm agent1

安装docker engine 1.12-rc3

在每台机器上执行以下命令

curl -fsSL https://test.docker.com/ | sh

安装完后查看docker 版本

[root@centos-node4 ~]# docker version
Client:
 Version:      1.12.0-rc3
 API version:  1.24
 Go version:   go1.6.2
 Git commit:   91e29e8
 Built:
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.0-rc3
 API version:  1.24
 Go version:   go1.6.2
 Git commit:   91e29e8
 Built:
 OS/Arch:      linux/amd64

开放端口相关命令

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

新版docker swarm 命令详情

有关集群的docker命令如下:

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

创建swarm 集群

  • 查看docker swarm 命令说明
[root@centos-node4 ~]# 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
  update      Update the Swarm
  leave       Leave a Swarm
  inspect     Inspect the Swarm

Run 'docker swarm COMMAND --help' for more information on a command.
  • 在swarm manager(centos-node4:192.168.99.101)初始化swarm集群

--listen-addr指定监听的ip与端口

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

查看结果

[root@centos-node4 ~]# docker node ls
ID                           HOSTNAME      MEMBERSHIP  STATUS  AVAILABILITY  MANAGER STATUS
a60d5c3ttymvtozr46uvk17q4 *  centos-node4  Accepted    Ready   Active        Leader
  • 把swarm-agent1(centos-node5: 192.168.99.102)添加到swarm集群

在swarm-agent1上执行:

#命令格式: docker swarm join <MANAGER-IP>:<PORT>
[root@centos-node5 ~]# docker swarm join 192.168.99.101:2377
This node joined a Swarm as a worker.
  • 在swarm manager查看结果
[root@centos-node4 ~]# docker node ls
ID                           HOSTNAME      MEMBERSHIP  STATUS  AVAILABILITY  MANAGER STATUS
0ypcw58hjlcvr0xqbtizmau62    centos-node5  Accepted    Ready   Active
a60d5c3ttymvtozr46uvk17q4 *  centos-node4  Accepted    Ready   Active        Leader

创建一个overlay 跨主机网络

  • 查看原有网络
[root@centos-node4 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
abec77415f48        bridge              bridge              local
e2fff9d572a6        docker_gwbridge     bridge              local
166bd71f7d0e        host                host                local
9gr6bfff1rv9        ingress             overlay             swarm
1d2bfc590294        none                null                local

可以看到在swarm上默认已有一个名为ingress的overlay 网络, 可以直接使用, 但本文会创建一个新的

  • 创建一个新的overlay网络
 [root@centos-node4 ~]# docker network create --driver overlay docker-net
aoqs3p835s5glx69hi46ou2dw
 [root@centos-node4 ~]# 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)上创建应用

  • 部署

alpine镜像在docker-net网络上启动两个实例, 并编排为一组服务

[root@centos-node4 ~]# docker service create --replicas 2 --name helloworld --network=ingress  alpine ping docker.com
5lgdq3ihiez0o7h2uegu4fgd3
  • 查看部署结果
[root@centos-node4 ~]# docker service ls
ID            NAME        REPLICAS  IMAGE   COMMAND
5lgdq3ihiez0  helloworld  0/2       alpine  ping docker.com
[root@centos-node4 ~]# docker service tasks helloworld
ID                         NAME          SERVICE     IMAGE   LAST STATE          DESIRED STATE  NODE
eul3bus45qz3b555wekotdmo5  helloworld.1  helloworld  alpine  Running 14 seconds  Running        centos-node5
55uhq6xxcv53xlkqv2f0be9b9  helloworld.2  helloworld  alpine  Running 14 seconds  Running        centos-node4

可以看到两个实例分别运行在两个节点上

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

  • 分别查看两个实例的名称
# 在swarm-manager 上执行
[root@centos-node4 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS               NAMES
f4a197abdb0b        alpine:latest       "ping docker.com"        42 minutes ago      Up 42 minutes                                 helloworld.2.55uhq6xxcv53xlkqv2f0be9b9

# 在swarm-agnet1 上执行
[root@centos-node5 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
39cc35cd54b5        alpine:latest       "ping docker.com"   50 seconds ago      Up 49 seconds                           helloworld.1.eul3bus45qz3b555wekotdmo5
  • 在swarm-manager 上测试
[root@centos-node4 ~]# docker exec -ti helloworld.2.55uhq6xxcv53xlkqv2f0be9b9 sh
/ # ping helloworld.1.eul3bus45qz3b555wekotdmo5
PING helloworld.1.eul3bus45qz3b555wekotdmo5 (10.0.9.3): 56 data bytes
64 bytes from 10.0.9.3: seq=0 ttl=64 time=0.514 ms
64 bytes from 10.0.9.3: seq=1 ttl=64 time=0.508 ms
64 bytes from 10.0.9.3: seq=2 ttl=64 time=0.381 ms
64 bytes from 10.0.9.3: seq=3 ttl=64 time=0.408 ms
^C
--- helloworld.1.eul3bus45qz3b555wekotdmo5 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.381/0.452/0.514 ms

  • 在swarm-agent1 上测试
[root@centos-node5 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
39cc35cd54b5        alpine:latest       "ping docker.com"   50 seconds ago      Up 49 seconds                           helloworld.1.eul3bus45qz3b555wekotdmo5
[root@centos-node5 ~]# docker exec -ti  helloworld.1.eul3bus45qz3b555wekotdmo5 sh
/ # ping helloworld.2.55uhq6xxcv53xlkqv2f0be9b9
PING helloworld.2.55uhq6xxcv53xlkqv2f0be9b9 (10.0.9.4): 56 data bytes
64 bytes from 10.0.9.4: seq=0 ttl=64 time=0.892 ms
64 bytes from 10.0.9.4: seq=1 ttl=64 time=0.463 ms
64 bytes from 10.0.9.4: seq=2 ttl=64 time=0.462 ms
64 bytes from 10.0.9.4: seq=3 ttl=64 time=0.478 ms
64 bytes from 10.0.9.4: seq=4 ttl=64 time=0.468 ms
64 bytes from 10.0.9.4: seq=5 ttl=64 time=0.459 ms
^C
--- helloworld.2.55uhq6xxcv53xlkqv2f0be9b9 ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max = 0.459/0.537/0.892 ms

现在新版的docker swarm 管理非常简单, 可以快速的搭建起一个跨主机的集群并部署应用

博客地址: http://www.lxy520.net/2016/07/03/shi-yong-docker-1-12-rc3-da-jian-duo-zhu-ji-docker-swarmji-qun/

© 著作权归作者所有

共有 人打赏支持
东方星痕

东方星痕

粉丝 14
博文 1
码字总数 1163
作品 3
高级程序员
私信 提问
Docker Swarm群集

Docker Swarm 是什么? Docker Swarm是一个用于创建Docker主机(运行Docker守护进程的服务器)集群的工具,使用Swarm操作集群,会使用户感觉就像是在一台主机上进行操作 docker1.12集成了swa...

柴鑫旺
2017/09/03
0
0
docker swarm集群

Docker1.12+swrmkit docker1.12集成了swarmkit, 使你可以不用安装额外的软件包, 使用简单的命令启动创建docker swarm集群。 如果你在运行 Docker 1.12时,你就可以原生创建一个 Swarm 集群 ...

常亚亚
2017/05/26
0
0
测试环境docker化—容器集群编排实践

本文来自网易云社区 作者:孙婷婷 背景 在前文《测试环境docker化—基于ndp部署模式的docker基础镜像制作》中已经详述了docker镜像制作及模块部署的过程,按照上述做法已可以搭建测试环境。但...

网易云
09/22
0
0
Docker技术浅谈:私有化部署的优势以及在顶象内部的应用实践

顶象全景式业务安全风控体系基于新一代风控体系构建,并采用Docker技术进行私有云和公有云部署。本文主要和大家分享下Docker容器技术和顶象风控系统私有化部署的优势以及Docker容器技术在顶象...

顶象技术
2017/11/28
0
0
docker 1.12版本的swarm集群使用

Docker 1.12版本后,Swarm变化比较大,更加简单、好用,而且采用了gossip协议后,支持多个Manager,也更加稳定可靠了。不需要单独安装,Swarm的集群功能已经成为Docker Engine的一部分。因此...

openthings
2016/11/20
31
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么只有你每次提交代码,log里面会出现merge

http://www.cnblogs.com/Sinte-Beuve/p/9195018.html

踏破铁鞋无觅处
4分钟前
0
0
如何学习大数据:spark发布程序

一、对于spark程序只是用于默认的spark包的情况 直接点击pcakage 将程序进行在linux当中进行发布 客户端模式:测试 spark-submit --class com.keduox.App \ --master yarn \ --deploy-mode ...

架构师springboot
5分钟前
0
0
oracle job(定时任务)

创建 定时任务 job declare job number;BEGIN DBMS_JOB.SUBMIT( JOB => job, -- job任务的唯一标识(自动生成) WHAT => 'INSERT into TEXTL (id) VALUES(TEXT......

骑羊放狼灬
8分钟前
0
0
Spring声明式事务在抛出异常时不回滚(RollBack)

Spring声明式事务默认只在RuntimeException时Rollback(回滚),不当的try catch会导致事务不回滚。 spring事务默认运行时异常回滚,RuntimeException 配置时添加异常回滚 rollback-for="Th...

叶落花开
9分钟前
0
0
赋能时空云计算 阿里云数据库时空引擎Ganos上线

随着移动互联网、位置感知技术、对地观测技术的快速发展,时空信息已从传统GIS行业渗透到大众应用及各行各业。从静态POI(兴趣点)到APP位置信息,从导航电子地图到车辆行驶轨迹,从卫星影像...

阿里云云栖社区
11分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部