关于Docker Swarm更多的介绍请查看《Docker管理工具-Swarm部署记录

一、环境配置

1、安装环境

# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
# docker version
Client:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built:
OS/Arch: linux/amd64 Server:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built:
OS/Arch: linux/amd64

2、安装iptables,并关闭firewall防火墙,

# yum install iptables-services -y &&  systemctl enable iptables &&  service iptables save
# systemctl disable firewalld.service
# systemctl stop firewalld.service

关闭firewall防火墙,如果不开启iptables nat,Docker容器将无法正常启动。

  • 运行 sudo iptables -L | grep DOCKER 若输出

    DOCKER     all  --  anywhere             anywhere
    Chain DOCKER (1 references)

    则没问题。

  • 否则,运行 iptables-save > /etc/sysconfig/iptables 并编辑添加相应的内容:

    • *nat
      :PREROUTING ACCEPT [27:11935]
      :INPUT ACCEPT [0:0]
      :OUTPUT ACCEPT [598:57368]
      :POSTROUTING ACCEPT [591:57092]
      :DOCKER - [0:0]
      -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
      -A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
      -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
      COMMIT
      # Completed on Sun Sep 20 17:35:31 2015
      # Generated by iptables-save v1.4.21 on Sun Sep 20 17:35:31 2015
      *filter
      :INPUT ACCEPT [139291:461018923]
      :FORWARD ACCEPT [0:0]
      :OUTPUT ACCEPT [127386:5251162]
      :DOCKER - [0:0]
      -A FORWARD -o docker0 -j DOCKER
      -A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
      -A FORWARD -i docker0 ! -o docker0 -j ACCEPT
      -A FORWARD -i docker0 -o docker0 -j ACCEPT
      COMMIT
      # Completed on Sun Sep 20 17:35:31 2015

3、所有主机节点docker开启2375监听,docker版本不同,配置方式不一样

vim /etc/sysconfig/docker

......
OPTIONS='-H 0.0.0.0:2375 -H unix:///var/run/docker.sock' //在OPTIONS参数项后面的''里添加内容

或者

# cat  /usr/lib/systemd/system/docker.service  |grep ExecStart
ExecStart=/usr/bin/dockerd -H 0.0.0.0:2375 -H unix:///var/run/docker.sock

重启docker服务

systemctl daemon-reload    ##使配置文件生效
systemctl restart docker

二、Swarm安装和集群创建

1、Swarm镜像下载

# docker pull swarm
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/swarm latest 36b1e23becab 4 months ago 15.85 MB

2、创建Swarm

# docker swarm init --advertise-addr  192.168.23.56:2377
Swarm initialized: current node (4cejtuairtof6d0wjq88merwb) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \
--token SWMTKN-1-3kntv9pmgo1w2uk4yqk79v0lw0z35uw2k5j6rw7cns2v0xv3tn-2zqnn7e2zf1azaad2teeh9arw \
192.168.23.56:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

上面命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的 token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值。

其中,--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。命令的输出包含了其它节点如何加入集群的命令。

3、添加集群节点

[root@kbsonlong ~]# docker swarm join \
> --token SWMTKN-1-3kntv9pmgo1w2uk4yqk79v0lw0z35uw2k5j6rw7cns2v0xv3tn-2zqnn7e2zf1azaad2teeh9arw \
> 192.168.23.56:2377
This node joined a swarm as a worker.

4、查看集群节点

[root@along ~]# docker node list
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
4cejtuairtof6d0wjq88merwb * along.party Ready Active Leader
9388mi6e3fnk9l70g24cljhr5 kbsonlong Ready Active
[root@along ~]# docker node list
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
4cejtuairtof6d0wjq88merwb * along.party Ready Active Leader
9388mi6e3fnk9l70g24cljhr5 kbsonlong Ready Active //将kbsonlong 节点下线。如果要删除node1节点,命令是"docker node rm --force kbsonlong "
[root@along ~]# docker node update --availability drain kbsonlong
kbsonlong
[root@along ~]# docker node list
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
4cejtuairtof6d0wjq88merwb * along.party Ready Active Leader
9388mi6e3fnk9l70g24cljhr5 kbsonlong Ready Drain
[root@along ~]#
//可以看到kbsonlong节点状态变为Drain,那么该节点就不会接受task任务分发,就算之前已经接受的任务也会转移到别的节点上。 //再次修改为active状态(及将下线的节点再次上线)
[root@along ~]# docker node update --availability active kbsonlong
kbsonlong
[root@along ~]# docker node list
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
4cejtuairtof6d0wjq88merwb * along.party Ready Active Leader
9388mi6e3fnk9l70g24cljhr5 kbsonlong Ready Active
[root@along ~]#

##关于Swarm更多的命令行操作,请查看《Docker管理工具-Swarm部署记录

三、Swarm 的Web管理(PortainerShipyard、Docerkui)

1、Portainer安装

# docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
-d 参数以detach方式运行
-p 将容器工作端口映射至物理机端口 HOST端口:容器端口
-v 将容器目录挂载(映射)到物理机对应位置,这里指定通讯方式为sock
portainer/portainer 为镜像名称 portainner 也支持用TCP通讯,启动命令
# docker run -d -p 9000:9000 portainer/portainer -H tcp://<REMOTE_HOST>:<REMOTE_PORT>

优点
  1. 支持容器管理、镜像管理
  2. 轻量级,消耗资源少
  3. 基于docker api,安全性高,可指定docker api端口,支持TLS证书认证。
  4. 支持权限分配
  5. 支持集群
缺点
  1. 功能不够强大。
  2. 容器创建后,无法通过后台增加端口。

2、Shipyard

一键安装脚本

curl -sSL https://shipyard-project.com/deploy | bash -s

注意:由于Shipyard使用shipyard-proxy代理容器,所以需要把docker配置的tcp 0.0.0.0:2375关闭

[root@kbsonlong ~]# docker ps -a |grep shi
7122d3f37464 shipyard/shipyard:latest "/bin/controller --de" About an hour ago Up About an hour 0.0.0.0:8080->8080/tcp shipyard-controller
b350b117d76d swarm:latest "/swarm j --addr 172." About an hour ago Up About an hour 2375/tcp shipyard-swarm-agent
a7feb0759efe swarm:latest "/swarm m --replicati" About an hour ago Up About an hour 2375/tcp shipyard-swarm-manager
3e784b0b2140 shipyard/docker-proxy:latest "/usr/local/bin/run" About an hour ago Up About an hour 0.0.0.0:2375->2375/tcp shipyard-proxy
49f9700f0811 alpine "sh" About an hour ago Up About an hour shipyard-certs
7fe4c0e821c1 microbox/etcd:latest "/bin/etcd -addr 172." About an hour ago Up About an hour 0.0.0.0:4001->4001/tcp, 0.0.0.0:7001->7001/tcp shipyard-discovery
e3750c5de7e2 rethinkdb "rethinkdb --bind all" About an hour ago Up About an hour 8080/tcp, 28015/tcp, 29015/tcp shipyard-rethinkdb
[root@kbsonlong ~]#

可以看到启动了7个Shipyard相关的容器

1、shipyard-rethinkdb  :数据存放

2、shipyard-discovery :自动发现

3、shipyard-certs:认证

4、shipyard-proxy:代理

5、shipyard-swarm-manager: swarm管理节点

6、shipyard-swarm-agent: swarm 工作节点 work

7、shipyard-controller:shipyard控制台,即Web页面

2、添加Swarm work节点,使用Shipyard时添加Swarm节点有点不一样

curl -sSL https://shipyard-project.com/deploy | ACTION=node DISCOVERY=etcd://10.0.1.10:4001 bash -s
ACTION

This controls the action for the deployment. Available options are:

  • deploy: Deploy a new Shipyard instance
  • upgrade: Upgrade an existing instance (note: you will need to pass the same environment variables as when you deployed to keep the same configuration)
  • node: Add current Docker engine as a new Swarm node in the cluster
  • remove: Completely removes Shipyard

DISCOVERY自动发现

etcd://10.0.1.10:4001  管理节点上的自动发现服务

:8080">:8080">:8080">:8080">http://<server_ip>:8080  admin/shipyard

优点:
  1. 支持镜像管理、容器管理。
  2. 支持控制台命令
  3. 容器资源消耗监控
  4. 支持集群swarm,可以随意增加节点
  5. 支持控制用户管理权限,可以设置某个容器对某个用户只读、管理权限。
  6. 有汉化版
缺点
  1. 启动容器较多,占用每个节点的一部分资源,

创建的Swarm集群无法使用Swarm service功能

Docker 集群Swarm创建和Swarm Web管理的更多相关文章

  1. docker swarm的应用----docker集群的构建

    一.docker安装 这里我们安装docker-ce 的18.03版本 yum    -y remove docker  删除原有版本 #安装依赖包 [root@Docker ~]# yum -y i ...

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

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

  3. Docker Swarm搭建多服务器下Docker集群

    对于有多台服务器来讲,如果每一台都去手动操控,那将会是一件非常浪费时间的事情,毕竟时间这东西,于我们而言,十分宝贵,或许在开始搭建环境的时候耗费点时间,感觉是正常的,我也如此,花费大堆时间在采坑和填坑 ...

  4. docker探索-swarm搭建docker集群(七)

    前言 Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令,docker s ...

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

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

  6. Docker集群管理(一)—— 基础docker+swarm+shipyard

    目的 学习docker的集群管理,摸索出高可用的docker微服务架构方案.本篇文章只初步的了解下swarm(docker新版已集成了swarm)的使用,了解docker的发现服务的基础方法(dock ...

  7. docker集群管理之swarm

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

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

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

  9. Shell脚本实现---Swarm集群部署实例(Swarm Cluster)

    Shell脚本实现---Swarm集群部署实例(Swarm Cluster) 一.机器环境(均是centos7.8) IP hostname 角色 192.168.10.200 manager-swa ...

  10. Docker 集群环境实现方式

    Docker 集群环境实现的新方式 近几年来,Docker 作为一个开源的应用容器引擎,深受广大开发者的欢迎.随着 Docker 生态圈的不断建设,应用领域越来越广.云计算,大数据,移动技术的快速发展 ...

随机推荐

  1. html-列表-3

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Linux常用命令行补充——持续更新

    1.查看文件夹大小 =>ls -lht 路径 ls -lht /opt/jars 2.查看文件大小 =>du -sh / du -sh /opt/jars/calllog.csv 3.编辑 ...

  3. HDU-1009的解题报告

    Hdu-1009 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1009 题意:Fatmouse准备M磅的猫食,准备与猫守卫仓库有他最爱吃的食品贸易,J ...

  4. [译] Go数据结构-接口

    原文 Go Data Structures: Interfaces 作者 Russ Cox 声明:本文目的仅仅作为个人mark,所以在翻译的过程中参杂了自己的思想甚至改变了部分内容.但由于译者水平有限 ...

  5. Java内存管理-掌握虚拟机类加载机制(四)

    勿在流沙筑高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 上一篇介绍了整个JVM运行时的区域,以及简单对比了JDK7和JDK8中JVM运行时区域 ...

  6. VBA调用DOS程序两种方法

    Set wsh = VBA.CreateObject("WScript.Shell") 'wsh.Run strExePath & " g", vbHi ...

  7. 匪警请拨110——C++

    问题描述 匪警请拨110,即使手机欠费也可拨通! 为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练! 某批警察叔叔正在进行智力训练: 1 ...

  8. 潭州课堂25班:Ph201805201 django 项目 第十三课 短信验证码后台的实现 (课堂笔记)

    d 发送短信验证码之前,后台要得到三个参数 : 1,用户手机吗,, 2,用户输入的图片验证文本, 3,前台的 uuid , 在60秒内是否有发送短信的记录 只有用户输入的手机号,文本信息与 uudi ...

  9. GPIO知识点整理

    //GPIO的作业,抄两次,注意:本文件是知识点的整理不是可以直接运行的程序. //STM32必须包含的头文件 #include "stm32f10x.h" //GPIO相关头文件 ...

  10. 关于linux kernel slab内存管理的一点思考

    linux kernel 内存管理是个很大的话题,这里记录一点个人关于slab模块的一点思考总结. 有些书把slab介绍成高速缓存,这会让人和cache,特别是cpu cache混淆,造成误解.sla ...