DOCKER 学习笔记8 Docker Swarm 集群搭建
前言
在前面的文章中,已经介绍如何在本地通过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 集群搭建的更多相关文章
- Docker Swarm Mode 学习笔记(创建 Swarm 集群)
Swarm 集群由管理节点与工作节点组成. 初始化集群 使用命令:docker swarm init 如果你的 Docker 主机有多个网卡, 拥有多个 IP 地址, 必须使用 --advertise ...
- 基于zookeeper的Swarm集群搭建
简介 Swarm:docker原生的集群管理工具,将一组docker主机作为一个虚拟的docker主机来管理. 对客户端而言,Swarm集群就像是另一台普通的docker主机. Swarm集群中的每台 ...
- Docker系列之swarm集群搭建
学习Docker很久了,今天分享一下Docker的swarm集群的搭建过程很简单 首先第一步是 每台机器上面都要安装docker 本人使用的是centos7操作系统,使用3太虚拟机,3太虚拟机必须网络 ...
- Docker swarm集群搭建教程
一.什么是Swarm Swarm这个项目名称特别贴切.在Wiki的解释中,Swarm behavior是指动物的群集行为.比如我们常见的蜂群,鱼群,秋天往南飞的雁群都可以称作Swarm behavio ...
- 分享:docker swarm集群搭建
[Y_H]实践原创 三台虚拟机:1台centOS , 2台ubuntu. 网上有用docker-machine创建虚拟机做的例子. 这里直接用VMware创建这三台虚拟机,然后用xshell连 ...
- docker swarm集群搭建以及使用滚动更新
基础环境,三台虚拟机 172.17.3.70 172.17.3.71 172.17.3.72 系统配置:centos 7,关闭selinux 需要优化的基础配置: [root@sw1 ~]# vim ...
- docker swarm集群搭建及使用Portainer、shipyard
一.规划 1.swarm01作为manager节点,swarm02和swarm03作为worker节点. # cat /etc/hosts 127.0.0.1 localhost 192.168. ...
- DOCKER 学习笔记7 Docker Machine 在阿里云实例化ECS 以及本地Windows 实例化虚拟机实战
前言 通过以上6小节的学习,已经可以使用DOCKER 熟练的部署应用程序了.大家都可以发现使用 DOCKER 带来的方便之处,因为现在的话,只是在一台服务器上部署,这样部署,我们只需要一条命令,需要的 ...
- DOCKER 学习笔记7 Docker Machine 建立虚拟机实战,以及错误总结
前言 通过以上6小节的学习,已经可以使用DOCKER 熟练的部署应用程序了.大家都可以发现使用 DOCKER 带来的方便之处,因为现在的话,只是在一台服务器上部署,这样部署,我们只需要一条命令,需要的 ...
随机推荐
- 信息管理java
代码: package 信息管理;//信1805-1 20183763 凌云 public class ScoreInformation { private String stunumber = &q ...
- 1072 开学寄语 (20分)C语言
下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其 QQ,封其电脑,夺其手机,收其 ipad,断其 wifi,使其百无聊赖,然后,净面.理发.整衣,然后思过.读书.锻炼.明智.开悟 ...
- OpenStack Identity API v3 (CURRENT)
Table Of Contents Identity API v3 (CURRENT) Authentication and token management Password authenticat ...
- 【转】基于ArcGIS for javascript api 轨迹回放
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- Jquery实现图片管理
这里实现的是一个图片的在线管理,类似于网络相册的图片管理. 效果图如下: 文件结构如下图: style2.css文件内容如下: @charset "utf-8"; *{;; } i ...
- # go微服务框架kratos学习笔记六(kratos 服务发现 discovery)
目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批 ...
- spring boot通过@Bean注解定义一个Controller
功能需求 提供一个公共的jar包给其他业务模块依赖,需要在这个公共的jar中暴露一个restful API 采用spring auto config机制,在公共jar包中定义spring.factor ...
- 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 ...
- dp-划分数 (递推)
问题描述 : 有 n 个无区别的物品 , 将他们分成 不超过 m 堆, 问有多少种分法 ? 例如 : n = 4 , m = 3 , 则总共有的分法是 1 + 2 +1 , 0 + 1 + 3 , 0 ...
- 使用 OAS(OpenAPI标准)来描述 Web API
无论哪种类型的Web API, 都可能需要给其他开发者使用. 所以API的开发者体验是很重要的. API的开发者体验, 简写为 API DX (Developer Experience). 它包含很多 ...