本地建立的Docker容器当然最简单的就是通过Ubuntu或者CentOS系统,考虑到开发测试环境通常是Windows的环境,当然也有文艺青年用的Mac系统,这样就不能直接在本地跑Docker了,简单的方法就是通过下载boot2docker项目在本地运行Docker环境,boot2docker是基于Tiny Core Linux构建的轻量级Linux 发行版,主要用于运行Docker容器,只有27MB大小完全运行于内存中,启动时间号称只有5秒钟;那么在Windows环境通常有两种方法,一种通过Oracle提供的Virtualbox运行的环境,当然对于有了Windows 8之后版本的环境可以直接通过Hyper-V虚拟机实现。

考虑到工作的便利条件,那就直接在Windows 8.1的Hyper-V上运行Boot2Docker的测试环境好了,boot2docker引导的ISO文件可以通过https://github.com/steeve/boot2docker/releases下载 ,创建虚拟机从ISO文件引导,注意启动以后如果需要持久化磁盘,则需要通过修改Hyper-V中虚拟机磁盘设置,建议测试环境可以设置为动态磁盘,具体方法可以参考这个外国兄弟的博文。在虚拟机中将boot2docker的网络连接配置到连接外网的虚拟交换机上,这样Docker环境才可以通过外部URL pull/push 容器映像文件。设置完成后启动boot2docker环境,可以通过两种方式连接Docker,一种直接通过Hyper-V的虚拟机控制台,还有一种是远程管理方式,可以通过SSH连接到boot2docker虚拟机;像Windows 8.1环境内置了Powershell, 如果本地安装了github客户端,集成了poshgit工具那么可以直接通过Powershell使用ssh docker@连接,注意默认的连接credential是docker/tcuser。

下面为一些关键步骤截图:

为boot2docker虚拟机创建外部交换。

Windows 8.1中运行Boot2Docker环境_第1张图片

创建动态虚拟机磁盘

Windows 8.1中运行Boot2Docker环境_第2张图片

虚拟机控制台管理并查看当前boot2docker外部网络IP用于外部连接,

Windows 8.1中运行Boot2Docker环境_第3张图片

通过Powershell中启用SSH远程连接管理boot2docker的外部网络IP,

Windows 8.1中运行Boot2Docker环境_第4张图片

配置后的持久化磁盘及文件系统,

Windows 8.1中运行Boot2Docker环境_第5张图片

另外如果想直接运行VirtualBox的环境而不是Hyper-V,那么就一定要禁用Hyper-V的服务;否则启动boot2docker的Virutalbox会一直提示你没有启用VT-X,明明已经在Bios里面启用不是吗?所以,一种方法关闭Hyper-V的服务;这种方式比较简单但是每次切换都要重新启动也挺麻烦的。

Windows 8.1中运行Boot2Docker环境_第6张图片

还有一种更直接的方法是引导Windows 8.1的时候直接进入不启用Hyper-V hypervisor的环境,这样切换起来相对比较简单也不用每次都改。

查看当前启动配置, 已管理员身份启动cmd控制台,运行bcdedit,显示当前引导环境中 hypervisorlaunchtype = auto

Windows 8.1中运行Boot2Docker环境_第7张图片

复制当前配置引导项并创建新的选项,

Bcdedit /copy {current} /d "Windows 8.1 without Hyper-V"

Windows 8.1中运行Boot2Docker环境_第8张图片

修改新添加的启动配置项设置hypervisorlaunchtype 为关闭状态,

Bcdedit /set {新创建的配置选项ID} hypervisorlaunchtype off

Windows 8.1中运行Boot2Docker环境_第9张图片

重新启动就可以正常引导Virtualbox环境下的boot2docker容器了。