在Docker Toolbox和Boot2Docker中使用Volume Plugins
来自: http://dockone.io/article/1089
【编者的话】本文详细讲解了如何在你的笔记本上完成生产环境的搭建,对于存储有一个初步的介绍,非常适合自己动手,完成简单的集群环境搭建。
你曾经尝试过运行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通信。
为了启动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的更多信息 here 。
$ 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"
如上所示,现在你拥有了一个配置了VirtualBox和它的Virtual Media提供额外的volume入口的Volume Plugin的Boot2Docker实例。尽管有一点超出了本篇文章的范围,但是下一步可以通过配置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被用来创建能够在VirtualBox VM或其他B2D实例的单独的volumes。
现在让我们继续了解如何运行一个有着稳定volume的容器。下面的图描述了这个过程。首先Docker Engine向Volume Plugin发出请求。从那里VirtualBox的REX-Ray驱动利用SOAP Web服务来接收消息。这个接口用来完成添加设备到虚拟机、在系统中发现设备、格式化设备和挂载设备到系统整个流程。最后一步是绑定挂载路径到容器内。
$ docker run -ti --volume-driver=rexray -v test100:/test100 busybox
如果上述过程都成功了,你将看到如下所示的提示信息。最后的一个命令'df /test100'是用来验证我们挂载的额外volume '/dev/sdb'。
另一个你可以查看的位置是在VirtualBox Manager中你可以看到'SATA Port2'对应我们创建的test100硬盘卷。
如果你对整个生命周期感兴趣,可以通过运行'exit'命令来观察卸载volume和从SATA端口检测硬盘的过程。
结束语
下一步该做什么?退出,重复,通过管理存储可以创建一些共享volumes的实例。最棒的是你现在可以轻松的启动这些轻量级的Boot2Docker实例。通过这你可以你可以使用Docker平台的其他工具如Swarm。通过上面展示的Volume Plugins,你可以利用容器来部署一些需要存储的应用。
你还在想什么?你可以像使用服务器那样使用你的笔记本。
原文链接: Volume Plugins with Docker Toolbox and Boot2Docker (翻译:邢毅勋)
===============================================================
译者介绍
邢毅勋,亚信研发工程师,热爱开源好青年。