---
【编者的话】继 Windows 2016 TP5上的Docker初次体验 之后,作者接着写了这篇创建本地虚拟机的文章,给出了Packer和Vagrant的用法,并详细说明了Packer的功能。
越来越多的人开始试用Windows Docker容器,这太棒了。最新的Windows Server 2016 Technical Preview 5对当前在Windows上运行的Docker引擎和链接Windows容器来说都是一个很好的起点。
很快就会有很容易上手的微软Azure模板。另外,一旦合并了pull request,在Azure中创建Docker机也将非常简单。
不过选择还是要花费一点时间和经历来创建这么一个本地虚拟机。有一些好的教程可以知道你完成必要步骤。
如果你不想手动做这些创建工作,你也可以用Packer和Vagrant.
Packer 使用ISO文件,制作Vagrant的base box虚拟机.你可使用Vagrant启动一个或者多个这样的虚拟机,甚至可以形成一个Windows Docker集群。
Packer模板可以创建含有Docker引擎的Windows 2016 TP5 虚拟机,这个模板已经用VirtualBox 5.0.20 和 VMware Fusion 8.1测试过,如果你用的是Windows系统的电脑,应该也可以在 VMware Workstation上使用。
使用Packer 0.10.0创建Vagrant base box,仅需复制 GitHub repo .
git clone https://github.com/StefanScherer/packer-windows
cd packer-windows
然后在VMware创建Vagrant base box。
packer build --only=vmware-iso windows_2016_docker.json
或者在VirtualBox上创建Vagrant base box。
packer build --only=virtualbox-iso windows_2016_docker.json
这个过程大概要花上一个小时。
之后当前路径中应该就会有一个box文件。将该文件添加到Vagrant:
vagrant box add windows_2016_tp5_docker windows_2016_docker_vmware.box
如果你有虚拟机管理程序,你也可以创建和添加base box。你可以列出所有的base box:
$ vagrant box list
windows_2016_tp5_docker (virtualbox, 0)
windows_2016_tp5_docker (vmware_desktop, 0)
现在你可以使用新的base box了。这是 另一个GitHub 的repo。我们只要用以下方式复制:
git clone https://github.com/StefanScherer/docker-windows-box
cd docker-windows-box
使用Vagrant1.8.1,启动虚拟机,让Docker在Windows 2016 TP5上运行,十分简单。
vagrant up
Vagrant打开VM,安装Docker工具(如Machine和Compose)。同时也安装了Git用来链接 一些 在 Github 上的Windows Dockerfile。
你可以打开PowerShell,运行一个例子:
docker version
docker images
恭喜你!你现在可以用Windows 2016 TP5上的全新Docker引擎开始工作了!
玩的开心哟~
如果你想了解Packer在自动创建虚拟机的过程中做了什么,这里列出了Packer运行的脚本。
在脚本文件 enable-winrm.ps1 中,在打开WinRM端口让Packer登录和进行进一步准备之前,将启用一些Windows配置,如COntainer和Hyper——V(VMware)。
下一个脚本 install-docker.ps1 ,用来安装Docker服务、客户端和基于Docker镜像的 windowsservercore
。如果Hyper-V已启用,也会安装基于Docker镜像的 nanoserver
。
因为TP5和相关的文件以及镜像还是预发布版本,保不定哪儿还有点问题。
目前我们需要 这个脚本 来为 windowsservercore
Docker镜像提速。脚本 patch-boot-time-for-containers.ps1 就是用来处理这个问题的。
在本地的测试环境,我们用脚本 enable-docker-insecure.ps1 打开不安全的Docker端口2375。
你可以用运行虚拟机的主机远程控制Windows Docker引擎。平时使用Linux或者Mac的人更该尝试一下。
以前有一个本地Windows虚拟机版本的Docker Machine驱动,我更倾向于使用他来建立安全的TLS连接。
新的Windows Docker引擎监听一个Windows命名的pipe,它跟Linux Unix的socket很像。
一个普通用户不能访问它,所以要使用Docker引擎需要开一个管理员shell。
脚本 add-docker-group.ps1 将选项 -G docker
添加到Docker引擎,给Windows群组 docker
里的所有成员访问pipe的权限。
该脚本还在群组中添加了 vagrant
用户。所以在Vagrant box 中你用一般权限就可以使用Docker引擎了。
最后一个脚本 remove-docker-key-json.ps1removes 删掉了初始安装的key.json文件。在第一次运行Docker引擎时还会在各个Vagrant虚拟机中创建该文件,并根据不同Docker引擎创建不同的ID。
如果你想要构建一个Windows Docker集群,记得每个Docker引擎都需要不同的ID。
既然Docker基本镜像和引擎可能会继续更新,用Packer和Vagrant自动重建基础虚拟机就简单多了。
如果这篇文章对你有用,请分享给朋友和同事。如果你有问题或更好的建议,请留下评论。你还可以在推特 @ stefscherer 关注我。
原文链接: Setup a local Windows 2016 TP5 Docker VM (翻译:马远征)