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参数这里有两个作用: 指定我们创建虚拟机需要的boot2docker.iso文件所在目录以及一些证书文件位置,这些证书文件用来作为创建成功后的linux系统的登陆凭据 指定我们创建成功后的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
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信