Swarm是Docker的一个编排工具,在之前我们只是在一台机器来进行docker的管理:
但是有时容器并不一定都在一台主机上,如果是分布式的处于多台主机上,这时就可以借助于Swarm,Swarm是Docker自带的编排工具,只要你安装了Docker就会存在Docker Swarm工具。
Swarm中的模式是有两大类节点,一类是manager节点,另一类是worker节点,manager节点相当于对服务的创建和调度,worker节点主要是运行容器服务,当然manager节点也是可以运行的。
manager节点状态、信息的同步根据Raft consensus group的网络进行通信同步的,而worker之间的通信依靠的是Gossip network做到的。
另外一个重要的概念就是service,我们可以在一个manager节点上创建一个服务,但是可以根据这一个服务创建多个容器的任务,这些容器任务运行在不同的节点上。
那么如何进行Swarm集群的搭建呢?
- 在swarm模式下初始化一个Swarm集群,并且将当前主机加入到该集群作为manager节点
- 加入其它节点到该集群中
- 部署service到该集群中
三种方式:建议第一种,我也只试了第一种。
1. Vagrant + Virtualbox
1. 先初始化manager的cluster,宣告地址
1. docker swarm init --advertise-addr=192.168.205.10
2. 添加worker到manage cluster
1. docker swarm join --token SWMTKN-1-5zj189y4mz8yttawc6jlq1vb86hcu4lbzzo1nts1yzu7d9teaa-7g0w1oyppjynrqki1zy1pk3xi 192.168.205.10:2377
2. Docker Machine + Virtualbox
1. docker-machine creat swarm-manager
2. docker-machine creat swarm-work1
3. docker-machine creat swarm-work2
4. 之后和Vagrant + Virtualbox的方法一样了
3. Play with docker https://labs.play-with-docker.com/
第一种:
docker swarm --help
docker swarm init --help
检查防火墙 systemctl status firewalld.service
关闭防火墙 systemctl stop firewalld.service
永久关闭 systemctl disable firewalld.service
初始化Manager
docker swarm init --advertise-addr=192.168.126.131
work节点加入(初始化Manager后会输出下面这条指令)
docker swarm join --token SWMTKN-1-37yp1apign9310smt9bf39xo3czj1w6img5pa6l5gaoy23ics6-1zdbn8kz6rnzjmn6h4z95r0w6 192.168.126.131:2377
查看节点
docker node ls
第二种
安装VirtualBox
1. 首先下载oracle_vbox.asc文件到本地: wget -q https://www.virtualbox.org/download/oracle_vbox.asc 再执行import: sudo rpm --import oracle_vbox.asc
cd 进入目录:/etc/yum.repos.d
vim virtualbox.repo
[virtualbox] name=Oracle Linux / RHEL / CentOS-$releasever / $basearch - VirtualBox baseurl=http://download.virtualbox.org/virtualbox/rpm/el/$releasever/$basearch enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc
yum install VirtualBox-5.2 -y
安装docker-machine:
base=https://github.com/docker/machine/releases/download/v0.16.0 && curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && sudo mv /tmp/docker-machine /usr/local/bin/docker-machine && chmod +x /usr/local/bin/docker-machine
验证docker-machine:
docker-machine version