
系列文章
第一篇 docker的windows容器初體驗 - 本文
最近微軟釋出了windows server 2016,其中最讓廣大開發者和運維同學期待的就是docker對windows容器的支援。
windows支援兩種不同類型的容器,即 windows server 容器和 hyper v 容器。 這兩種類型的容器的使用方式相同,也支援相同的容器映像。 但是它們的實作機制不同,提供了不同的安全隔離級别
windows server 容器 - 非常類似與linux中的容器,使用通過命名空間、資源控制實作程序隔離。每個windows server容器都與主控端共享同一個核心。
hyper v 容器 - 每個容器都運作在一個高度優化的hyper v虛拟機中,是以容器擁有獨立的核心。這樣容器的隔離性會更好,但是啟動速度會慢一些,其資源占用也會增加。
如果你手邊沒有windows server 2016的環境,我們也可以在windows 10 作業系統上,使用docker for windows來開始實驗。
與基于virtualbox的docker toolbox/machine版不同,docker for windows 依賴于微軟的虛拟化技術hyper v。64位的windows 10在專業版、企業版和教育版中,提供了hyper v支援,但如果您使用的是家庭版,請更新後再做實驗。
您可以通過控制台的“程式“ > “啟用或關閉windows功能”來檢查hyper-v狀态,中選中并開啟hyper v。docker for windows也會在安裝過程中自動開啟相應設定。
另外你需要為windows 10安裝2016年度更新,來確定在window核心已提供原生的windows容器支援。
注:windows 10目前隻支援hyper v類型的windows容器。
與之前docker engine不同,最新的docker for windows提供了對linux容器和windows容器的支援。但值得注意的是:這兩種容器模式不能被docker engine同時啟用,但可以手工切換。
在安裝之後,我們啟動powershell就可以通過docker指令來管理容器。我們首先執行<code>docker version</code> 指令來檢查docker的版本和系統資訊,這時我們可以發現docker engine運作在linux容器模式。
為了切換到windows容器模式,我們先點選桌面托盤,再從docker圖示的右鍵菜單中選中 “switch to windows containers ...” 片刻之後,windows 容器環境會就緒。
再次執行<code>docker version</code> 指令,這時server的“os/arch”已經從“linux/amd64”切換為“windows/amd64”,docker engine已經運作在windows容器模式
注:在linux容器模式下,我們可以在docker圖示的右鍵菜單中選中“settings...” 對docker engine進行更多設定,比如可以在“docker daemon”中設定docker hub的鏡像位址,這樣可以利用阿裡雲容器鏡像服務提供的加速器來加快從鏡像下載下傳速度。但是這些設定對于windows容器模式目前無效
注: 如果開啟了windows安全防護軟體,在拉取鏡像時有可能會報如下錯誤,請關閉掉安全軟體再試。
下面我們來做最簡單的docker操作,啟動一個示例容器
建構一個測試docker鏡像,其dockerfile檔案如下
建構鏡像并執行的結果如下
感覺是不是還不錯,docker為windows容器和linux容器提供了一緻的使用者體驗。
我們可以利用<code>docker-compose</code>建立一個由asp.net部落格應用和ms sqlserver構成的多容器應用
首先,下載下傳示例代碼
在“web/dockerfile” 中添加如下一行
注:如果你使用docker 1.13以上版本,需要将<code>docker-compose.yml</code>中的<code>version: '2'</code>修改為<code>version: '2.1'</code>,否則會提示如下錯誤
然後我們建構docker應用鏡像,并利用docker compose模闆啟動整個應用
執行完畢,我們可以通過<code>docker compose ps</code>指令檢視容器狀态
使用下列指令,我們可以獲得web服務容器的ip位址
這時我們就可以通過 <code>http://<container-ip>/blogengine</code> 來通路blog應用了!
windows容器的出現大大簡化了windows應用傳遞和運維的複雜性,對于微軟的技術生态有着及其重要的意義。docker在簡化使用者體驗上做足了文章,現有工具鍊可以對windows和linux容器環境提供接近一緻的能力。
同時windows和linux容器底層的實作機制還有很多不同,比如容器網絡,基礎鏡像選擇都有特别之處。未來我們會逐漸介紹。阿裡雲容器服務也會在未來的版本中提供對windows容器的支援