docker(四):集群swarm
docker使用入门(四):集群swarm
swarm是一组位于同一集群且运行docker的机器,用户可以通过swarm manager向swarm输入命令,swarm中的机器可以是虚拟机也可以是物理机。
swarm中分为swarm manager和workers。用户通过swarm manager管理swarm,worker只提供处理能力,对worker的管理操作都是通过swarm manager进行的
创建swarm
创建虚拟机
linux下的docker-machine需要手动安装,安装方案见官方教程
此外还需要在linux上安装virtualbox,运行以下命令进行安装
sudo apt-get install virtualbox
运行以下命令创建两台虚拟机
docker-machine create --driver virtualbox myvm1
docker-machine create --driver virtualbox myvm2
第一次运行时,需要从github上下载文件,如果下载较慢,可以提前将boot2docker.iso下载到 ~/.docker/machine/cache/
使用docker-machine ls可以列出虚拟机的信息
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
myvm1 - virtualbox Running tcp://192.168.99.102:2376 v19.03.1
myvm2 - virtualbox Running tcp://192.168.99.100:2376 v19.03.1
配置swarm
使用docker-machine ssh可以向虚拟机传达指令,现在使用以下指令将vm1设置为swarm manager,令其能够执行swarm管理命令并且验证worker加入swarm。
docker-machine ssh myvm1 "docker swarm init --advertise-addr <myvm1 ip>"
执行结果如下
$ docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.102"
Swarm initialized: current node (th2pw563bvvfzvqkd98tsne52) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-33l8tomuwv9cyt9ig54cztdpl4h9kyfc5vimlv58mb6zdn4fiw-dn3ic01jklavcvvsb8ltr86bu 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和docker swarm join命令通常使用端口2377执行,docker-machine ls使用端口2376执行,要确保这些端口不被占用
使用以下命令将vm2添加到swarm中
docker-machine ssh myvm2 "docker swarm join \
--token <token> \
<ip>:2377"
执行结果如下
$ docker-machine ssh myvm2 " docker swarm join --token SWMTKN-1-33l8tomuwv9cyt9ig54cztdpl4h9kyfc5vimlv58mb6zdn4fiw-dn3ic01jklavcvvsb8ltr86bu 192.168.99.102:2377"
This node joined a swarm as a worker.
myvm2中执行的命令可以直接复制添加myvm1时返回的命令提示信息
在manager中运行docker node ls可以查看节点信息
$ docker-machine ssh myvm1 "docker node ls"
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
th2pw563bvvfzvqkd98tsne52 * myvm1 Ready Active Leader 19.03.1
figr3d9s2dhwff1fjxuzo1jvw myvm2 Ready Active 19.03.1
将应用程序部署到swarm上
关联manager和shell
运行以下指令将shell与vm1关联到一起
$ docker-machine env myvm1
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.102:2376"
export DOCKER_CERT_PATH="/home/yzh/.docker/machine/machines/myvm1"
export DOCKER_MACHINE_NAME="myvm1"
# Run this command to configure your shell:
# eval $(docker-machine env myvm1)
执行以下命令使配置生效
eval $(docker-machine env myvm1)
执行成功后,在当前shell中输入的命令都会在myvm1中执行,执行docker-machine ls可以看到myvm1的状态已经改变
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
myvm1 * virtualbox Running tcp://192.168.99.102:2376 v19.03.1
myvm2 - virtualbox Running tcp://192.168.99.100:2376 v19.03.1
以上配置仅在当前shell有效,在其他shell中需要重新配置,也可在当前shell重新执行以上指令覆盖原有的设置。
部署应用程序
将应用程序部署到swarm的命令与之前一样,不过现在该命令执行在与manager关联的shell上,通过manager在swarm上执行
docker stack deploy -c docker-compose.yml hello
执行docker stack ps getstartedlab可以发现实例分布在不同的虚拟机上,实现负载均衡
$ docker stack ps hello
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
cm0siz2mmwbt hello_web.1 yezh01/getstart:v1.0 myvm2 Running Preparing 19 seconds ago
8a6nlkz0b0di hello_web.2 yezh01/getstart:v1.0 myvm2 Running Preparing 19 seconds ago
dx3g10vswgs8 hello_web.3 yezh01/getstart:v1.0 myvm1 Running Preparing 19 seconds ago
lr2mi3gpjgcz hello_web.4 yezh01/getstart:v1.0 myvm2 Running Preparing 20 seconds ago
sax7rtkm3ro4 hello_web.5 yezh01/getstart:v1.0 myvm1 Running Preparing 20 seconds ago
测试应用程序
可以通过任意一个虚拟机的ip地址访问应用程序,而且访问效果相同,都可以访问到swarm中的所有运行实例,在swarm中的示意图如下所示

相关命令
docker-machine create --driver virtualbox myvm1 # Create a VM (Mac, Win7, Linux)
docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1 # Win10
docker-machine env myvm1 # View basic information about your node
docker-machine ssh myvm1 "docker node ls" # List the nodes in your swarm
docker-machine ssh myvm1 "docker node inspect <node ID>" # Inspect a node
docker-machine ssh myvm1 "docker swarm join-token -q worker" # View join token
docker-machine ssh myvm1 # Open an SSH session with the VM; type "exit" to end
docker node ls # View nodes in swarm (while logged on to manager)
docker-machine ssh myvm2 "docker swarm leave" # Make the worker leave the swarm
docker-machine ssh myvm1 "docker swarm leave -f" # Make master leave, kill swarm
docker-machine ls # list VMs, asterisk shows which VM this shell is talking to
docker-machine start myvm1 # Start a VM that is currently not running
docker-machine env myvm1 # show environment variables and command for myvm1
eval $(docker-machine env myvm1) # Mac command to connect shell to myvm1
& "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env myvm1 | Invoke-Expression # Windows command to connect shell to myvm1
docker stack deploy -c <file> <app> # Deploy an app; command shell must be set to talk to manager (myvm1), uses local Compose file
docker-machine scp docker-compose.yml myvm1:~ # Copy file to node's home dir (only required if you use ssh to connect to manager and deploy the app)
docker-machine ssh myvm1 "docker stack deploy -c <file> <app>" # Deploy an app using ssh (you must have first copied the Compose file to myvm1)
eval $(docker-machine env -u) # Disconnect shell from VMs, use native docker
docker-machine stop $(docker-machine ls -q) # Stop all running VMs
docker-machine rm $(docker-machine ls -q) # Delete all VMs and their disk images
相关链接
https://docs.docker.com/get-started/part4/
docker(四):集群swarm的更多相关文章
- Docker容器集群管理之Swarm
Docker容器集群管理主流方案 Swarm Docker公司自研发的集群管理系统. Kubernetes Google开源的一个容器集群管理系统,用于自动化部署.扩展和管理容器应用.也称为K8S ...
- 一步步创建第一个Docker App —— 3. 创建一个集群Swarm
原文:https://docs.docker.com/engine/getstarted-voting-app/create-swarm/ 初始化集群 Swarm 1. 使用 ssh 命令登录 man ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...
- Docker 0x13: Docker 构建集群/服务/Compose/分布式服务栈
目录 Docker 构建集群/服务/Compose/分布式服务栈 集群 初始化集群服务 安装docker-machine 管理节点和工作节点 docker集群构建完成 集群中部署应用 集群服务访问特性 ...
- docker的集群管理工具
docker 集群管理三剑客: docker compose: Compose 是用于定义和运行多容器 Docker 应用程序的工具.通过 Compose,您可以使用 YML 文件来配置应用程序需要的 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...
随机推荐
- WinDbg扩展
WinDbg的扩展,也可以叫插件.它用于实现针对特定调试目标的调试功能,用于扩展某一方面的调试功能.扩展的实现是通过扩展模块(DLL)实现的.Windbg本身已经包含了很多扩展命令,这些扩展为这Win ...
- windows串口编程Win32,PComm串口开发
https://blog.csdn.net/u011430225/article/details/51496456 https://blog.csdn.net/eit520/article/detai ...
- php在Linux下的相对路径问题
如图所示,我在 /root/phpcode/ 下面有两个php文件. a.php 与 b.php,我用 a.php 去 require b.php ,然后 b.php 输出 1. 现在我在 /root ...
- 浅谈 Miller-Robbin 与 Pollard Rho
前言 $Miller-Robbin$ 与 $Pollard Rho$ 虽然都是随机算法,不过用起来是真的爽. $Miller Rabin$ 算法是一种高效的质数判断方法.虽然是一种不确定的质数判断法, ...
- clion ctrl+鼠标左键不能调到函数实现
问题:ctrl+鼠标左键只能在函数定义和申明之间跳转,不能跳转到implement,如果按ctrl+shift+B会报“no implement”. 解决:更改CMakeList文件,更改版本号. c ...
- SDN初体验(软件定义网络实验一)
作业说明 本次实验步骤2.3是在机房环境下完成的,步骤1.4是在自己笔记本上重新配置完成的,所以环境.用户名什么的会略有差别. 1. 安装轻量级网络仿真工具Mininet 为了节约课程时间,实验室机房 ...
- debian10使用国内源安装docker以及一些使用方法
首先, 我的环境是debian, 容器是centos debian 安装添加新存储库所需的依赖项 1 sudo apt install ca-certificates curl software-pr ...
- 动态代理之投鞭断流!看一下MyBatis的底层实现原理
转:https://mp.weixin.qq.com/s?__biz=MzI1NDQ3MjQxNA==&mid=2247486856&idx=1&sn=d430be5d14d1 ...
- 基于Hive的对BiliBili用户信息进行数据分析
用户表字段信息: 1.查出前1000位用户的用户名,关注数和粉丝数. 2.查询关注数大于100的用户的用户名和关注数. 3.查询粉丝数大于100的用户的用户名,粉丝数. 4.查询id为1000的用户的 ...
- Python 初级 6 循环 (二)
一.复习 1 for循环 for looper in [1, 2, 3, 4]: print("hello") 1) 每次循环开始,会依次把列表中的数按顺序赋值给looper,第一 ...