在之前的文章中我们介绍了很多docker相关的基础概念,我们了解了如何将一个应用程序build为一个镜像,并通过该镜像创建一个容器实例,使得我们的应用程序可以在容器中运行;同时通过学习docker compose,了解了如何通过docker compose来管理一组服务;以及通过学习docker swarm了解了如何管理docker容器集群。在我们的实际开发过程中,开发环境如果我们也弄多个vm server来搭建集群并部署服务的话,这无疑会给我们的开发带来很大的不便,本篇文章就为大家介绍一下如何在单主机server上实现多docker虚拟主机的创建和服务部署(同样适用于多sever的docker集群管理和服务部署)。
在之前的Docker Swarm Mode简介中我们介绍了docker集群,node以及docker swarm模式,swarm由多个节点组成,可以是物理节点,也可以是虚拟节点,我们可以在其中一个节点中通过运行docker swarm init
以启用swarm mode模式,并使当前的节点成为一个集群管理器,然后在其他节点上运行docker swarm join, 让他们作为worker加入到集群中。本章我们在一台Windows 10操作系统的机器上创建出两个虚拟vm,然后将这两个虚拟vm转换为一个集群。首先需要了解一下Docker Machine。
Docker Machine
docker machine是docker三剑客之一,除了docker machine之外还有之前我们已经介绍过的docekr compose和docker swarm。通过docker machine我们可以在主机上快速创建包含docker环境的虚拟机。docker machine的安装已经被集成到了docker 的安装过程中,我们无需单独安装。我们可以通过docker-machine version
指令查看当前机器上的版本信息。如图所示:
Create Cluster
在Windows 10 系统中我们使用hyperv驱动来创建Docker Machine。在创建Docker Machine之前,必须事先在Hyper-v管理器中新建一个外部虚拟交换机,以便在创建docker machine的时候执行虚拟交换机的名称。
Create a Virtual Switch
1. 运行Hyper-v管理器,如图所示:
2. 点击右侧的Virtual Switch Manager,弹出如图所示的dialog:
3. 选择External的virtual switch并点击Create Virtual Switch按钮,如图所示:
4. 输入Virtual Switch的名称,并勾选中Allow management operating system to share this network adapter, 如图所示:
5. 点击apply button,并点击ok button,这样我们就创建好了一个virtual switch
Create VMs
有了virtual switch之后,我们需要通过docker-machine create指令来创建两个包含docker环境的虚拟机,作为我们集群中的两个节点,具体指令如下所示:
docker-machine create -d hyperv --hyperv-virtual-switch DockerVS vm1
docker-machine create -d hyperv --hyperv-virtual-switch DockerVS workervm1
通过上述指令我们创建了两个包含docker环境的vm,分别为vm1和workervm1,我们可以通过指令docker-machine ls
来查看当前主机所创建的vm信息,如图所示:
初始化Docker Swarm
创建好vm之后,我们来开始搭建包含两台vm的docker swarm,关于docker swarm的相关知识我们已经在 (Docker Swarm Mode简介)中进行了介绍,这里我们就不进行过多的介绍了,直接动手操作。首先我们通过docker-machine ssh vm1
指令将当前命令行切入到指定的vm1中,如图所示:
执行docker swarm init
指令初始化docker swarm,同时将vm1作为swarm manager,如图所示:
在命令的执行结果中我们可以看到:to add a worker to this swarm, run the following command,我们以同样的方式进入到workervm1中,然后执行指令:
docker swarm join --token tokenstr manageripaddr:2377
如图所示:
从提示中我们可以看到workervm1已经作为worker节点加入到了swarm中。我们通过docker-machine ssh vm1
指令进入到vm1中,然后执行docker-machine node ls
指令查看当前swarm中的节点信息,如图所示:
通过以上这些操作我们便在一台主机上搭建出了包含2台vm的docker集群。
注意:Swarm管理节点是swarm中可以执行命令或授权其他机器加入swarm作为工作节点的唯一机器。工作节点仅用于提供功能,并且无权告知任何其他机器它可以做什么 和不能做什么。
接下来就是向集群中部署服务,需要注意的是在部署服务之前,我们需要将主机中的docker-compose.yml文件通过指令
docker-machine scp docker-compose.yml vm1:~
copy到集群的管理机器vm1中,接下来服务部署的部分大家可以参照Docker Swarm Mode简介中的 “向集群中部署服务“的章节。
注意:最后站点的访问地址为http://(vm1 ip or workervm1 ip):port
希望以上讲解能让大家对Docker有更深入的了解和学习。