憨豆说安全 · 2020年08月11日

云芯一号教程 - Docker SWARM配置集群服务教程

  Docker是一个开源的基于LXC的高级容器引擎,我们可以把应用以及依赖包打包到一个镜像中,发布到支持Docker的 Linux或Windows 机器上,实现虚拟化。
  服务器集群是应对用户量增长的必要方法,Docker支持用docker swarm命令来管理docker集群。Docker集群是指通过把多个docker engine聚集在一起,形成一个大的docker engine,对外提供容器的集群服务。同时这个集群对外提供Swarm API,用户可以像使用docker engine一样使用docker集群。

1.Docker Swarm介绍
  Docker Swarm是Docker公司推出的用来管理docker集群的平台,可以将一群Docker宿主机变成一个单一的虚拟主机,Swarm使用标准的Docker API接口作为前端的访问入口,各种形式的Docker Client均可以直接与Swarm通信。
  Swarm deamon只是一个调度器(Scheduler)加路由器(router),本身不运行容器,它只是接受Docker客户端发来的请求,调度适合的节点来运行容器。即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,当Swarm重新恢复运行后,会重建集群信息。
  Swarm集群中有两种节点:管理节点(manager nodes)和工作节点(worker nodes)。管理节点执行集群的管理功能,维护集群的状态;工作节点接收和执行任务,并参与集群的负载调度。

  Swarm的常用命令有3类:
  1) 集群管理命令

   docker swarm init/join/leave/update

  2) 服务管理命令

   docker service create/inspect/update/remove/tasks

  3) 节点管理命令

   docker node accept/promote/demote/inspect/update/tasks/ls/rm

2.Swarm集群搭建
  准备两块安装好docker的开发板,一台作为作为manager节点,一台作为worker节点。
  其中:
  manager节点的ip地址是: 192.168.1.4
  worker节点的ip地址是: 192.168.1.5

2.1 初始化swarm
  在manager节点上初始化swarm。

  jishu@Jishu:~$ sudo docker swarm init
  Swarm initialized: current node (wx1rdqx8xqzc0libigcblb2rj) is now a manager.
  
  To add a worker to this swarm, run the following command:
  
  docker swarm join --token SWMTKN-1-00ffwd7g2u2vawgkhl0dww0480pwwpyjsuluicbmdb6oqsbxpz-1warpp43hpe6oz5xpjtpidmdb 192.168.1.4:2377
  
  To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

  初始化结束后,会生成集群token,这个token是该集群的唯一标记。worker节点需要用这个集群token来加入到集群中。

2.2 添加worker节点
  在worker节点上执行docker swarm join命令,加入集群。

  jishu@Jishu:~$ sudo docker swarm join --token SWMTKN-1-00ffwd7g2u2vawgkhl0dww0480pwwpyjsuluicbmdb6oqsbxpz-1warpp43hpe6oz5xpjtpidmdb 192.168.1.4:2377
  This node joined a swarm as a worker.

  在manager节点上查看集群内的节点,可以看到有了两个节点。

  jishu@Jishu:~$ sudo docker node ls
  ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
  yyhzfgpll80oshvze4j9bqntm     Jishu               Ready               Active                                  19.03.8
  wx1rdqx8xqzc0libigcblb2rj *   Jishu               Ready               Active              Leader              19.03.8                            
  

  如果要添加其他manager节点,token与工作节点的字符串不同。需要在当前manager节点上执行以下命令:

  jishu@Jishu:~$ sudo docker swarm join-token manager
  To add a manager to this swarm, run the following command:
  
  docker swarm join --token SWMTKN-1-00ffwd7g2u2vawgkhl0dww0480pwwpyjsuluicbmdb6oqsbxpz-dfl7zmduxxt0wh82ovitcpbsu 192.168.1.4:2377

  并在新增的manager节点执行docker swarm join命令。
  由于目前只有两个节点,所以不添加额外的manager节点。

2.3 创建集群服务
  给集群创建nginx WEB服务,创建命令如下:

  docker service create --replicas 2 -p 8053:80 --name nginx-test-2 nginx

  其中:
  -replicas 参数:指运行实例个数,集群中有两个节点,因此设置为2
  -p参数:端口映射,将集群中节点的8053端口映射到容器内部的80端口
  --name参数:集群服务的名称,设置为nginx-test-2
  最后一个参数nginx是指使用的nginx镜像

  jishu@Jishu:~$ sudo docker service create --replicas 2 -p 8053:80 --name nginx-test-2 nginx
  0qaotc2ci19n2f6ppq7q2r3as
  overall progress: 2 out of 2 tasks 
  1/2: running   [==================================================>] 
  2/2: running   [==================================================>] 
  verify: Service converged 

  创建完成后,可以用docker service ls命令查看service。

  jishu@Jishu:~$ sudo docker service ls
  ID            NAME          MODE          REPLICAS     IMAGE          PORTS
  0qaotc2ci19n  nginx-test-2  replicated    2/2          nginx:latest   *:8053->80/tcp

  在manager节点上查看nginx容器实例:

  jishu@Jishu:~$ sudo docker ps -a
  CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
  c32f6bd0625f        nginx:latest        "nginx -g 'daemon of…"   5 minutes ago       Up 5 minutes        80/tcp                 nginx-test-2.2.ql90wmzklbxa8woocuckmuak3
  472ffc1e3996        nginx               "/docker-entrypoint.…"   2 hours ago         Up 2 hours          0.0.0.0:8052->80/tcp   nginx-test-1
  292df1d11d48        nginx               "/docker-entrypoint.…"   2 hours ago         Up 2 hours          0.0.0.0:8051->80/tcp   nginx-test

  可以看到新的nginx容器实例创建成功。

用浏览器访问manager节点上新建的nginx WEB服务,http://192.168.1.4:8053,成功!

  在worker节点上查看nginx容器实例:

  jishu@Jishu:~$ sudo docker ps -a
  CONTAINER ID    IMAGE           COMMAND                  CREATED          STATUS           PORTS       NAMES
  1c0e985762c1    nginx:latest    "nginx -g 'daemon of…"   13 minutes ago   Up 13 minutes    80/tcp      nginx-test-2.1.qi5ryylc60e99y5307akjxcwm

  可以看到nginx容器实例创建成功。
  用浏览器访问worke节点上的nginx WEB服务,http://192.168.1.5:8053,成功!

  至此,docker swarm集群创建并配置成功。

推荐阅读
关注数
4278
内容数
71
低成本Arm微服务器开发平台“云芯1号”教程及应用,欢迎关注
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息