Docker入门(四)-swarm

一、准备工作

  • 安装Docker
  • 理解并安装Docker Compose
  • 理解并安装docker machine
  • 保证看过入门(一)、(二)、(三)部分,并且对其文中例子都有实操
  • 注册docker仓库

二、介绍

  在这一部分,你将学会如何将应用部署到集群里,并且运行在多个宿主机上。Swarm可以帮助我们实现在多容器多机器上部署服务。
  Swarm是一个运行着Docker集群,我们可以通过Docker命令来控制这个集群,不过你只能通过swarm manager来下令命令。集群中的机器可以是物理机也可以是虚拟机,当它们加入至swarm之后,这些机器都是一个节点。

Swarm Manager会使用几种策略来运行容器,诸如:
  • “empliest node(最空节点)” :选择使用率最低的节点来运行容器
  • "Global(全局“):确定每个节点至少有一个容器在运行
     你可以在compose文件里指定这些策略。
     Swarm Manager仅对那些加入swarm的机器执行你的指令,还可以授权其他节点成为swarm的工作节点。工作节点是指那些只提供资源无授权能力的节点。

三、配置你的Swarm

 Swarm可以由多个节点组成,这些节点可以是物理机也可以是虚拟机。运行如下指令开启swdoarm节点:docker swarm init 并把运行该命令的机器作为warm的管理节点,然后在其他宿主机或虚拟机上运行 docker swarm join 加入到这个swarm集群中并成为工作节点。

  • 创建集群

    1. 至少有两个虚拟机(如果没有,可以用VisualBox构建两台虚拟机)
      我们可以在阿里云或其他云平台上构建虚拟机,然后用Machine进行远程管理Docker,官方提供的[generic driver]https://docs.docker.com/machine/drivers/generic/?spm=a2c4e.11153940.blogcont7495.9.609623609q2Uui),可通过ssh管理现有的机器,原则上所有的Linux机器都支持。
      下面我们以阿里云的ECS为例说明如何用Machine管理Docker。

    2.docker-machine的ssh只支持基于public key认证,而阿里云创建虚拟机时只支持通过密码登录,所以还需要配置Public Key。

  export ECS_IP=x.x.x.x #阿里ECS的IP地址
  docker-machine create --driver generic --generic-ip-address=x.x.x.x    
  aliyun-machine-1

docker-machine create --driver generic --generic-ip-address=x.x.x.x     
  aliyun-machine-2

3、列出被管理的docker主机的个数
docker-machine ls
例如:
4、初始化swarm并且增加节点

#  aliyun-machine-1作为管理节点(先执行docker swarm init命令的那台虚拟机将是管理机,其他则是工作机)
#登录aliyun-machine-1,并初始化swarm
$ docker-machine ssh aliyun-machine-1 "docker swarm init"

#如果提示失败需要增加-advertise-addr
#初始化成功以后,会返回一个提示信息,告诉你怎么加入这个集群
#增加一个工作节点 docker swarm join -token  : 
$ docker-machine ssh aliyun-machine-2 "docker swarm join --token  :"

使用docker-machine ssh aliyun-machine-1登录aliyun-machine-1主机上,使用docker node ls可以查看当前swarm集群中所有的节点

&docker-machine ssh aliyun-machine-1 "docker node ls"

ID            HOSTNAME    STATUS          AVAILABILITY        MANAGER STATUS
xxx1     aliyun-machine-2 Ready               Active
xxx2 *   aliyun-machine-1 Ready               Active              Leader

在Swarm Manager中部署应用

最难的部分已完成,现在开始同第(三)节一样部署应用。首先将之前准备好的docker-compose.yml复制一份到aliyun-machine-1部署应用,可以用如下命令

docker-machine scp docker-compose.yml aliyun-machine-1:~

我们要开始使用swarm来部署啦!同样还是docker stack deploy:

docker-machine ssh aliyun-machine-1"docker stack deploy -c docker-compose.yml helloApp"

结束了。

  • 让我们再来看看容器吧
$ docker stack ps helloApp

ID        NAME                IMAGE                 NODE        DESIRED STATE
xxx1   helloApp_web.1  john/get-started:part2  aliyun-machine-1 Running
xxx2  helloApp_web.2   john/get-started:part2  aliyun-machine-2 Running
xxx3  helloApp_web.3   john/get-started:part2  aliyun-machine-2 Running
xxx4  helloApp_web.4   john/get-started:part2  aliyun-machine-1 Running
xxx5 helloApp_web.5   john/get-started:part2  aliyun-machine-2 Running

访问集群

我们可以通过 aliyun-machine-1和 aliyun-machine-2的IP地址来访问应用,他们之间的网络是共享的,容器间是负载均衡的。你可以使用docker-machine ls查看ip。我们从浏览器打开应用时,控制台的状态不断的在刷新,因为是负载均衡的。

Docker入门(四)-swarm_第1张图片
image.png

伸缩应用

和第(三)篇一样,你只需要修改docker-compose.yml,然后再执行docker stack deploy即可,swarm会自动调整配置。同样我们可以再建几个虚拟机加入到该集群中,只要重新运行docker stack deploywarm会把新的节点利用起来。

关闭应用

关闭应用docker-machine ssh aliyun-machine-1 "docker stack rm helloApp"
让节点脱离swarm集群:docker-machine ssh aliyun-machine-2 "docker swarm leave"
关闭管理节点:docker-machine ssh aliyun-machine-1 "docker swarm leave --force"




参考

https://docs.docker.com/get-started/part4/
https://blog.dubby.cn/detail.html?id=8738

你可能感兴趣的:(Docker入门(四)-swarm)