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