Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一 的,虚拟的主机。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的DockerClient(docker client in go, docker_py, docker等)均可以直接与Swarm通信。Swarm几乎全部用Go语言来完成开发。
Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只是接受docker客户端发送过来的请求, 调度适合的节点来运行容器,这意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,当Swarm重新恢复运行之后,它会收集重建集群信 息。下面是Swarm的结构图:
集群的搭建:
环境:
os:centos-7.1_x86_64
物理机两台64位:10.10.40.45(master),10.10.40.47(slave)
docker:docker-1.7.1-115.el7.x86_64
搭建过程如下:
1. 安装centos-7.1系统(我用CentOS-7-x86_64-DVD-1503-01.iso光盘的方式安装的)
2. 安装docker:
============
# yum install –y docker
===============
安装swarm:
===========
#docker pull swarm
===========
3. 修改:docker的deviceMapper 的driver模式改为:overlay
(1.)停止docker并移除默认的容器和镜像:
=============
# systemctl stop docker
# rm -rf /var/lib/docker
=============
(2.)修改/etc/sysconfig/而配置文件将OPTIONS='--selinux-enabled' 改为:
OPTIONS='--selinux-enabled=false'
(3.)修改:/etc/sysconfig/docker-storage配置文件,将DOCKER_STORAGE_OPTIONS项改为:DOCKER_STORAGE_OPTIONS= -s overlay,如果有其他的DOCKER_STORAGE_OPTIONS配置项,则将其注释掉。
(4).再次重新启动docker:
==============
systemctl start docker
==============
(5) 执行:docker info命令显示如下(Storage Driver 改为overlay):
[[[[=========
]]]]=========
4. 创建(master 主机上执行,我的主机为:10.10.40.45)swarm token:
===============
docker run –rm swarmcreate
===============
Show:
生成的token值必须记下后续会用到(我的token值为: 921f487a6489543a5d232d48287f8a0f)
5. 分别在主机和丛机上启动监听进程:
10.10.40.45主机(master):
Show:
10.10.40.47主机(slave):
Show:
6. 在主机(master)上分别注册节点:
10.10.40.45节点
==========
docker run -dswarm join --addr=10.10.40.47:2375 token://921f487a6489543a5d232d48287f8a0f
==========
10.10.40.47节点:
==========
docker run -dswarm join --addr=10.10.40.45:2375 token://921f487a6489543a5d232d48287f8a0f
==========
Show:
7. 在主机上(master)启动管理节点:
===========
docker run -d -p:2375 swarm manage token://921f487a6489543a5d232d48287f8a0f
==========
Show:
8. 查看swarm的集群的情况(在主机上执行命令):
(1.)列出节点列表:
===============
docker run --rmswarm list token://921f487a6489543a5d232d48287f8a0f
===============
(2.)列出详细信息:
============
docker -Htcp://10.10.40.45:2375 info
============