1. 程式人生 > >建立Windows 2016 TP5 Docker本地虛擬機器

建立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

這個過程大概要花上一個小時。

Docker

上述步驟完成之後,當前路徑中應該就會有一個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。

11

你可以開啟PowerShell來執行一些命令,例如:

docker version  
docker images

12

恭喜你!你現在可以用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微信公眾號