前言

在前面的文章中,已经介绍如何在本地通过Docker Machine 创建虚拟Docker 主机,以及也可以在本地Windows 创建虚拟主机,也是可以使用的。这一节,我们将继续学习 Docker 三剑客之一 : Docker Swarm

Docker Swarm

Docker Swarm 是Docker 的本地聚集类,它将一组Docker 主机转换为一个虚拟单独的 Docker 主机。Docker Swarm 使用标准的Docker API。所以与Docker 守护进程交互的工具都可以使用 Swarm 对多个主机进行转换扩展。 包括有:

  • Docker Componse
  • Docker Machine
  • Dokku

Docker Swarm 支持即插即用原则,随着初始开发的结束,API 开发起来支持可插后端。 这意味着您可以交换调度后端 Docker Swarm 使用的开箱即用与后端您喜欢。 Swarm 的可切换设计为大多数用例提供了一个平滑的开箱体验。

安装 Docker Swarm

我们可以通过官方Docker Swarm 的镜像来创建一个集群,因为Docker Swarm 其实也是一个 Docker images

docker run swarm --help


$ docker run swarm --help
Unable to find image 'swarm:latest' locally
latest: Pulling from library/swarm
d85c18077b82: Pull complete 1e6bb16f8cb1: Pull complete 85bac13497d7: Pull complete Digest: sha256:b866583a3b8791bcd705b7bc0fd94c66b695a1a2dbaeb5f59ed29940e5015dc8
Status: Downloaded newer image for swarm:latest
Usage: swarm [OPTIONS] COMMAND [arg...] A Docker-native clustering system Version: 1.2.9 (527a849) Options:
--debug debug mode [$DEBUG]
--log-level, -l "info" Log level (options: debug, info, warn, error, fatal, panic)
--experimental enable experimental features
--help, -h show help
--version, -v print the version Commands:
create, c Create a cluster
list, l List nodes in a cluster
manage, m Manage a docker cluster
join, j Join a docker cluster
help Shows a list of commands or help for one command Run 'swarm COMMAND --help' for more information on a command.

因为是第一次使用镜像,所以Docker Engine 会检查当前环境是否有这个镜像,没有则拉取了最新的版本到本地。

使用Docker Swarm 镜像的好处

相比于其他方法,使用Swarm 镜像的好处在于

  • 不需要额外再系统上安装任何二进制执行文件来使用 Swarm
  • 可以通过docker engine 获取到最新版本
  • 容器与Swarm 环境隔离。不需要单独维护

创建具有交互式容器的集群

集群,需要创建一个管理节点和工作节点。这里测试创建一个管理节点,在管理节点加入两个工作节点,这就组成一集群。

创建管理节点

docker-machine ls 查看现有虚拟主机


$ docker-machine.exe ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.102:2376 v19.03.5

发现已经有一个虚拟主机在运行,其实可以将这个主机作为管理主机

通过 SSH 连接管理节点,在第一个虚拟机 创建管理节点

docker-machine ssh default 连接虚拟主机,开启Swarm


docker@default:~$ docker swarm init --advertise-addr 192.168.99.102
Swarm initialized: current node (5mohlisxbrkogfbtzk6nujkfw) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-4k26snh9hpamnpdpyk4qqogeolf6ing4u6e35jkjpwx83v9xcp-f2rhw7i7p9p0jeesvwb81xb9i 192.168.99.102:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

docker swarm init --advertise-addr 192.168.99.102

这里需要指定一个地址,因为虚拟机,通过ip address 可发现这个虚拟机有多个网卡,所以,我们需要指定一个地址。

创建主节点后,可以获取到一个 Token 这个token 呢 就是我们需要创建 服务节点所需要用到的。

docker swarm join --token SWMTKN-1-4k26snh9hpamnpdpyk4qqogeolf6ing4u6e35jkjpwx83v9xcp-f2rhw7i7p9p0jeesvwb81xb9i 192.168.99.102:2377

执行 docker info 后我们可以发现,当前Swarm 已经是活动的状态,管理节点 1


Swarm: active
NodeID: rzu7l3z4mysplwgdce8vj2364
Is Manager: true
ClusterID: uuq50bc4x4bckqfglkrj05vao
Managers: 1
Nodes: 1
Default Address Pool: 10.0.0.0/8

docker node ls 可以查看当前节点信息


docker@default:~$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
5mohlisxbrkogfbtzk6nujkfw * default Ready Active Leader 19.03.5

创建工作节点

docker-machine create work1 创建一个默认的VirtualBox VM 的虚拟主机。

docker-machine ssh work1 连接虚拟主机后,将本节点加入管理节点

docker@work1:~$ docker swarm join --token SWMTKN-1-4k26snh9hpamnpdpyk4qqogeolf6ing4u6e35jkjpwx83v9xcp-f2rhw7i7p9p0jeesvwb81xb9i 192.168.99.102:2377
This node joined a swarm as a worker.

同样的,再创建一个work2 节点,加入到default 当中。

管理节点信息

当前主机上,我们可以查看到所有的虚拟主机情况。

$ docker-machine.exe ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.102:2376 v19.03.5
work1 - virtualbox Running tcp://192.168.99.103:2376 v19.03.5
work2 - virtualbox Running tcp://192.168.99.104:2376 v19.03.5

进入管理主机,查看节点的情况。

docker@default:~$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
5mohlisxbrkogfbtzk6nujkfw * default Ready Active Leader 19.03.5
qqgd4abpjw08lwh31ddgez041 work1 Ready Active 19.03.5
gblxw2whlxl0k94nmfozhs7gl work2 Ready Active 19.03.5

服务和任务关系

  • 服务是一组任务的集合,一个服务可以有多个任务。
  • 任务是集群里面最小的一个单位,比如ping www.baidu.com

部署集群服务

docker-machine ssh default 连接管理主机


docker@default:~$ docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
c9b1b535fdd9: Pull complete Digest: sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

拉取一个 alpine linux 镜像

Alpine 操作系统是一个面向安全的轻型 Linux 发行版。它不同于通常 Linux 发行版,Alpine 采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗

部署任务

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

docker service create --replicas 1  --name hello-world alpine ping www.baidu.com
  • --replicas 指定任务的数量
  • --name 指定服务的名称
  • alpine 需要运行的镜像名称
  • ping www.baidu.com 镜像里面需要运行的命令

docker@default:~$ docker service create --replicas 1 --name hello-world alpine ping www.baidu.com
nzr66u3j32ndgzodw08cer1he
overall progress: 1 out of 1 tasks 1/1: running[==================================================>] verify: Service converged

常用命令

docker service ps <name> 查看服务的运行状态、以及进展

docker@default:~$ docker service ps hello-world
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
j03uhnoauhet hello-world.1 alpine:latest default Running Running 8 minutes ago

docker service ls 查看当前Swarm 集群所运行的所有任务

docker@default:~$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
nzr66u3j32nd hello-world replicated 1/1 alpine:latest

监控服务

docker service inspect --pretty hello-world 命令可以概览服务的运行情况。


ID: nzr66u3j32ndgzodw08cer1he
Name: hello-world
Service Mode: Replicated
Replicas: 1
Placement:
UpdateConfig:
Parallelism: 1
On failure: pause
Monitoring Period: 5s
Max failure ratio: 0
Update order: stop-first
RollbackConfig:
Parallelism: 1
On failure: pause
Monitoring Period: 5s
Max failure ratio: 0
Rollback order: stop-first
ContainerSpec:
Image: alpine:latest@sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d
Args: ping www.baidu.com
Init: false
Resources:
Endpoint Mode: vip

弹性伸缩

docker service update --replicas 2 hello-world 将原来的服务任务数量改为2次

docker@default:~$ docker service update --replicas 2 hello-world
hello-world
overall progress: 2 out of 2 tasks 1/2: running [==================================================>] 2/2: running [==================================================>] verify: Service converged

docker service ps <name> 查看本次任务的运行情况

docker@default:~$ docker service ps hello-world
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
j03uhnoauhet hello-world.1 alpine:latest default Running Running 26 minutes ago
k6oudbv4e9he hello-world.2 alpine:latest work1 Running Running about a minute ago

这里将这两个任务分配到 default work1 节点

查看 work1 节点运行情况

### 进入work1
docker-machine ssh work1 docker@work1:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c86154f43f4 alpine:latest "ping www.baidu.com" 4 minutes ago Up 4 minutes hello-world.2.k6oudbv4e9henfqbhvulxt1y2

从集群退出

docker swarm leave 执行退出命令后,该节点已下线。

docker@default:~$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
5mohlisxbrkogfbtzk6nujkfw * default Ready Active Leader 19.03.5
qqgd4abpjw08lwh31ddgez041 work1 Down Active 19.03.5
gblxw2whlxl0k94nmfozhs7gl work2 Ready Active 19.03.5

参考

https://www.cnblogs.com/ityouknow/p/8903975.html

DOCKER 学习笔记8 Docker Swarm 集群搭建的更多相关文章

  1. Docker Swarm Mode 学习笔记(创建 Swarm 集群)

    Swarm 集群由管理节点与工作节点组成. 初始化集群 使用命令:docker swarm init 如果你的 Docker 主机有多个网卡, 拥有多个 IP 地址, 必须使用 --advertise ...

  2. 基于zookeeper的Swarm集群搭建

    简介 Swarm:docker原生的集群管理工具,将一组docker主机作为一个虚拟的docker主机来管理. 对客户端而言,Swarm集群就像是另一台普通的docker主机. Swarm集群中的每台 ...

  3. Docker系列之swarm集群搭建

    学习Docker很久了,今天分享一下Docker的swarm集群的搭建过程很简单 首先第一步是 每台机器上面都要安装docker 本人使用的是centos7操作系统,使用3太虚拟机,3太虚拟机必须网络 ...

  4. Docker swarm集群搭建教程

    一.什么是Swarm Swarm这个项目名称特别贴切.在Wiki的解释中,Swarm behavior是指动物的群集行为.比如我们常见的蜂群,鱼群,秋天往南飞的雁群都可以称作Swarm behavio ...

  5. 分享:docker swarm集群搭建

    [Y_H]实践原创 三台虚拟机:1台centOS , 2台ubuntu.   网上有用docker-machine创建虚拟机做的例子.   这里直接用VMware创建这三台虚拟机,然后用xshell连 ...

  6. docker swarm集群搭建以及使用滚动更新

    基础环境,三台虚拟机 172.17.3.70 172.17.3.71 172.17.3.72 系统配置:centos 7,关闭selinux 需要优化的基础配置: [root@sw1 ~]# vim ...

  7. docker swarm集群搭建及使用Portainer、shipyard

    一.规划 1.swarm01作为manager节点,swarm02和swarm03作为worker节点. # cat /etc/hosts 127.0.0.1   localhost 192.168. ...

  8. DOCKER 学习笔记7 Docker Machine 在阿里云实例化ECS 以及本地Windows 实例化虚拟机实战

    前言 通过以上6小节的学习,已经可以使用DOCKER 熟练的部署应用程序了.大家都可以发现使用 DOCKER 带来的方便之处,因为现在的话,只是在一台服务器上部署,这样部署,我们只需要一条命令,需要的 ...

  9. DOCKER 学习笔记7 Docker Machine 建立虚拟机实战,以及错误总结

    前言 通过以上6小节的学习,已经可以使用DOCKER 熟练的部署应用程序了.大家都可以发现使用 DOCKER 带来的方便之处,因为现在的话,只是在一台服务器上部署,这样部署,我们只需要一条命令,需要的 ...

随机推荐

  1. 信息管理java

    代码: package 信息管理;//信1805-1 20183763 凌云 public class ScoreInformation { private String stunumber = &q ...

  2. 1072 开学寄语 (20分)C语言

    下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其 QQ,封其电脑,夺其手机,收其 ipad,断其 wifi,使其百无聊赖,然后,净面.理发.整衣,然后思过.读书.锻炼.明智.开悟 ...

  3. OpenStack Identity API v3 (CURRENT)

    Table Of Contents Identity API v3 (CURRENT) Authentication and token management Password authenticat ...

  4. 【转】基于ArcGIS for javascript api 轨迹回放

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  5. Jquery实现图片管理

    这里实现的是一个图片的在线管理,类似于网络相册的图片管理. 效果图如下: 文件结构如下图: style2.css文件内容如下: @charset "utf-8"; *{;; } i ...

  6. # go微服务框架kratos学习笔记六(kratos 服务发现 discovery)

    目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批 ...

  7. spring boot通过@Bean注解定义一个Controller

    功能需求 提供一个公共的jar包给其他业务模块依赖,需要在这个公共的jar中暴露一个restful API 采用spring auto config机制,在公共jar包中定义spring.factor ...

  8. ubuntu下报错Sub-process /usr/bin/dpkg returned an error code (1)的解决方法

    cd /var/lib/dpkg sudo mv info info.bak #即备份一个info sudo mkdir info #新建一个新的info目录 然后采用以下命令重装那些出错的软件包 s ...

  9. dp-划分数 (递推)

    问题描述 : 有 n 个无区别的物品 , 将他们分成 不超过 m 堆, 问有多少种分法 ? 例如 : n = 4 , m = 3 , 则总共有的分法是 1 + 2 +1 , 0 + 1 + 3 , 0 ...

  10. 使用 OAS(OpenAPI标准)来描述 Web API

    无论哪种类型的Web API, 都可能需要给其他开发者使用. 所以API的开发者体验是很重要的. API的开发者体验, 简写为 API DX (Developer Experience). 它包含很多 ...