• docker集群演练


    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支持的网络模型才是最基础最重要的部分。

  • 相关阅读:
    安装篇-安装Nacos
    安装篇-安装RabbitMQ
    C类型字符串和字符数组的区别
    数据结构之链表操作
    Android WebView学习
    MySQL初级学习
    Android LinearLayout深入学习
    排序算法总结
    Apache Mina-1
    Nginx+Keepalived 集群方案
  • 原文地址:https://www.cnblogs.com/guodf/p/9832059.html
Copyright © 2020-2023  润新知