目的

学习docker的集群管理,摸索出高可用的docker微服务架构方案。本篇文章只初步的了解下swarm(docker新版已集成了swarm)的使用,了解docker的发现服务的基础方法(docker hub 提供的内置方法,其他的比如:etcd、consul、zookeeper)

环境

三台虚拟主机:

192.168.139.128 (master,node1)

192.168.139.129(node2)

192.168.138.130(node3)

操作系统:centos7.3

Docker version 1.13.1, build 092cba3

一、安装Docker

docker的安装(略)

由于后面的shipyard需要docker的tcp方式访问,需要修改docker的配置:

vi /lib/systemd/system/docker.service

修改 ExecStart:

ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -D -H tcp://0.0.0.0:2375

重启docker

systemctl daemon-reload
systemctl start docker.service

当然实际用于生产环境这种方式并不安全,可用于测试。新版本doker swarm 支持TSL安全方式,后面的文章会讲到。

二、安装Swarm

swarm是一个docker集群管理工具。(swarm is a simple tool which controls a cluster of Docker hosts and exposes it as a single "virtual" host.)

1.拉取镜像

swarm官方镜像

rethinkdb官方镜像

docker pull swarm

2.配Swarm集群

在任意的docker节点创建一个全世界唯一的token(集群ID),记住这个token后面需要用到。(这里用的发现服务是dockhub内置的,当然还有其他的比如etcd、consul等。)

docker run --rm swarm create

我这里获取到的token是:3c739bd3a589da0788978f502ea318ea

启动swarm manger

docker run -ti -d -p 2376:2375 --restart=always --name shipyard-swarm-manager swarm:latest manage --host tcp://0.0.0.0:2375 token://3c739bd3a589da0788978f502ea318ea

启动swarm agent,将当前docker节点加入到集群中:

这里我把三台服务器(VM)加入节点到集群,在每个docker节点上分开执行。

docker run -ti -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr 192.168.139.128:2375 token://3c739bd3a589da0788978f502ea318ea

docker run -ti -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr 192.168.139.129:2375 token://3c739bd3a589da0788978f502ea318ea

docker run -ti -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr 192.168.139.130:2375 token://3c739bd3a589da0788978f502ea318ea

可以使用命令查看docker节点情况(任意docker节点上都可以执行):

docker run --rm swarm list token://3c739bd3a589da0788978f502ea318ea

可以使用命令查看docker集群的详情(可在任意docker节点上执行,IP地址是装了swarm master主机的IP):

docker -H 192.168.139.128:2376 info

三、安装Shipyard

1.拉取镜像

docker pull rethinkdb
docker pull shipyard/shipyard

2.启动rethinkdb

docker run -ti -d --restart=always --name shipyard-rethinkdb -p 8082:8080 -p 28015:28015 -p 29015:29015 -v /opt/rethinkdb:/data rethinkdb

这里暴露8082端口用于查看rethinkdb的使用情况:打开http://192.168.139.128:8082显示如下:

4.启动shipyard

docker run -ti -d --restart=always --name shipyard-controller --link shipyard-rethinkdb:rethinkdb --link shipyard-swarm-manager:swarm -p 8081:8080 shipyard/shipyard server -d tcp://swarm:2375

访问http://192.168.138.128::8001 可打开swarm的管理界面了

查看容器:



查看镜像:



查看节点:

可能遇到的问题

1.访问shipyard管理界面时候打不开?

答:由于采用了rethinkdb数据库,数据库未准备好之前是不能打开的,需要等大约1分钟。

2.shipyard能打开,但是没有容器和镜像?

答:需要设置防火墙或关闭防火墙。

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

3.在shipyard中找不到某些docker节点?

答:可能由于访问discovery.hub.docker.com的网络不稳定原因(超时),尝试重启swarm agent容器。

ERRO[0011] Post https://discovery.hub.docker.com/v1/clusters/3c739bd3a589da0788978f502ea318ea?ttl=180: net/http: TLS handshake timeout

答:需要设置防火墙或关闭防火墙。

还需要解决的问题

  • 发现服务不稳定,尝试使用其他发现服务(etcd、consul、zookeeper).
  • 使用新版Docker内置的swarm的创建集群
  • 使用Docker的STL安全连接
  • 实现Docker集群的高可用架构(生产环境)

Docker集群管理(一)—— 基础docker+swarm+shipyard的更多相关文章

  1. docker集群管理

    docker集群管理 ps:docker machine     docker swarm       docker compose  在Docker Machine发布之前,你可能会遇到以下问题: ...

  2. docker集群管理之kubernetes

    一.简介 kubernetes又叫做k8s,是Google开发的一款开源的docker集群管理工具,在这里对它的“发家史”,我不做过多的阐述,有时间大家可以自己去百度一下: 下面我要讲的就是容易混淆的 ...

  3. 基于zookeeper+mesos+marathon的docker集群管理平台

    参考文档: mesos:http://mesos.apache.org/ mesosphere社区版:https://github.com/mesosphere/open-docs mesospher ...

  4. Docker集群管理(三)—— docker swarm mode基础教程

    docker从1.12版(及后续版本)集成了swarmkit.可以方便的实现docker集群.它有哪些特点呢: 集成了集群功能 分散设计:manager和worker两种节点. 声明式服务模式 可伸缩 ...

  5. Docker集群管理(二)—— docker+swarm+etcd+shipyard

    引言 前一篇介绍如何简单的搭建一个可视化管理的docker集群,本篇将在此基础之上引入etcd发现服务. 目的 使用etcd发现服务解决swarm内置发现服务的不稳定问题.etcd采用raft算法,这 ...

  6. docker集群管理之swarm

    一.简介 docker集群管理工具有swarm.k8s.mesos等,我所用到的是swarm和k8s,这篇文章主要介绍swarm:swarm是docker集成的原生 管理工具,只要你安装上docker ...

  7. Docker集群实验环境布署--swarm【1 架构说明】

    在读完<Docker技术入门与实践>这本书后,基本上已对Docker了有一些入门的理解,以及我们为什么要使用Docker 答:我们发现在实际工作中,通过openstack一旦把一个VM创建 ...

  8. Docker集群管理工具 - Kubernetes 部署记录 (运维小结)

    一.  Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...

  9. Centos下安装Docker集群管理工具Shipyard

    一. Docker Shipyard是什么 ? shipyard是一个开源的docker管理平台,其特性主要包括: 支持镜像管理.容器管理. 支持控制台命令 容器资源消耗监控 支持集群swarm,可以 ...

随机推荐

  1. echarts折线图个性化填充、线条、拐点样式

    由于每组数据的拐点样式.线条颜色都不一样,所以series里的每组数据都需要单独设置样式. 首先先来看一下完成后的效果吧 具体设置如下 series: [ { name:systemName[0], ...

  2. Okhttp对http2的支持简单分析

    在< Okhttp之RealConnection建立链接简单分析>一文中简单的分析了RealConnection的connect方法的作用:打开一个TCP链接或者打开一个隧道链接,在打开t ...

  3. 微信小程序插件使用

    使用插件 小程序开发者可便捷地把插件添加到自己的小程序内,丰富小程序的服务.当用户在使用小程序时,将可以在小程序内使用插件提供的服务. 开放范围 所有小程序 接入流程 在小程序管理后台添加插件 小程序 ...

  4. Nim Game,一个有趣的游戏,也是一道入门算法题。

    Nim Game,其实很多人都玩过.其实就是我们玩的划线游戏. 一张纸上,画若干条线,双方一人划一次,每次划掉1~3条线.可以选择画1条,也可以划2条,也可以3条.具体划去几条线完全看自己的策略.谁划 ...

  5. OpenCV 图像旋转实现

    1 旋转矩形 首先建议阅读图像旋转算法原理-旋转矩阵,这篇博客可以让你很好地理解图像中的每一个点是如何进行旋转操作的.其中涉及到了图像原点与笛卡尔坐标原点之间的相互转换以及点旋转的一些公式推导. 这里 ...

  6. C#反射 字符串转为实体类,并做为参数传入泛型方法中使用

    工作中有这样一个需求,有N张不同的报表,每张报表对应一个数据源,统计数据采用内存方式,首先在内在里定义了数据源对应实体.统计条件用lamdba表达式式实现,通过工具对单元格进行定义.在实现过程中针对每 ...

  7. [LeetCode&Python] Problem 136. Single Number

    Given a non-empty array of integers, every element appears twice except for one. Find that single on ...

  8. Tomcat问题:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined ,At least one of these environment variable is needed to run this program

    一眼就能看出来是jdk的环境有问题,但是用了这么久的jdk一直都配置的好好的,怎么一到Tomcat上就这么矫情了. 最后查解决方案,原来是我的jdk从官网直接下载的,虽然我修改了java_home,但 ...

  9. poj-1112 (二分图染色+dp分组)

    #include <iostream> #include <algorithm> #include <cstring> using namespace std; ; ...

  10. 【转】Python xlrd、xlwt、xlutils读取、修改Excel文件

    Python xlrd.xlwt.xlutils读取.修改Excel文件 一.xlrd读取excel 这里介绍一个不错的包xlrs,可以工作在任何平台.这也就意味着你可以在Linux下读取Excel文 ...