【Docker学习笔记】9.Docker Machine及Swarm 集群管理

news/2025/1/17 5:48:24/

前言

本章介绍Docker Machine及Swarm 集群管理。

Docker Machine

简介
Docker Machine 是一种可以让您在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机。

Docker Machine 也可以集中管理所有的 docker 主机,比如快速的给 100 台服务器安装上 docker。

Docker Machine 管理的虚拟主机可以是机上的,也可以是云供应商,如阿里云,腾讯云,AWS,或 DigitalOcean。

使用 docker-machine 命令,您可以启动,检查,停止和重新启动托管主机,也可以升级 Docker 客户端和守护程序,以及配置 Docker 客户端与您的主机进行通信。
在这里插入图片描述

在这里插入图片描述

安装
安装 Docker Machine 之前你需要先安装 Docker。

Docker Machine 可以在多种平台上安装使用,包括 Linux 、MacOS 以及 windows。

Linux 安装命令

$ base=https://github.com/docker/machine/releases/download/v0.16.0 &&curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&sudo mv /tmp/docker-machine /usr/local/bin/docker-machine &&chmod +x /usr/local/bin/docker-machine

macOS 安装命令

$ base=https://github.com/docker/machine/releases/download/v0.16.0 &&curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/usr/local/bin/docker-machine &&chmod +x /usr/local/bin/docker-machine

Windows 安装命令
如果你是 Windows 平台,可以使用 Git BASH,并输入以下命令:

$ base=https://github.com/docker/machine/releases/download/v0.16.0 &&mkdir -p "$HOME/bin" &&curl -L $base/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" &&chmod +x "$HOME/bin/docker-machine.exe"

查看是否安装成功:

$ docker-machine version
docker-machine version 0.16.0, build 9371605

注意:各版本更新日志里面也有安装说明:https://github.com/docker/machine/releases

使用

本章通过 virtualbox 来介绍 docker-machine 的使用方法。其他云服务商操作与此基本一致。具体可以参考每家服务商的指导文档。

1、列出可用的机器
可以看到目前只有这里默认的 default 虚拟机。

$ docker-machine ls

在这里插入图片描述

2、创建机器
创建一台名为 test 的机器。

$ docker-machine create --driver virtualbox test
  • –driver:指定用来创建机器的驱动类型,这里是 virtualbox。
    在这里插入图片描述

3、查看机器的 ip

$ docker-machine ip test

在这里插入图片描述

4、停止机器

$ docker-machine stop test

在这里插入图片描述

5、启动机器

$ docker-machine start test

在这里插入图片描述

6、进入机器

$ docker-machine ssh test

在这里插入图片描述

docker-machine 命令参数说明

  • docker-machine active:查看当前激活状态的 Docker 主机。
$ docker-machine lsNAME      ACTIVE   DRIVER         STATE     URL
dev       -        virtualbox     Running   tcp://192.168.99.103:2376
staging   *        digitalocean   Running   tcp://203.0.113.81:2376$ echo $DOCKER_HOST
tcp://203.0.113.81:2376$ docker-machine active
staging
  • config:查看当前激活状态 Docker 主机的连接信息。
  • create:创建 Docker 主机
  • env:显示连接到某个主机需要的环境变量
  • inspect: 以 json 格式输出指定Docker的详细信息
  • ip: 获取指定 Docker 主机的地址
  • kill: 直接杀死指定的 Docker 主机
  • ls: 列出所有的管理主机
  • provision: 重新配置指定主机
  • regenerate-certs: 为某个主机重新生成 TLS 信息
  • restart: 重启指定的主机
  • rm: 删除某台 Docker 主机,对应的虚拟机也会被删除
  • ssh: 通过 SSH 连接到主机上,执行命令
  • scp: 在 Docker 主机之间以及 Docker 主机和本地主机之间通过 scp 远程复制数据
  • mount: 使用 SSHFS 从计算机装载或卸载目录
  • start: 启动一个指定的 Docker 主机,如果对象是个虚拟机,该虚拟机将被启动
  • status: 获取指定 Docker主机的状态(包括:Running、Paused、Saved、Stopped、Stopping、Starting、Error)等
  • stop: 停止一个指定的 Docker 主机
  • upgrade: 将一个指定主机的 Docker 版本更新为最新
  • url: 获取指定 Docker 主机的监听 URL
  • version: 显示 Docker Machine 的版本或者主机 Docker 版本
  • help: 显示帮助信息

Swarm 集群管理

简介
Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。

支持的工具包括但不限于以下各项:

  • Dokku
  • Docker Compose
  • Docker Machine
  • Jenkins

原理
如下图所示,swarm 集群由管理节点(manager)和工作节点(work node)构成。

  • swarm mananger:负责整个集群的管理工作包括集群配置、服务管理等所有跟集群有关的工作。
  • work node:即图中的 available node,主要负责运行相应的服务来执行任务(task)。
    在这里插入图片描述

使用

以下示例,均以 Docker Machine 和 virtualbox 进行介绍,确保你的主机已安装 virtualbox。

1、创建 swarm 集群管理节点(manager)
创建 docker 机器:

$ docker-machine create -d virtualbox swarm-manager

在这里插入图片描述

初始化 swarm 集群,进行初始化的这台机器,就是集群的管理节点。

$ docker-machine ssh swarm-manager
$ docker swarm init --advertise-addr 192.168.99.107 #这里的 IP 为创建机器时分配的 ip。

在这里插入图片描述

以上输出,证明已经初始化成功。需要把以下这行复制出来,在增加工作节点时会用到:

docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh3j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377

2、创建 swarm 集群工作节点(worker)
这里直接创建好俩台机器,swarm-worker1 和 swarm-worker2 。

在这里插入图片描述

分别进入两个机器里,指定添加至上一步中创建的集群,这里会用到上一步复制的内容。

在这里插入图片描述

以上数据输出说明已经添加成功。

上图中,由于上一步复制的内容比较长,会被自动截断,实际上在图运行的命令如下:

docker@swarm-worker1:~$ docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh3j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377

3、查看集群信息
进入管理节点,执行:docker info 可以查看当前集群的信息。

$ docker info

在这里插入图片描述

通过画红圈的地方,可以知道当前运行的集群中,有三个节点,其中有一个是管理节点。

4、部署服务到集群中
注意:跟集群管理有关的任何操作,都是在管理节点上操作的。

以下例子,在一个工作节点上创建一个名为 helloworld 的服务,这里是随机指派给一个工作节点:

docker@swarm-manager:~$ docker service create --replicas 1 --name helloworld alpine ping docker.com

在这里插入图片描述

5、查看服务部署情况
查看 helloworld 服务运行在哪个节点上,可以看到目前是在 swarm-worker1 节点:

docker@swarm-manager:~$ docker service ps helloworld

在这里插入图片描述

查看 helloworld 部署的具体信息:

docker@swarm-manager:~$ docker service inspect --pretty helloworld

在这里插入图片描述

6、扩展集群服务
我们将上述的 helloworld 服务扩展到俩个节点。

docker@swarm-manager:~$ docker service scale helloworld=2

在这里插入图片描述

可以看到已经从一个节点,扩展到两个节点。
在这里插入图片描述

7、删除服务

docker@swarm-manager:~$ docker service rm helloworld

在这里插入图片描述

查看是否已删除:
在这里插入图片描述

8、滚动升级服务
以下实例,我们将介绍 redis 版本如何滚动升级至更高版本。

创建一个 3.0.6 版本的 redis。

docker@swarm-manager:~$ docker service create --replicas 1 --name redis --update-delay 10s redis:3.0.6

在这里插入图片描述

滚动升级 redis 。

docker@swarm-manager:~$ docker service update --image redis:3.0.7 redis

在这里插入图片描述

看图可以知道 redis 的版本已经从 3.0.6 升级到了 3.0.7,说明服务已经升级成功。

9、停止某个节点接收新的任务
查看所有的节点:

docker@swarm-manager:~$ docker node ls

在这里插入图片描述

可以看到目前所有的节点都是 Active, 可以接收新的任务分配。

停止节点 swarm-worker1:
在这里插入图片描述

注意:swarm-worker1 状态变为 Drain。不会影响到集群的服务,只是 swarm-worker1 节点不再接收新的任务,集群的负载能力有所下降。

可以通过以下命令重新激活节点:

docker@swarm-manager:~$  docker node update --availability active swarm-worker1

在这里插入图片描述


http://www.ppmy.cn/news/37823.html

相关文章

RK3568 buildroot文件系统下的三屏显示

启扬智能IAC-RK3568-Kit开发板基于瑞芯微RK3568四核Cortex-A55处理器,支持HDMI、LVDS、MIPI、EDP四种显示接口,能够实现三屏同显,三屏异显,满足智能广告机、智能终端、游戏设备、多屏互动、多媒体设备等多样化的显示需求。 三屏显…

MyBatis 03 -MyBatis映射

MyBatis映射1 ORM映射1.1 MyBatis自动ORM失效1.2 方案一:列的别名1.3 方案二:直接使用Map集合映射结果1.4 方案三:自定义结果映射(ResultMap)2 MyBatis高级映射2.1 数据库中表的关系2.2 OneToOne2.2.1 方案一&#xff…

QT常用控件——菜单栏和对话框

目录 引言 一,菜单栏 二,工具栏 三,对话框 QDialog 引言 QMainWindow 是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基…

C++ - 继承

之前我们学习了C中的STL库等知识点,在本文中我们将继续的学习C中继承部分的知识点。 继承的概念及定义 继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保 持原有类特性的基础上进行扩展&#xff0c…

Vue3学习笔记(9.1)

Vue.js style&#xff08;内联样式&#xff09; 我们可以在v-bind:style直接设置样式&#xff0c;可以简写:style <!--* Author: RealRoad1083425287qq.com* Date: 2023-04-02 19:41:53* LastEditors: Mei* LastEditTime: 2023-04-03 15:41:44* FilePath: \vscode\Vue3_li…

React中setState/useState的使用

一、React如何使用setState/useState的最新的值 一般是可以正常的把最新的值&#xff0c;传递给所需要的函数中的&#xff0c;但是有些情况&#xff0c;需要使用最新数据的函数&#xff0c;不可改动&#xff0c;甚至所需要使用的地方并不是一个函数&#xff0c;那我们如何获取s…

《Effective Objective-C 2.0 》 阅读笔记 item8

第8条&#xff1a;理解“对象等同性”这一概念 1. 对象等同性 “”操作比较的是两个指针本身&#xff0c;而不是其所指的对象。 应该使用NSObject协议中声明的“isEqual:”方法来判断两个对象的等同性。其中&#xff0c;某些对象提供了特殊的“等同性判定方法”&#xff0c;如…

网易二面:MongoDB索引底层使用的是什么数据结构?

文章目录 mongoDB存储引擎对B-tree 的误解开始B 树的单条记录查询性能真的好于 B+ 树吗?B+ 树的优势为mongoDB存储引擎 mongoDB使用的存储引擎有: 1、WiredTiger存储引擎是mongodb3.2的默认存储引擎; 2、MMAPv1是mongodb基于内存映射最初的存储引擎; 3、In-Memory是一种…