阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Docker 1.12 版本 Docker Swarm 集群

456次阅读
没有评论

共计 9764 个字符,预计需要花费 25 分钟才能阅读完成。

docker 1.12 版本 的新特性

(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

(4)docker stack/deploy:试验特性,用于多应用部署,类似与 docker-compose 中的特性。

Docker 1.12 版本 Docker Swarm 集群

我在使用的时候还是 测试版本,所以使用

wget -qO- https://test.docker.com/ | sh

进行安装配置

安装完毕以后:

[root@swarm-manager ~]# docker version
Client:
 Version:      1.12.0-rc2
 API version:  1.24
 Go version:   go1.6.2
 Git commit:   906eacd
 Built:        
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.0-rc2
 API version:  1.24
 Go version:   go1.6.2
 Git commit:   906eacd
 Built:        
 OS/Arch:      linux/amd64

一、我们首先来看看 1.12 中 新特性里面的 内置 swarm 命令(swarmkit 采用 raft 协议构建集群)

[root@swarm-manager ~]# docker swarm --help

Usage: docker swarm COMMAND

Manage Docker Swarm

Options:
--help Print usage

Commands:
init Initialize a Swarm
join Join a Swarm as a node and/or manager
update Update the Swarm
leave Leave a Swarm
inspect Inspect the Swarm

Run 'docker swarm COMMAND --help' for more information on a command.

这里 命令有 5 个

Commands:
init Initialize a Swarm
join Join a Swarm as a node and/or manager
update Update the Swarm
leave Leave a Swarm
inspect Inspect the Swarm

1. init 初始化,一个 Swarm 集群,执行效果:

[root@swarm-manager ~]# docker swarm init
Swarm initialized: current node (0vwpni05mew2j84i6gjet44iu) is now a manager.

这里显示 初始化了一个 Swarm 集群,并把这机器做为 管理节点。

[root@swarm-manager ~]#docker node ls
ID                           NAME                   MEMBERSHIP  STATUS  AVAILABILITY  MANAGER STATUS
0vwpni05mew2j84i6gjet44iu *  swarm-manager          Accepted    Ready   Active        Leader

执行 docker node ls 可以查看 Swarm 的集群情况(只能在 manager 中执行)

[root@swarm-manager ~]# netstat -lan|grep 2377

可以看到 群集开放了一这个 2377 的端口。

默认绑定 0.0.0.0:2377,当然我们也可以使用 docker swarm init –listen-addr <MANAGER-IP>:<PORT> 进行绑定 ip

2377 这个端口是用于 Swarm 中 node 节点加入使使用的。

2. join 加入 Swarm 集群, 可加入做为 node 节点,也可加入 作为 管理节点。

[root@swarm-node-1 ~]#docker swarm join 10.6.0.140:2377
This node joined a Swarm as a worker.

这里在 node-1 里面执行了 join 命令,加入了 10.6.0.140 这个 manager 这个 Swarm 集群里

[root@swarm-manager ~]#docker node ls           
ID                           NAME                   MEMBERSHIP  STATUS  AVAILABILITY  MANAGER STATUS
0vwpni05mew2j84i6gjet44iu *  swarm-manager          Accepted    Ready   Active        Leader
4mqsmp0gzlqeicit98ce8wh2q    swarm-node-1           Accepted    Ready   Active

这里可以看到 node-1 已经加入到 swarm 的集群里面来了。

3. update 命令, 只提示 updated,具体作用尚不明白,应该是立刻刷新 swarm 的群集信息

[root@swarm-manager ~]#docker swarm update
Swarm updated.

4. leave 命令,离开 Swarm 集群,一个 docker 只能加入一个 node.

[root@swarm-node-1 ~]#docker swarm leave 10.6.0.140:2377

5. inspect 命令,查询 Swarm 集群 的整体信息。(只能在 manager 中执行)

[root@swarm-manager ~]#docker swarm inspect
[
    {"ID": "c052zw5ll0ugw08shg2xf7ajp",
        "Version": {"Index": 11
        },
        "CreatedAt": "2016-06-23T02:09:18.935434519Z",
        "UpdatedAt": "2016-06-23T02:09:19.155114277Z",
        "Spec": {"Name": "default",
            "AcceptancePolicy": {"Policies": [
                    {"Role": "worker",
                        "Autoaccept": true
                    },
                    {"Role": "manager",
                        "Autoaccept": false
                    }
                ]
            },
            "Orchestration": {"TaskHistoryRetentionLimit": 10
            },
            "Raft": {"SnapshotInterval": 10000,
                "LogEntriesForSlowFollowers": 500,
                "HeartbeatTick": 1,
                "ElectionTick": 3
            },
            "Dispatcher": {"HeartbeatPeriod": 5000000000
            },
            "CAConfig": {"NodeCertExpiry": 7776000000000000
            }
        }
    }
]

二、接下来我们来看看 service 命令。

[root@swarm-manager ~]#docker service --help

Usage:  docker service COMMAND

Manage Docker services

Options:
      --help   Print usage

Commands:
  create      Create a new service
  inspect     Inspect a service
  tasks       List the tasks of a service
  ls          List services
  rm          Remove a service
  scale       Scale one or multiple services
  update      Update a service

Run 'docker service COMMAND --help' for more information on a command.

1. docker create 命令,既 创建 一个 服务。

[root@swarm-manager ~]#docker service create --help

Usage:  docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]

Create a new service

Options:
      --constraint value             Placement constraints (default [])
      --endpoint-mode string         Endpoint mode(Valid values: VIP, DNSRR)
  -e, --env value                    Set environment variables (default [])
      --help                         Print usage
  -l, --label value                  Service labels (default [])
      --limit-cpu value              Limit CPUs (default 0.000)
      --limit-memory value           Limit Memory (default 0 B)
      --mode string                  Service mode (replicated or global) (default "replicated")
  -m, --mount value                  Attach a mount to the service
      --name string                  Service name
      --network value                Network attachments (default [])
  -p, --publish value                Publish a port as a node port (default [])
      --replicas value               Number of tasks (default none)
      --reserve-cpu value            Reserve CPUs (default 0.000)
      --reserve-memory value         Reserve Memory (default 0 B)
      --restart-condition string     Restart when condition is met (none, on_failure, or any)
      --restart-delay value          Delay between restart attempts (default none)
      --restart-max-attempts value   Maximum number of restarts before giving up (default none)
      --restart-window value         Window used to evalulate the restart policy (default none)
      --stop-grace-period value      Time to wait before force killing a container (default none)
      --update-delay duration        Delay between updates
      --update-parallelism uint      Maximum number of tasks updated simultaneously
  -u, --user string                  Username or UID
  -w, --workdir string               Working directory inside the container

docker service create 里面有非常多的 参数。这里有很详细的使用说明。

下面我们来 创建一个 service 试试看

首先 pull 一个 nginx 镜像 下来 用于 测试

[root@swarm-manager ~]#docker pull nginx

创建 2 个 nginx :

[root@swarm-manager ~]#docker service create --name nginx --replicas 2 -p 80:80/tcp nginx

使用 docker service ls 可查看 服务 启动情况。

[root@swarm-manager ~]#docker service ls
ID            NAME   REPLICAS  IMAGE  COMMAND
1b9a58mlz330  nginx  1/2       nginx

使用 tasks 命令 可查看 nginx 的情况。

[root@swarm-manager ~]#docker service tasks nginx
ID                         NAME     SERVICE  IMAGE  LAST STATE           DESIRED STATE  NODE
56er48j3hin9ysdi3sb1chbn1  nginx.1  nginx    nginx  Preparing 2 minutes  Running        swarm-node-1
e7vtvpkbstznoi8ogihaao1f5  nginx.2  nginx    nginx  Running 2 minutes    Running        swarm-manager

这里 显示 swarm-node-1 节点中 last state 的状态为 preparing .

原因是 swarm-node-1 节点并没有 nginx 的镜像

在 node-1 节点 pull nginx 镜像。

[root@swarm-node-1 ~]#docker pull nginx

node-1 节点 pull 完毕以后,在使用 service ls 查看,服务已经自动 启动了。

Swarm 模式下的引擎拥有自组织与自修复特性,意味着它们能够识别我们定义的应用,并在出现差错时持续检查并修复环境。

举例来说,如果大家关闭某台运行有 Nginx 实例的设备,则另一节点上会自动启动一套新的容器。

如果关闭 Swarm 内半数设备所使用的网络交换机,则另外一半设备会顶替而上,接管对应工作负载。

[root@swarm-manager ~]#docker service ls
ID            NAME   REPLICAS  IMAGE  COMMAND
1b9a58mlz330  nginx  2/2       nginx
[root@swarm-manager ~]#docker service tasks nginx
ID                         NAME     SERVICE  IMAGE  LAST STATE          DESIRED STATE  NODE
56er48j3hin9ysdi3sb1chbn1  nginx.1  nginx    nginx  Running 32 minutes  Running        swarm-node-1
e7vtvpkbstznoi8ogihaao1f5  nginx.2  nginx    nginx  Running 32 minutes  Running        swarm-manager

2. docker service scale 命令,这个命令是批量生成已有容器。

直接对 nginx=10 既可让 nginx 的容器生成 10 个。

[root@swarm-manager ~]#docker service scale nginx=10
nginx scaled to 10

使用 tasks 可以看到,已经在 2 个 节点中生成了 10 个 nginx 容器

[root@swarm-manager ~]#docker service tasks nginx
ID                         NAME      SERVICE  IMAGE  LAST STATE            DESIRED STATE  NODE
56er48j3hin9ysdi3sb1chbn1  nginx.1   nginx    nginx  Running 43 minutes    Running        swarm-node-1
e7vtvpkbstznoi8ogihaao1f5  nginx.2   nginx    nginx  Running 43 minutes    Running        swarm-manager
9vqxcmskj1nawo8wl0fqr32j2  nginx.3   nginx    nginx  Preparing 20 seconds  Running        swarm-manager
0vbqoyestm7ob6r1zq9jwj6il  nginx.4   nginx    nginx  Running 20 seconds    Running        swarm-node-1
13jf9mkl4k5e57pq4hoeb68ru  nginx.5   nginx    nginx  Running 20 seconds    Running        swarm-node-1
a0tk6ni6a02diuo5u3t870qk7  nginx.6   nginx    nginx  Running 20 seconds    Running        swarm-manager
cwplvo5wfqp3rn5ynvxv9wv90  nginx.7   nginx    nginx  Running 20 seconds    Running        swarm-manager
7feil5xqc5hdkseasthkq2nyx  nginx.8   nginx    nginx  Running 20 seconds    Running        swarm-node-1
8jt5yovxoz7t89edinb9ydao1  nginx.9   nginx    nginx  Starting 20 seconds   Running        swarm-node-1
dst4ydun1upham0o7e8a9hj3w  nginx.10  nginx    nginx  Running 20 seconds    Running        swarm-manager

当我们想 缩容 时间,也可以使用 scale nginx=2 让容器变成 2 个。

[root@swarm-manager ~]#docker service scale nginx=2
nginx scaled to 2

在运行 nginx=2 时可以看到 容器已经缩小为 2 个。

当我们使用 docker ps 查看,会发现容器被 stop 而非 rm。

当我们使用 docker service rm nginx 的时候,所有的容器都会被 删除,请注意。

[root@swarm-manager ~]#docker service tasks nginx
ID                         NAME     SERVICE  IMAGE  LAST STATE          DESIRED STATE  NODE
0vbqoyestm7ob6r1zq9jwj6il  nginx.4  nginx    nginx  Running 12 minutes  Running        swarm-node-1
13jf9mkl4k5e57pq4hoeb68ru  nginx.5  nginx    nginx  Running 12 minutes  Running        swarm-node-1

3. docker service update 命令。可对 服务的启动 参数 进行 更新 / 修改。

上面我们新建了一个服务,命令为:

[root@swarm-manager ~]#docker service create --name nginx --replicas 2 -p 80:80/tcp nginx

如果我们先新加入了一个 node 想让 nginx 分布在 3 个 node 上面,我们可以使用 update 命令。

[root@swarm-manager ~]#docker service update --replicas 3 nginx
nginx

更新完毕以后 我们可以查看到 REPLICAS 已经变成 3/3

[root@swarm-manager ~]#docker service ls
ID            NAME   REPLICAS  IMAGE  COMMAND
1b9a58mlz330  nginx  3/3       nginx

docker service update 命令,也可用于直接 升级 镜像等。

[root@swarm-manager ~]#docker service tasks nginx
ID                         NAME     SERVICE  IMAGE  LAST STATE           DESIRED STATE  NODE
0vbqoyestm7ob6r1zq9jwj6il  nginx.4  nginx    nginx  Running 41 minutes   Running        swarm-node-1
340e1u31vadq3jtebzeddmatt  nginx.5  nginx    nginx  Preparing 5 seconds  Running        swarm-manager

上面我们使用了 nginx 镜像启动了 任务。使用 update –image 可直接对 image 进行更新。

[root@swarm-manager ~]#docker service update --image nginx:new nginx 
nginx

可以看到 IMAGE 已经变成 nginx:new

[root@swarm-manager ~]#docker service tasks nginx
ID                         NAME     SERVICE  IMAGE      LAST STATE          DESIRED STATE  NODE
2ba3utpk6icf0w449kcwgxmnm  nginx.4  nginx    nginx:new  Running 49 seconds  Running        swarm-manager
5wmmneiueeool09fs8d2g1ncq  nginx.5  nginx    nginx:new  Running 49 seconds  Running        swarm-node-1

挂载目录, mount 


docker service create --mount type=bind,target=/container_data/,source=/host_data/- 本地目录:target = 容器里面的路径,source = 本地硬盘路径
docker service create --name nginx --mount type=bind,target=/usr/share/nginx/html/,source=/opt/web/ --replicas 2 --publish 80:80/tcp nginx

docker service create
--mount type=volume,source=<VOLUME-NAME>,target=<CONTAINER-PATH>,volume-driver=<DRIVER>, 例 - 挂载 volume 卷:source = volume 名称 , traget = 容器里面的路径 docker service create --name nginx --mount type=volume,source=myvolume,target=/usr/share/nginx/html,volume-driver=local --replicas 2 --publish 80:80/tcp nginx

三、下面是 node , node 命令用于节点管理:

[root@swarm-manager ~]#docker node --help

Usage:  docker node COMMAND

Manage Docker Swarm nodes

Options:
      --help   Print usage

Commands:
  accept      Accept a node in the swarm
  demote      Demote a node from manager in the swarm
  inspect     Inspect a node in the swarm
  ls          List nodes in the swarm
  promote     Promote a node to a manager in the swarm
  rm          Remove a node from the swarm
  tasks       List tasks running on a node
  update      Update a node

Run 'docker node COMMAND --help' for more information on a command.

1. 首先是 docker node accept 命令,这个命令用于 同意 申请加入 swarm 集群。

在使用 docker swarm init 的时候,如果使用了 –auto-accept none 的话,需要使用 docker node accept 来通过申请。

在没有通过申请之前,节点 MEMBERSHIP 状态为 Pending 状态。

–auto-accept 可以设置三种角色 分别为 (worker, manager, or none)。

使用 docker node accept + 节点 ID 既可通过申请。

2. docker node promote 与 docker node demote 命令。

docker node promote 是 将 worker 普通节点,提升为 manager 节点。

docker node demote 是 将 manager 管理节点,降级为 worker 节点。

3. docker node inspect 可查看节点的具体信息
docker node rm 可删除一个节点
docker node tasks 可查看节点中运行的 service 任务。

四、docker stack/deploy 目前 stack 还处于 测试阶段。

https://github.com/docker/docker/blob/master/experimental/docker-stacks-and-bundles.md

目前 docker 1.12.0-rc2 版本还没有这个命令,等待 正式版 的到来。

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-02/140518.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计9764字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7989009
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...