当前位置: 首页 > news >正文

docker集群演练

目录

  • docker集群演练
    • 使用docker-maching创建两台hyper-v虚拟机
      • 创建node1节点
      • 创建node2节点
      • 创建node3节点
    • 使用docker swarm配置集群
    • 使用docker service部署应用
    • 总结

docker集群演练

​ 本文我将创建一个docker集群,通过docker集群的创建以及应用的部署来简单的介绍一下docker工具链的使用,我会尽量多的介绍docker工具及命令参数。

集群环境介绍:

​ 我们将部署一个只有3台机器的集群环境,由于没有太多的硬件设备,所以这里我将使用2台虚拟机+1台物理机构建集群环境,其中2台虚拟机我使用hyper-v创建(因为我的开发环境是win10,hyper-v更方便些),另一台我用ubuntu。

  • node1的IP地址:194.168.1.51

  • node2的IP地址:194.168.1.52

  • node3的IP地址:194.168.1.90 (ubuntu)

使用docker-maching创建两台hyper-v虚拟机

创建node1节点

我们先来创建node1节点,执行如下命令:

docker-machine --storage-path v:/docker create node1 --driver hyperv --hyperv-cpu-count  1 --hyperv-memory 2048 --hyperv-static-macaddress 000000000051 --hyperv-virtual-switch wifi

命令解释:

  • --storage-path参数这里有两个作用:

    1. 指定我们创建虚拟机需要的boot2docker.iso文件所在目录以及一些证书文件位置,这些证书文件用来作为创建成功后的linux系统的登陆凭据
    2. 指定我们创建成功后的linux系统的存储位置

    boot2docker.iso文件是专为docker而生的linux系统发布镜像,它体积很小只有50M左右,系统内仅包含了docker工具

  • create用来指定我们需要创建的虚拟机名称(node1),已经虚拟机的一些配置信息

  • --driver用来指定我们将要创建的虚拟机是基于hyper-v的,查看更多支持的虚拟机驱动。

  • --hyperv-cpu-count指定创建的hyper-v虚拟机cpu核心数

  • --hyperv-memory指定创建的hyper-v虚拟机内存

  • --hyperv-static-macaddress指定创建的虚拟机的静态mac地址,我这里设置一个自定义静态地址是为了在路由器上设置mac与ip的绑定,以确保虚拟机每次都会获取相同的ip地址

  • --hyperv-virtual-switch指定创建的虚拟机使用的虚拟网卡名称,这一步需要你先在hyper-v中配置一个虚拟网卡,至于网卡以什么方式联网由你确定,我这里使用的桥接到我的物理网卡

    更多虚拟机的配置命令请查看对应的虚拟机驱动参数

创建node2节点

将上一步命令中的node1改为node2,将000000000051改为000000000052,修改后的命令如下:

docker-machine --storage-path v:/docker create node2 --driver hyperv --hyperv-cpu-count  1 --hyperv-memory 2048 --hyperv-static-macaddress 000000000052 --hyperv-virtual-switch wifi

查看我们创建的虚拟机信息

查看我们使用docker-machine创建的虚拟机列表:

docker-machine --storage-path v:/docker ls

查看某一台虚拟机的信息:

docker-machine --storage-path v:/docker env node1
docker-machine --storage-path v:/docker config node1
docker-machine --storage-path v:/docker ip node1
# .... 更多命令查看docker-machine --help

删除我们创建的虚拟机

如果你觉得之前创建的虚拟机不符合要求可以删除它重新创建:

docker-machine --storage-path v:/docker rm node1

因为我们之前修改了虚拟机的默认存储位置,所以每次执行命令都要带上--storage-path参数

创建node3节点

docker-machine支持将现有的机器导入docker-machine中:

  • 需要你的机器配置ssh秘钥登录,ssh秘钥登录配置教程
  • 确保node1,node2,node3在同一子网,并可以相互访问

如果node3机器上的docker没有暴露在局域网中

这种情况下docker-machine会在node3上安装docker并将docker暴露在局域网中,还会修改node3的主机名:

# 这里要求将命令行执行路径重定向到node3_rsa文件的目录
# node3_rsa是node3的登陆私钥
docker-machine --storage-path v:/docker create node3 --driver generic --generic-ip-address 194.168.1.90 --generic-ssh-user root --generic-ssh-key node3_rsa

如果node3上没有安装docker,那么这一步执行时间会比较长,主要是要联网下载docker。如果安装了docker,则会检查docker是否暴露在局域网中,如果没有则会配置docker暴露在局域网中。

如果node3机器上的docker已经暴露在局域中(这种方式存在的意义不大)

这种个情况下我们可以直接导入node3到docker-machine中,但是这种方式导入的主机无法通过docker-machine管理

docker-machine --storage-path v:/docker create node3 --driver none --url=tcp://194.168.1.90:2376

使用docker swarm配置集群

配置node1作为manager节点:

# 使用docker-machine执行命令,其实相当于先ssh到node1,再执行docker swarm init,这一点也体现了docker-machine的方便之处,我们只需要指定节点名称就行,不需要关心节点地址
docker-machine --storage-path v:/docker ssh node1 'docker swarm init'

# 执行以上命令后会看到如下提示,将该命令分别在node2,node3的机器上执行就可以创建两个worker节点:
docker swarm join --token SWMTKN-1-13n2frpoil0zf1nza58feijwgnv368rbhmupw7875ohwg31gk1-5p0g89lu8oqbfy5wf4ijicqt2 194.168.1.51:2377

# 如果要部署多个manager节点,执行如下命令查看如何加入多个manager:
docker-machine --storage-path v:/docker ssh node1 'docker swarm join-token manager'

配置node2作为worker节点:

docker-machine --storage-path v:/docker ssh node2 'docker swarm join --token SWMTKN-1-13n2frpoil0zf1nza58feijwgnv368rbhmupw7875ohwg31gk1-5p0g89lu8oqbfy5wf4ijicqt2 194.168.1.51:2377'

配置node3作为worker节点:

docker-machine --storage-path v:/docker ssh node3 'docker swarm join --token SWMTKN-1-13n2frpoil0zf1nza58feijwgnv368rbhmupw7875ohwg31gk1-5p0g89lu8oqbfy5wf4ijicqt2 194.168.1.51:2377'

到此我们就创建了有一个manager和两个worker的集群。

使用docker service部署应用

docker-machine --storage-path v:/docker ssh node1 'docker service create -p 80:80 --replicas 1 --name nginx_test daocloud.io/library/nginx'

执行上面命令我们就创建了一个nginx_test服务,该服务启动一个nginx应用,在浏览器中访问任意node的80端口都可以访问到这个nginx应用,这就是docker服务的魅力。

  • -p参数发布一个端口映射到nginx应用的端口,这里服务的端口是80,nginx的端口为80,如果你在运行nginx容器的node中通过docker ps -a命令查看运行的容器这里并不会显示nginx容器的80端口绑定在了node的哪一个端口上,但是通过任意node的80端口你依然可以访问nginx,这是因为docker集群帮我们做了映射,docker集群网络是一个复杂的话题,有机会后面再研究。
  • --replicas改参数指定需要运行nginx容器的实例个数,我们可以运行任意多个容器实例,当你访问任意node的80端口时,docker集群都会帮你路由到不同的容器上。
  • --name指定docker服务的名称,你可以设置为任意字符串。

总结

​ 本篇文章的开始我们讲解了如何使用docker-machine创建一些docker节点,并演示了如何创建docker集群并在docker集群上部署了一个服务。

​ 这篇只能作为docker的入门文章,我们简要介绍了docker中的一些工具的简单使用,这对于整个docker来说只能算是冰山一角 ,后续我会继续研究docker,主要是对网络这一块做研究,掌握docker支持的网络模型才是最基础最重要的部分。

转载于:https://www.cnblogs.com/guodf/p/9832059.html

相关文章:

  • UVA11090 Going in Cycle!!
  • 继承派生 属性查找
  • 针对shiro框架authc拦截器认证成功后跳转到根目录,而非指定路径问题
  • day06 再谈编码
  • React Native搭建开发环境 之 --走过的坑
  • noip2018复习计划啊
  • Linux之iptables(一、防火墙的概念)
  • 基于版本一致性算法
  • golang中的mutex锁
  • python中的__str__ __name__ 和__call__方法
  • JAVA程序打包方法-挺好
  • 【模拟题】异或 (二进制)
  • Xposed Hook Anti-hook
  • Failed to load property source from location 'classpath:/application.properties'
  • embed-it_Integrator memory compile工具使用之三
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Linux CTF 逆向入门
  • October CMS - 快速入门 9 Images And Galleries
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • SOFAMosn配置模型
  • vagrant 添加本地 box 安装 laravel homestead
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 离散点最小(凸)包围边界查找
  • 实战|智能家居行业移动应用性能分析
  • 使用 Docker 部署 Spring Boot项目
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 移动端解决方案学习记录
  • 译自由幺半群
  • 应用生命周期终极 DevOps 工具包
  • 用Visual Studio开发以太坊智能合约
  • - 转 Ext2.0 form使用实例
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​MySQL主从复制一致性检测
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #控制台大学课堂点名问题_课堂随机点名
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (BFS)hdoj2377-Bus Pass
  • (C#)一个最简单的链表类
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (强烈推荐)移动端音视频从零到上手(下)
  • (一)基于IDEA的JAVA基础10
  • (转)setTimeout 和 setInterval 的区别
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .bat批处理(六):替换字符串中匹配的子串
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET CORE 第一节 创建基本的 asp.net core
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置