Docker Swarm mode 详解
使用 docker swarm
Dcoker 内置的集群管理的工具,Docker CE 1.12+
。注意与旧的 Docker Swarm
区分开来。
OS: CoreOS 1562.1.0 3个节点
OS: macOS + Docker Machine
Docker Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令 docker swarm
。
有关集群的 Docker 命令如下:
docker swarm
:集群管理,子命令有 init, join, join-token, leave, update
docker node
:节点管理,子命令有 demote, inspect, ls, promote, rm, ps, update
docker service
:服务管理,子命令有 create, inspect, ps, ls ,rm , scale, update
docker stack/deploy
:用于多应用部署 docker stack deploy ...
创建
使用 Docker Machine 创建集群
khs1994.com
备注:docker-machine create --swarm
等 --swarm*
是旧的 Docker Swarm
,与本文提到的 Swarm mode
没有关系。
Docker Machine:https://www.khs1994.com/docker/machine.html
$ docker-machine create
-d virtualbox
--engine-registry-mirror https://registry.docker-cn.com
swarm1
$ docker-machine create
-d virtualbox
--engine-registry-mirror https://registry.docker-cn.com
swarm2
$ docker-machine create
-d virtualbox
--engine-registry-mirror https://registry.docker-cn.com
swarm3
使用 docker-machine ssh MACHINE_NAME
通过 SSH 登录到机器。
CoreOS 集群
创建一个 CoreOS 3 节点集群:https://www.khs1994.com/docker/coreos/install-disk-new.html
初始化集群
在其中一个节点执行
$ docker swarm init --advertise-addr 192.168.99.104
如果机器有多个网卡,请使用 --advertise-addr
参数指定 IP
之后执行
$ docker swarm join-token [OPTIONS] (worker|manager)
按照提示在另外两个节点执行命令加入集群。
查看节点
只能在管理节点使用此命令
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
1iukw9dq9ltg2qfich77yk31x * swarm1 Ready Active Leader
3a63ymhnbh07vy54jnmn9j3ra swarm2 Ready Active
rvqgt0vsl3grhxlr0jdf2gnur swarm3 Ready Active
创建服务
$ docker service create --replicas 2 --name nginx nginx:alpine
查看服务状态
$ docker service ls
查看服务详情
$ docker service ps nginx
负载均衡
$ docker service create --replicas 2 --name nginx -p 7080:80 nginx:alpine
查看服务状态
$ docker service ps nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
jqo9c9h3x0kz nginx.1 nginx:alpine coreos2 Running Running 8 seconds ago
dbcy4z9jpj6k nginx.2 nginx:alpine coreos1 Running Running 8 seconds ago
退出一个节点
$ docker service ps nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
6jxbotcy3q7y nginx.1 nginx:alpine coreos3 Running Running 2 seconds ago
jqo9c9h3x0kz _ nginx.1 nginx:alpine coreos2 Shutdown Complete 3 minutes ago
dbcy4z9jpj6k nginx.2 nginx:alpine coreos1 Running Running 3 minutes ago
coreos2
节点关机之后,原来空闲的 coreos3
节点自动启动了一个容器。
减少实例数量
$ docker service scale nginx=2
docker stack
$ docker stack deploy -c docker-stack.yml lnmp
$ docker stack ls
$ docker stack ps lnmp
$ docker stack services lnmp
$ docker stack rm lnmp
More Information
- (cljs/run-at (JSVM. :all) "细说函数")
- 动手写个数字输入框2:起手式——拦截非法字符
- Linux安装DNSmasq搭建自己的公共DNS
- (cljs/run-at (JSVM. :all) "一次说白DataType、Record和Protocol")
- 虚拟主机多域名转向
- .top域名名声大噪,这枚单字符10天建站上线!
- 编译期类型检查 in ClojureScript
- Chrome Extension in CLJS —— 搭建开发环境
- 双拼域名lanben.com以三万元成交
- 动手写个数字输入框3:痛点——输入法是个魔鬼
- Thinking in React Implemented by Reagent
- ssm整合Redis
- 前端魔法堂——调用栈,异常实例中的宝藏
- 开启MySQL的binlog日志
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C# Foreach循环本质与枚举器
- Java中的时间和日期(一):有关java时间的哪些坑
- Java中的时间和日期(二):java时间存储的基本原理
- 常用SQL语句
- Java中的时间和日期(三):java8中新的时间API介绍
- Java中的时间和日期(四):与java8时间API有关的一些总结和补充
- Head First设计模式——策略模式
- 可重用性的6个级别
- 您可能不需要使用Vue 3的Vuex
- 谈一谈若干的K-V NoSQL应用:LevelDB、Redis、Tair、RockesDB
- 高通量数据中批次效应的鉴定和处理(六)- 直接校正表达矩阵
- Go viper 配置文件读取工具
- spring security默认访问权限判定源码
- Springboot+mybatis最简单的增删改查写法
- Head First设计模式——观察者模式