在Docker Toolbox和Boot2Docker中使用Volume Plugins


【编者的话】本文详细讲解了如何在你的笔记本上完成生产环境的搭建,对于存储有一个初步的介绍,非常适合自己动手,完成简单的集群环境搭建。

你曾经尝试过运行Docker Toolbox或者Volume Plugings吗?请跟着下面的步骤一步一步来。

Docker Toolbox是一个能让你在电脑上拥有完整Docker运行环境的小的工具集合。对于Docker 1.9来说,通过Toolbox来建立并运行一个完整的容器客户端或服务端,同时利用轻量级的Linux发行版Boot2Docker渐渐成为了主流的运行方式。下载Toolbox,然后安装和配置Docker Client、Machine、Compose、Kitematic和VirtualBox。

在Toolbox中,Docker Machine是向VirtualBox提供虚拟机实例的工具。这个虚拟机实例挂载了一个可以从包含Boot2Docker(B2D)引导的镜像文件。就其本身而言,B2D是一个可以在几秒钟启动,关注Docker Daemon运行状况,占用少量资源的超轻量级Linux ISO。这可以让你利用很少的资源,通过多个B2D实例组成的集群做测试。

什么是Volume Plugins?这里有一篇Docker的文章介绍了它们。简单来说它们允许我们在容器之外建立额外的存储空间,将存储内容与容器的文件系统分开。这里要着重说明的是最近我们发表了一篇关于VirtualBox和Volume Plugins的文章。与这篇文章不同的是,我们今天使用Docker Machine和B2D代替在Vagrant中的CentOS来部署和运行环境。在前一篇文章扩展了一些关于应用发现和volume pre-emption的内容,非常值得阅读。

对Docker Toolbox感兴趣吗?请继续阅读,我们会向你展示在Boot2Docker和VirtualBox中使用Volume Plugins的好处。 感谢@tianon@akihirosuda为了支持这个用例而更新到Boot2Docker。

我们将下面的内容拆分成三个部分:安装、部署和使用。

安装

第一步是从这里下载并安装Docker Toolbox。这样可以确保你拥有一个能够运行你的容器的运行环境。对Volume Plugin功能的一般要求是Boot2Docker能够和基础的VirtualBox实例通过我们下文描述的HTTP SOAP API通信。
01.png

为了启动SOAP Web Service需要在终端运行下面这个命令。命令'vbowebsv'加参数'-b'可以在后台运行。
$ VBoxManage setproperty websrvauthlibrary null
$ /Applications/VirtualBox.app/Contents/MacOS/vboxwebsrv -H 0.0.0.0 -v

部署

继续,我们准备从头开始部署新机器,来确保我们有一个可重复的进程。请打开一个新的终端窗口输入以下命令:
$ docker-machine create --driver=virtualbox testing12

你可以指定'virtualbox-boot2docker-url'参数来使用预发行版或者特定的Boot2Docker镜像。例如,我们在下面使用v.1.10.0-rc4版本。
$ docker-machine create --driver=virtualbox --virtualbox-boot2docker-url=https://github.com/boot2docker/boot2docker/releases/download/v1.10.0-rc4/boot2docker.iso testing12

注意:如果你重启了实例,你需要用下面的步骤重新配置Volume Plugin。

如果你使用了Boot2Docker 1.10+版本,为了确保volume正常工作,你需要将补丁放到正确路径下。运行下面的指令来安装补丁。如果是Boot2Docker 1.10版,这就不需要了。
$ docker-machine ssh testing12 "wget http://tinycorelinux.net/6.x/x86_64/tcz/udev-extra.tcz && tce-load -i udev-extra.tcz && sudo udevadm trigger"

下一步是安装为容器组织volumes的Volume Plugin。下面的命令是一条简单的安装REX-RAY的curl-bash命令。因为REX-RAY是无状态的,易于安装,且有一个VirtualBox驱动,所以它在Boot2Docker中运行很好。点击这里获取关于REX-RAY的更多信息。
$ docker-machine ssh testing12 "curl -sSL https://dl.bintray.com/emccode/rexray/install | sh -"

请按照下面的指导新建一个简单的配置文件。volumePath这个参数必须设定为一个你操作系统(如OS X)上可用的路径。这个参数定义了由VirtualBox在哪创建新的volume files,即vmdk。
$ docker-machine ssh testing12 "sudo tee -a /etc/rexray/config.yml << EOF
rexray:
storageDrivers:
- virtualbox
volume:
mount:
  preempt: false
virtualbox:
endpoint: http://10.0.2.2:18083
tls: false
volumePath: /Users/clintonkitson/VirtualBox Volumes
controllerName: SATA
"

启动Volume Plugin服务的最后一步是启动REX-Ray服务。如果这个服务启动失败,你需要利用'sudo rexray start -l debug'来获取更多的失败信息。
$ docker-machine ssh testing12 "sudo rexray start"

02.png

如上所示,现在你拥有一个Boot2Docker实例,该实例通过配置好的Volume Plugin运行,而Volume Plugin是利用VirtualBox和Virtual Media来提供其他volume入口的。尽管有一点超出了本篇文章的范围,但是下一步可以通过配置Docker Swarm来部署集群。我们将通过配置Docker CLI来操控Docker。

使用

$ eval $(docker-machine env testing12)

现在让我们了解一些Volume的基础功能。注意下面如何通过'docker volume'这个子命令来利用Docker CLI管理volumes。我们可以启用'-opt'标志来设置参数的大小等。
$ docker volume create --driver=rexray --name=test100 --opt=size=1

下面这个图描述了这个过程。在这个示例中,VirtualBox Virtual Media用来创建独立的volumes,这些volumes能够挂载到运行在VirtualBox VM或其他B2D实例上的容器中。
03.png

现在让我们继续了解如何运行一个有着稳定volume的容器。下面的图描述了这个过程。首先Docker Engine向Volume Plugin发出请求。从那里,VirtualBox的REX-Ray驱动利用SOAP Web服务来接收消息。这个接口用来完成添加设备到虚拟机、在系统中发现设备、格式化设备和挂载设备到系统的整个流程。最后一步是绑定挂载路径到容器内。
$ docker run -ti --volume-driver=rexray -v test100:/test100 busybox

04.png

如果上述过程都成功了,你将看到如下所示的提示信息。最后的一个命令'df /test100'是用来验证我们挂载的额外volume '/dev/sdb'。
05.png

另一个你可以查看的位置是在VirtualBox Manager中,你可以看到'SATA Port2'对应我们创建的test100硬盘卷。
06.png

如果你对整个生命周期感兴趣,可以通过运行'exit'命令来观察卸载volume和从SATA端口检测硬盘的过程。

结束语

下一步该做什么?退出,重复,通过管理存储可以创建一些共享volumes的实例。最棒的是你现在可以轻松启动这些轻量级的Boot2Docker实例。通过这些操作,你可以使用Docker平台的其他工具,如Swarm。通过上面展示的Volume Plugins,你可以利用容器来部署一些需要存储的应用。

你还在想什么?你可以像使用服务器那样使用你的笔记本。

原文链接:Volume Plugins with Docker Toolbox and Boot2Docker(翻译:邢毅勋 审校:高婧雅)

===============================================================
译者介绍
邢毅勋,亚信研发工程师,热爱开源好青年。

0 个评论

要回复文章请先登录注册