单主机上实现多docker虚拟主机的创建和服务部署

2,783 阅读4分钟

在之前的文章中我们介绍了很多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有更深入的了解和学习。


上一章(Docker Swarm Mode简介)

下一章(Docker实践过程中遇到的问题总结 )