1. 说明

本文档针对docker swarm操作。

针对的系统是以一个本地的测试系统为例。其中机器信息如下,172.16.1.13作为docker swarm的管理机。

本地测试的机器列表信息:

主机名

模拟的外网

内网IP

要部署模块

mini01

10.0.0.11

172.16.1.11

tomcat            【swarm管理】
hadoop-datanode    【swarm管理】
hbase-regionserver   【swarm管理】

mini02

10.0.0.12

172.16.1.12

tomcat             【swarm管理】
hadoop-datanode    【swarm管理】
hbase-regionserver   【swarm管理】

mini03

10.0.0.13

172.16.1.13

visualizer  # docker swarm 状态查看
spark              【swarm管理】
zookeeper         【swarm管理】

hadoop-namnode    【swarm管理】
hbase-master      【swarm管理】

2. docker swarm初始化

根据规划在172.16.1.13这台机器上操作:

 [root@mini03 ~]# docker swarm init  # 针对机器只有一个IP的情况
Error response from daemon: could not choose an IP address to advertise since this system has multiple addresses on different interfaces (172.16.1.13 on eth0 and 10.0.0.13 on eth1) - specify one with --advertise-addr
[root@mini03 ~]# docker swarm init --advertise-addr 172.16.1.13 # 针对机器有多个IP的情况,需要指定一个IP,一般都是指定内网IP
Swarm initialized: current node (yo5f7qb28gf6g38ve4xhcis17) is now a manager. To add a worker to this swarm, run the following command:
# 在其他机器上执行,这样可以加入该swarm管理
docker swarm join --token SWMTKN--4929ovxh6agko49u0yokrzustjf6yzt30iv1zvwqn8d3pndm92-0kuha3sa80u2u27yca6kzdbnb 172.16.1.13: To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

得到加入到该swarm的命令

 [root@mini03 ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:
# 在其他机器上执行,这样可以加入该swarm管理
docker swarm join --token SWMTKN--4929ovxh6agko49u0yokrzustjf6yzt30iv1zvwqn8d3pndm92-0kuha3sa80u2u27yca6kzdbnb 172.16.1.13:

3. 初始化网络

  初始化一个swarm网络,让系统组件使用这个指定的网络。

 [root@mini03 ~]# docker network create -d overlay --attachable zhang
vu07em5fvpuojih6wgckdkdzj
[root@mini03 docker-swarm]# docker network ls # 查看网络
NETWORK ID NAME DRIVER SCOPE
fa8a244c6bd5 bridge bridge local
51c95dea1e5c docker_gwbridge bridge local
7a7e31f4bce8 host host local
5hgg372xwxbl ingress overlay swarm
lmt3pjswf7l0 zhang overlay swarm
5ea08e9a282f none null local
[root@mini03 ~]# docker network inspect zhang # 查看网络信息
[
{
"Name": "zhang",
"Id": "xiykborz8hn2td40ykhi20dck",
"Created": "0001-01-01T00:00:00Z",
"Scope": "swarm",
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": []
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": null,
"Options": {
"com.docker.network.driver.overlay.vxlanid_list": ""
},
"Labels": null
}
]

删除网络【慎用】

删除docker中的zhang网络

 [root@mini03 docker-swarm]# docker network rm zhang
zhang
[root@mini03 docker-swarm]# docker network ls
NETWORK ID NAME DRIVER SCOPE
fa8a244c6bd5 bridge bridge local
51c95dea1e5c docker_gwbridge bridge local
7a7e31f4bce8 host host local
5hgg372xwxbl ingress overlay swarm
5ea08e9a282f none null local

4. 加入或退出swarm管理

  在mini01、mini02上执行 docker swarm join --token SWMTKN-1-4929ovxh6agko49u0yokrzustjf6yzt30iv1zvwqn8d3pndm92-0kuha3sa80u2u27yca6kzdbnb 172.16.1.13:2377 命令。

4.1. 当前swarm有哪些节点

 [root@mini03 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
2pfwllgxpajx5aitlvcih9vsq mini01 Ready Active 17.09.-ce
zho14u85itt5l2i6cpg8fcd6t mini02 Ready Active 17.09.-ce
yo5f7qb28gf6g38ve4xhcis17 * mini03 Ready Active Leader 17.09.-ce

4.2. 退出当前的swarm节点

 # 在swarm管理机mini03上的操作
# 其中 2pfwllgxpajx5aitlvcih9vsq 是mini01在swarm机器上的ID,根据docker node ls 获取
[root@mini03 ~]# docker node rm --force 2pfwllgxpajx5aitlvcih9vsq # 如果mini01上的docker没有停止服务,那么就需要使用 --force 选项
2pfwllgxpajx5aitlvcih9vsq
[root@mini03 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
zho14u85itt5l2i6cpg8fcd6t mini02 Ready Active 17.09.-ce
yo5f7qb28gf6g38ve4xhcis17 * mini03 Ready Active Leader 17.09.-ce
##########################################
# 需要在mini01上执行的命令,这样mini01才能彻底退出swarm管理
[root@mini01 ~]# docker swarm leave
Node left the swarm.

4.3. swarm管理机退出swarm

首先需要删除所有节点,然后强制退出swarm即可

 [root@mini03 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
yo5f7qb28gf6g38ve4xhcis17 * mini03 Ready Active Leader 17.09.-ce
[root@mini03 ~]# docker swarm leave --force # swarm管理机退出swarm,需要 --force 参数
Node left the swarm.
[root@mini03 ~]# docker node ls
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.

4.4. 当前swarm有哪些服务

 [root@mini03 ~]# docker service ls  # 只是示例,不是实际数据
ID NAME MODE REPLICAS IMAGE PORTS
lq7zkkal6ujt hadoop_datanode global / bde2020/hadoop-datanode:2.0.-hadoop2.7.4-java8
ph2fu37k886b hadoop_namenode replicated / bde2020/hadoop-namenode:2.0.-hadoop2.7.4-java8 *:->/tcp
ca47u5i2ubes hbase-master replicated / bde2020/hbase-master:1.0.-hbase1.2.6 *:->/tcp
mkks4oa2ppcn hbase-regionserver- replicated / bde2020/hbase-regionserver:1.0.-hbase1.2.6
j4mhizg4j67p hbase-regionserver- replicated / bde2020/hbase-regionserver:1.0.-hbase1.2.6
yndrkc2bcpra hbase_zoo1 replicated / zookeeper:3.4. *:->/tcp
r5ycrvo0zout spark_spark replicated / zhang/spark:latest *:->/tcp,*:->/tcp,*:->/tcp,*:->/tcp
f2v091nz24rg tomcat_tomcat global / zhang/tomcat:latest *:->/tcp,*:->/tcp,*:->/tcp
clfpryaerq2l visualizer replicated / dockersamples/visualizer:latest *:->/tcp

5. swarm标签管理

5.1. 标签添加

根据最开始的主机和组件部署规划,标签规划如下:在swarm管理机mini03上执行。

 # 给mini01机器的标签
docker node update --label-add tomcat=true mini01
docker node update --label-add datanode=true mini01
docker node update --label-add hbase-regionserver-=true mini01 # 给mini02机器的标签
docker node update --label-add tomcat=true mini02
docker node update --label-add datanode=true mini02
docker node update --label-add hbase-regionserver-=true mini02 # 给mini03机器的标签
docker node update --label-add spark=true mini03
docker node update --label-add zookeeper=true mini03
docker node update --label-add namenode=true mini03
docker node update --label-add hbase-master=true mini03

5.2. 删除标签

在swarm管理机mini03上执行,示例如下:

 docker node update --label-rm zookeeper mini03

5.3. 查看swarm当前的标签

在swarm管理机mini03上执行:

 [root@mini03 ~]# docker node ls -q | xargs docker node inspect -f '{{.ID}}[{{.Description.Hostname}}]:{{.Spec.Labels}}'
6f7dwt47y6qvgs3yc6l00nmjd[mini01]:map[tomcat:true datanode:true hbase-regionserver-:true]
5q2nmm2xaexhkn20z8f8ezglr[mini02]:map[tomcat:true datanode:true hbase-regionserver-:true]
ncppwjknhcwbegmliafut0718[mini03]:map[hbase-master:true namenode:true spark:true zookeeper:true]

6. 查看日志

启动容器时,查看相关日志,例如如下:

 docker stack ps hadoop
docker stack ps hadoop --format "{{.Name}}: {{.Error}}"
docker stack ps hadoop --format "{{.Name}}: {{.Error}}" --no-trunc
docker stack ps hadoop --no-trunc

docker swarm的常用操作的更多相关文章

  1. Docker安装及常用操作

    Docker简介: Docker是一个轻量级容器技术,类似于虚拟机技术,但性能远远高于虚拟机,Docker支持将软件编译成一个镜像(image),在这个镜像中做好对软件的各种配置,然后可以运行这个镜像 ...

  2. 二、docker 镜像容器常用操作(让我们用docker 溜得飞起)

    前言 上篇讲了我们如何安装docker,现在该我们一展拳脚的时候了.接下来让我们一起学习一下docker常见的操作,让我们能够会使用 docker. 基本概念 在讲使用之前,还是先将一下docker ...

  3. Docker 镜像的常用操作

    镜像作为 Docker 三大核心概念中,最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌握的.本文将带您一步一步,图文并重,上手操作来学习它. 目录 一 Docker 下载镜像 1.1 下 ...

  4. docker镜像的常用操作

    获取镜像 比如说我们可以这样操作 当然把这个镜像拉过来时间非常长.   查看镜像列表 命令: docker images 说明: 使用docker images命令可以列出本地主机上已有的镜像. 信息 ...

  5. docker容器的常用操作

    创建容器 [root@mydocker ~]# docker create --name test_create -ti ubuntu 1d13990eea0d3f282a0f7d5589f40e49 ...

  6. Docker介绍及常用操作演示(一)--技术流ken

    Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互 ...

  7. docker的一些常用操作

    镜像:一个打包好的应用,还有应用运行的系统.资源.配置等容器:镜像的实例,一个镜像可以有一个或多个实例(容器)对docker容器的变更时写到容器的文件系统的,而不是写到docker镜像中的,可以用一个 ...

  8. docker中mongdb常用操作

    一.进入 --使用本地命令行查看 docker exec -it mongos bash

  9. Docker介绍及常用操作演示(一)

    Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互 ...

随机推荐

  1. 【Spark篇】---Spark中yarn模式两种提交任务方式

    一.前述 Spark可以和Yarn整合,将Application提交到Yarn上运行,和StandAlone提交模式一样,Yarn也有两种提交任务的方式. 二.具体      1.yarn-clien ...

  2. 【从零开始自制CPU之学习篇01】识别四色环电阻

    制作CPU的好多部分都用到了各种阻值的电阻,由于我选购的是色环电阻,即电阻表面涂上一定颜色的色环,来代表这个电阻的阻值.因此通过色环来快速识别电阻阻值需要作为储备知识,不然一堆电阻插在面包板上很快就乱 ...

  3. 8分钟学会使用AutoMapper

    一.什么是AutoMapper与为什么用它. 它是一种对象与对象之间的映射器,让AutoMapper有意思的就是在于它提供了一些将类型A映射到类型B这种无聊的实例,只要B遵循AutoMapper已经建 ...

  4. C# - 2017微软校园招聘笔试题 之 MS Recognition[待解决]

    MS Recognition 在线提交: hihoCoder 1402 http://hihocoder.com/problemset/problem/1402 类似: OpenJudge - I:P ...

  5. 带着新人学springboot的应用08(springboot+jpa的整合)

    这一节的内容比较简单,是springboot和jpa的简单整合,jpa默认使用hibernate,所以本质就是springboot和hibernate的整合. 说实话,听别人都说spring data ...

  6. 初探Java设计模式2:结构型模式(代理模式,适配器模式等)

    行为型模式 行为型模式关注的是各个类之间的相互作用,将职责划分清楚,使得我们的代码更加地清晰. 策略模式 策略模式太常用了,所以把它放到最前面进行介绍.它比较简单,我就不废话,直接用代码说事吧. 下面 ...

  7. EF Core新增迁移时无法加载程序集“System.ValueTuple”的错误

    EF Core使用迁移命令时,如: Add-Migration Init 有时会出现如下错误: System.IO.FileLoadException: Could not load file or ...

  8. Mysql加锁过程详解(8)-理解innodb的锁(record,gap,Next-Key lock)

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  9. 常见MQTT服务器搭建[转载]

    简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,它比较适合于在低带宽.不可靠的网络的进行远程传感器和控制设备通 ...

  10. Go开发之路 -- 函数详解

    声明语法 func 函数名 (参数列表) [(返回值列表)] {} Golang函数特点 a. 不支持重载,一个包不能有两个名字一样的函数 b. 函数是一等公民,函数也是一种类型,一个函数可以赋值给变 ...