准备工作
- 安装docker,版本最低1.13
- 准备 Docker Compose,Docker for Mac 以及 Docker for Windows 都已经预装了compose。linux系统需要自己安装,官方安装教程。
- 了解docker安装启动
- 了解构建第一个docker应用
- 确保在上一节创建的friendlyhello已经发布到registry
- 确保friendlyhello可以被pull,并能正常使用
- 复制第三部分的
docker-compose.yml
介绍
在第三节中,我们使用了第二节写的应用,并定义了它在线上的运行方式,然后启动了5个实例。
在这一节中,我们将这个应用部署到多机集群中,正式步入swarm模式,多机、多容器的应用。
理解 Swarm clusters
Swarm是什么?Swarm就是一组运行docker的机器,并联合成为一个集群。当启动Swarm集群之后,docker命令会通过Swarm manager执行在整个集群之上。Swarm集群的机器可以是物理机,也可以是虚拟机,当加入Swarm集群之后,被称为nodes。
Swarm managers有两种不同的方式运行container:第一种emptiest node,尽量使用少的机器部署容器;第二种global,确保每一台机器上都会运行一个容器的实例。可以在docker-compose.yml
中指定运行的模式。
Swarm managers是集群的核心控制节点,它负责执行命令,授权新机器加入集群。Worker节点只负责提供资源。
到目前为止,你已经学会在单机使用docker容器。docker可以很方便的切换为 swarm mode,切换的命令是docker swarm init
,一旦切换为 swarm mode后,当前的机器角色就变为Swarm managers。
设置你的swarm集群
创建cluster
在本机上使用VM创建集群,我使用的Mac操作系统,接下来演示在Mac上创建swarm集群。
首先,需要安装虚拟机,在Mac上需要下载 Oracle VirtualBox。
使用docker-machine
创建多个虚拟机
docker-machine create –driver virtualbox myvm1
docker-machine create –driver virtualbox myvm2
使用docker-machine ls
列出所有的虚拟机
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
myvm1 - virtualbox Running tcp://192.168.99.100:2376 v17.09.0-ce
myvm2 - virtualbox Running tcp://192.168.99.101:2376 v17.09.0-ce
接下来,开始初始化swarm,将myvm1设置为manager,并向集群中加入节点。
|
|
添加worker节点
|
|
2377 vs 2376
注意docker swarm init
和docker swarm join
运行的端口号是2377
,或者不指定端口,使用默认端口。docker-machine ls
返回的端口是2376
,这个端口是docker deamon
的端口。
在swarm manager
上执行docker node ls
检查集群运行情况
|
|
如果看到以上输出信息,恭喜你,你已经启动成功。
使用docker swarm leave
推出swarm集群
|
|
部署service到swarm cluster
当此最复杂的部分已经学习完,接下来重复在第三节的操纵,把service部署到集群中。记住,只有swarm manager也就是myvm1可以执行docker命令。每一次连上swarm manager都需要执行docker-machine ssh
比较麻烦,我们一个使用另外一种替代方案。使用docker-machine env <machine>
配置当前shell连接到在虚拟机上的Docker daemon
。
|
|
执行eval $(docker-machine env myvm1)
配置当前的shell连接myvm1
|
|
执行docker-machine ls
验证myvm1生效。
|
|
可以看到myvm1是active。
接下来,通过swarm manager将服务部署到集群上,
|
|
检查服务的启动情况
|
|
清理工作
停止service的命令
docker stack rm getstartedlab
停止swarm manager
docker swarm leave –force
Ok,你已经在生产环境上操作swarm进行服务的上线,扩容,下线的整个过程。
清理宿主机的shell环境
|
|