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 initdocker 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的更多相关文章

  1. Docker容器集群管理之Swarm

    Docker容器集群管理主流方案 Swarm Docker公司自研发的集群管理系统. Kubernetes Google开源的一个容器集群管理系统,用于自动化部署.扩展和管理容器应用.也称为K8S ...

  2. 一步步创建第一个Docker App —— 3. 创建一个集群Swarm

    原文:https://docs.docker.com/engine/getstarted-voting-app/create-swarm/ 初始化集群 Swarm 1. 使用 ssh 命令登录 man ...

  3. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...

  4. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

  5. Docker 0x13: Docker 构建集群/服务/Compose/分布式服务栈

    目录 Docker 构建集群/服务/Compose/分布式服务栈 集群 初始化集群服务 安装docker-machine 管理节点和工作节点 docker集群构建完成 集群中部署应用 集群服务访问特性 ...

  6. docker的集群管理工具

    docker 集群管理三剑客: docker compose: Compose 是用于定义和运行多容器 Docker 应用程序的工具.通过 Compose,您可以使用 YML 文件来配置应用程序需要的 ...

  7. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

  8. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

  9. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...

随机推荐

  1. git sh.exe 乱码

    其实很简单,只需要在 git 安装目录中的 etc 目录下修改 bash.bashrc 文件. 在该文件头部加入: export LANG=zh_CN.utf-8alias ls='ls --show ...

  2. 大量数据通过Phoenix插入到hbase报错记录(2)

    错误: Caused by: java.sql.SQLException: ERROR (INT10): Unable to find cached index metadata 解决办法: 在hba ...

  3. ubuntu之路——day15.2 只用python的numpy在底层检验正则化对模型的影响

    首先感谢这位博主整理的Andrew Ng的deeplearning.ai的相关作业:https://blog.csdn.net/u013733326/article/details/79827273 ...

  4. flask上传文件到指定路径

    flask上传文件到指定路径 项目结构如下: 首先是:视图函数uload_file.py,代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- fro ...

  5. 在本地搭建hyperledger fabric 网络

    参考了官方文档,直接就可以了https://hyperledger-fabric.readthedocs.io/en/latest/build_network.html 很好用 ➜ ~ cd $GOP ...

  6. git初次登陆使用

    一. 安装git 二. 在当前项目根目录点击鼠标右键,出来下图: 点击进入git命令行界面. 三.初始化项目 git init 四. 添加所有文件到项目中 git add . 五. 尝试提交所有文件 ...

  7. matlab学习笔记10_6 字符串与数值间的转换以及进制之间的转换

    一起来学matlab-matlab学习笔记10 10_6 字符串与数值间的转换以及进制之间的转换 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合 ...

  8. LODOP打印超文本有边距不居中的情况2

    之前的博文:LODOP打印项水平居中.之前的博文有介绍超文本和纯文本的居中方式,设置超文本打印项居中时,注意打印内容要在打印项本身宽度里居中.之前的博文超文本用的是个表格,而且表格本身没有margin ...

  9. consul多数据中心搭建 【h】

    自建IDC后面简称own.阿里云机房ali.腾讯云机房txown机房:内网10.10.10.0/24,边界节点,10.10.10.100/101.xxx.80.xxxali机房:内网10.10.10. ...

  10. 【视频开发】四大图像库:OpenCV/FreeImage/CImg/CxImage

    1.对OpenCV 的印象:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法: 然后将图像格式和矩阵运算, ...