建立Windows 2016 TP5 Docker本地虛擬機器
繼Windows 2016 TP5上的Docker初次體驗之後,作者接著寫了這篇建立本地虛擬機器的文章,給出了Packer和Vagrant的用法,並詳細說明了Packer的功能。
越來越多的人開始試用Windows Docker容器,這太棒了。無論是想了解Windows上所執行的Docker引擎的當前狀態,還是想親身體驗一下Windows容器來,最新的Windows Server 2016 Technical Preview 5都是一個很好的起點。
不久就會有很容易上手的微軟Azure模板。一旦這個補丁被合併,就意味著使用者可以很容易地在Azure上建立Docker Machine。
教程
目前而言,建立本地的VM還是需要花費一點時間和精力的。有一些不錯的教程可以指導你完成必要步驟。
- 在Windows Server 2016 VirtualBox中建立Docker(http://blog.couchbase.com/2016/april/setup-docker-windows-server-2016),作者:Arun Gupta
- Hyper-V中的Windows Docker容器(https://lostechies.com/gabrielschenker/2016/04/30/windows-docker-containers/),作者:Gabriel Schenker
Packer + Vagrant = Automation
如果你不想全部採用手工方式完成建立工作,在你的計算機面前等待下一步操作提示,你也可以用Packer和Vagrant。
Packer使用ISO檔案作為輸入,製作用於Vagrant環境的基本虛擬機器。使用Vagrant,你可以啟動一個或者多個這樣的虛擬機器,甚至可以形成一個Windows Docker Swarm叢集。
本文所使用的Packer模板可以用來建立含有Docker Engine的Windows 2016 TP5 虛擬機器。這個模板已經用VirtualBox 5.0.20 和 VMware Fusion 8.1測試過。如果你用的是Windows系統,模板應該也可以在 VMware Workstation上使用。
執行Packer
使用Packer 0.10.0建立Vagrant基本虛擬機器,只需要克隆下面的GitHub repo(https://github.com/StefanScherer/packer-windows)。
git clone https://github.com/StefanScherer/packer-windows cd packer-windows
然後為VMware建立Vagrant基本虛擬機器:
packer build --only=vmware-iso windows_2016_docker.json
或者為VirtualBox建立Vagrant基本虛擬機器:
packer build --only=virtualbox-iso windows_2016_docker.json
這個過程大概要花上一個小時。
上述步驟完成之後,當前路徑中應該就會有一個box檔案。將該檔案新增到Vagrant:
vagrant box add windows_2016_tp5_docker windows_2016_docker_vmware.box
如果你既有VirtualBox環境,也有VMware環境,你也可以為這兩種環境分別建立和新增基本虛擬機器。你可以列出所有的base box:
$ vagrant box list windows_2016_tp5_docker (virtualbox, 0) windows_2016_tp5_docker (vmware_desktop, 0)
執行Vagrant
現在你可以使用新的基本虛擬機器來執行一些測試工作了。這裡,我們需要訪問另一個GitHub repo(https://github.com/StefanScherer/docker-windows-box)。第一步是克隆程式碼:
git clone https://github.com/StefanScherer/docker-windows-box cd docker-windows-box
使用Vagrant 1.8.1,可以很容易地啟動虛擬機器,並讓Docker在Windows 2016 TP5上執行:
vagrant up
Vagrant啟動VM,安裝其它的Docker工具(如Machine和Compose)。同時也安裝Git以便訪問一些在Github(https://github.com/brogersyh/Dockerfiles-for-windows)上的Windows Dockerfile。
你可以開啟PowerShell來執行一些命令,例如:
docker version docker images
恭喜你!你現在可以用Windows 2016 TP5上的全新Docker引擎開始工作了!
Packer能做什麼
如果你想了解Packer在自動建立虛擬機器的過程中做了什麼,下面列出了Packer所執行的一些部署指令碼。
安裝功能元件
在指令碼檔案enable-winrm.ps1中,在開啟WinRM埠讓Packer登入和進行進一步準備之前,將啟用一些Windows配置,如Container支援和Hyper-V(僅針對VMware)支援。
安裝Docker
下一個指令碼install-docker.ps1,用來安裝Docker服務、Docker客戶端和名為windowsservercore的Docker基礎映象。如果Hyper-V已啟用,也會安裝名為nanoserver的Docker基礎映象 。
修補windowsservercore映象
因為TP5和相關的檔案以及映象很新,並且還是預釋出版本,保不定哪兒還有點問題。
目前我們需要這個指令碼來為windowsservercore Docker映象提速。指令碼patch-boot-time-for-containers.ps1就是用來處理這個問題的。
啟用不安全的Docker埠2375
在本地的測試環境,我們用指令碼enable-docker-insecure.ps1開啟不安全的Docker埠2375。
你可以從執行該虛擬機器的主機上遠端控制Windows Docker引擎。平時使用Linux或者Mac的人更該嘗試一下。
一旦將來有了本地Windows VM的Docker Machine驅動程式,我更傾向於使用它來建立安全的TLS連線。
新增Docker群組
新的Windows Docker引擎會在一個Windows命名管道上監聽訊息,這與在Linux系統上監聽 Unix套接字很相似。
普通使用者不能訪問這一命名管道,所以需要使用管理員Shell來操控Docker引擎。
指令碼add-docker-group.ps1將選項-G docker新增到Docker引擎的啟動命令,這樣Windows使用者組docker裡的所有成員就都具有了訪問命名管道的許可權。
該指令碼還在使用者vagrant新增到這個docker使用者組。所以,在Vagrant虛擬機器中你就可以開啟一個普通的PowerShell視窗來操控Docker引擎了。
刪除 key.json
最後一個指令碼remove-docker-key-json.ps1負責刪除初始安裝的key.json檔案。在第一次啟動執行Docker引擎時,每個Vagrant虛擬機器中都會建立這個檔案,並且根據不同Docker引擎建立不同的ID。
如果你想要構建一個Windows Docker Swarm叢集,記得每個Docker引擎都需要一個不同的ID。
結論
由於Docker基礎映象和Docker引擎會持續更新,用Packer和Vagrant自動重建基本虛擬機器就簡單多了,不再需要執行那些手工操作的步驟。
如果這篇文章對你有用,請分享給朋友和同事。如果你有問題或更好的建議,請留下評論。你還可以在推特@stefscherer(https://twitter.com/stefscherer)關注我。
感謝滕啟明對文章的審校。
馬遠征 譯
英文連結:https://stefanscherer.github.io/setup-local-windows-2016-tp5-docker-vm/#rd
原文出處:Docker微信公眾號