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. Linux中断程序命令

    在运行 python 脚本的时候想要中断程序,发现如下情况: ctrl+c 居然无法中断程序! 这时候尝试 ctrl+d 还是毫无效果,最后尝试 ctrl+\: 查看该程序是否还在运行 ps aux ...

  2. Centos 7 .Net core后台守护进程Supervisor配置

    环境: Centos 7 已安装.Net core 2.0.0  .Net core 1.1.2 1.Supervisor安装 yum 安装 yum install supervisor (阿里云验证 ...

  3. 死磕 java集合之ArrayList源码分析

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 简介 ArrayList是一种以数组实现的List,与数组相比,它具有动态扩展的能力,因此也可 ...

  4. Nginx学习系列一搭建环境

    1.Win10下安装vmware14虚拟机软件 官方下载地址 全程next,输入key,激活即可. 2.在虚拟机中安装Linux服务器环境,操作系统为Centos7 继续下一步,安装完成! 3.下载C ...

  5. redis 系列18 事件

    一.概述 Redis服务器是一个事件驱动程序,服务器需要处理两类事件:1文件事件,2时间事件.文件事件是关于客户端与服务器之间的通信操作.时间事件是关于服务器内部的一些定时操作.本篇还是参照" ...

  6. SpringMvc 请求中日期类型参数接收一二事儿

    首先说明:以版本为Spring 4.3.0为测试对象: 开启<mvc:annotation-driven /> 测试场景一:请求中含有date属性,该类型为日期类型,SpringMvc采用 ...

  7. 【细语】C#之扩展方法原理及其使用

    1.写在前面 今天群里一个小伙伴问了这样一个问题,扩展方法与实例方法的执行顺序是什么样子的,谁先谁后(这个问题会在文章结尾回答).所以写了这边文章,力图从原理角度解释扩展方法及其使用. 以下为主要内容 ...

  8. static 静态与非静态的区别

    静态属性是共享一块内存空间.实例的是各自独享一块内存空间. 比如同一个name属性.如果是实例成员.那么你每创建了一个对象.赋给name值.假如创建了2个对象.第一个赋值张三.第2个赋值李四.它们就分 ...

  9. Linux,在不使用U盘的情况下使用wubi.exe程序在Win7上安装ubuntu-14.04.3版系统

    本文介绍如何在不使用U盘的情况下使用wubi.exe程序在Win7上安装ubuntu-14.04.3版系统. 花了一天的时间终于安装上了Ubuntu14.04,过程坎坷,是血泪史,开始报“cannot ...

  10. [MySQL] mysql int后面的数字与前导零填充

    1.int或者tinyint等数值型字段的存储范围已经是固定的,和类型相关2.后面的数字只与显示有关,并且是在开启了zerofill前导零填充的前提下 3.显示的时候,在前面用0补全了 create ...