docker-swarm笔记

1.部署环境:

centos7
建立三节点的 swarm 集群
swarm-manager 是 manager node : 192.168.1.150
swarm-worker1 和 swarm-worker2 是 worker node: 192.168.1.151,192.168.1.152

 

2.部署docker

Docker v1.12+
安装:https://www.cnblogs.com/hanxiaohui/p/8514941.html
注意:3个节点都须要安装,而且修改docker默认的家目录

3.部署docker-swarm

原文地址: http://www.cnblogs.com/CloudMan6/p/7862254.html

3.1在 swarm-manager 上执行以下命令建立 swarm:


docker swarm init --advertise-addr 192.168.1.150
命令说明:
--advertise-addr 指定与其余 node 通讯的地址。
docker swarm init 输出告诉咱们:
① swarm 建立成功,swarm-manager 成为 manager node。
② 添加 worker node 须要执行的命令。
③ 添加 manager node 须要执行的命令

 

3.2 添加worker

若是当时没有记录下 docker swarm init 提示的添加 worker 的完整命令,能够经过如下命令查看
docker swarm join-token worker 

上条命令执行的结果 在node上执行。

3.3 查看集群

docker node ls

 

4.service相关的操做

######建立网络

######建立网络
  docker network create -d overlay --attachable my-network #建立overlay网络

######用 Label 控制 Service 的位置

定义lable
  docker node update --label-add env=test swarm-worker1
  命令说明:
  swarm-worker1是node的名字

######查看lable

docker node inspect swarm-worker1 --pretty

######建立service

docker service create -d -p 28002:28002 --mount type=bind,src=/mnt/qmsUpload,dst=/usr/local/src --replicas 2 --name first-mysql --network my-network  --constraint 'node.labels.env=test' mysqld:5.6
  命令说明:
  -d 默认是true(这个参数可要可不要)
  -p 端口映射 至关于 --publish
  --mount 挂载磁盘
  --replicas 副本数
  --name  service名
  --network 指定网络
  --constraint 指定在哪一个work启动副本,须要给节点定义lable
  mysqld:5.6 指定镜像

######查看service

docker service inspect first-mysql --pretty

######service副本伸缩

  docker service scale first-mysql=5 或 docker service update --replicas 6
  命令说明:
  first-mysql是service名,伸缩只要修改数量就行。

######不让manager node运行副本

  默认配置下 manager node 也是 worker node,因此 swarm-manager 上也运行了副本。若是不但愿在 manager 上运行 service,能够执行以下命令
  docker node update --availability drain swarm-manager
  命令说明: swarm-manager是node名,node名 是跟系统的hostname同样的

  docker node ls  #查看AVAILABILITY列  swarm-manager那台node的 值变为 drain

######删除service

docker service rm web_server  #docker service rm 删除 web_server,service 的全部副本(容器)都会被删除

 

  ######从外部访问service

  端口映射
  1.建立service是有用-p 映射

  2.后期添加映射
  docker service update --publish-add 8080:80 web_server

  3.  curl 集群中任何一个节点的 8080 端口,都可以访问到 web_server

######service 服务发现

  http://www.cnblogs.com/CloudMan6/p/7967419.html

  直接使用 ingress 行不行?ingress是docker-swarm集群建好后就有的
  很遗憾,目前 ingress 没有提供服务发现,必须建立本身的 overlay 网络 (在manager上建立)

 

######滚动更新service

  docker service update --image httpd:2.2.32 my_web
  说明:
  --image 指定新的镜像
  my_web 是service的名字
  步骤:
  1.中止第一个副本。
  2.调度任务,选择 worker node。
  3.在 worker 上用新的镜像启动副本。
  4.若是副本(容器)运行成功,继续更新下一个副本;若是失败,暂停整个更新过程。

  例子:
  docker service update --replicas 6 --update-parallelism 2 --update-delay 1m30s my_web  #service
增长到六个副本,每次更新两个副本,间隔时间一分半钟。

 

######回滚更新

docker service update --rollback my_web #快速恢复到更新以前的状态

######replicated mode vs global mode

  globalmode,其做用是强制在每一个 node 上都运行一个且最多一个副本
  例子:
  docker service create \
       --mode global \
       --name logspout \
       --mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock \
       gliderlabs/logspout

 

######健康检查

  http://www.cnblogs.com/CloudMan6/p/8053323.html
相关文章
相关标签/搜索