天天看點

在Windows 10上運作Linux及Windows容器

本文講的是在<b>Windows 10上運作Linux及Windows容器</b>【編者的話】DockerCon 2016上Docker官方釋出了Docker for Windows的公開測試版本,在這一版本裡,添加了對在Windows 10上運作Windows容器(包括nanoserver和servercore)、Linux容器以及兩者并存的支援,本文作者就這一話題為我們展示了一些具體的執行個體操作并進一步分析了背後的運作機制。

但是這裡面可能存在點小疑問,那便是這兩種安裝方式對應啟動的是哪類容器。而且,在不做任何調整的情況下你将無法并排運作兩個Docker引擎。

由于兩個安裝版本使用的是同一個預設的命名通道<code>//./pipe/docker_engine</code>,這會導緻其中的一個引擎啟動失敗。

從Docker Windows Beta 26測試版本起,這裡有一個更簡單的方法來解決這個沖突。你隻需要通過MSI安裝器裝上Docker Windows版即可。在Docker的托盤圖示上會有一個新的菜單選項支援在Linux及Windows容器間切換。

在Windows 10上運作Linux及Windows容器

正如你在視訊裡所看到的那樣,你不用再通過更改環境變量或是利用Docker用戶端的<code>-H</code>參數來和其他的Docker引擎通信。

如果你之前還沒有激活容器功能的話該安裝器将會幫你激活它。為了添加這項特性,需要重新開機一次才能生效。

現在你可以輕松地通過點選托盤圖示裡的菜單欄來完成切換。

這裡也提供了一個指令行工具來切換引擎。你可以打開一個PowerShell視窗然後鍵入:

這樣它便完成了從Linux切換到Windows,反之亦然。注意按照上面展示的那樣鍵入參數,它是大小寫敏感的。

但是,如何才能做到切換工作進行過程中無需Docker用戶端改用其他的命名通道或是套接字呢?

答案便是,Docker會運作一個代理程序 <code>com.docker.proxy.exe</code>,它會監聽預設的命名通道<code>//./pipe/docker_engine</code>。

如果你是從Linux切換到Windows,那麼Windows Docker引擎<code>dockerd.exe</code>将會啟動并監聽在另外的命名通道<code>//./pipe/docker_engine_windows</code>,然後發起一個新的代理程序重定向到它。

下面這張截圖展示了切換前後的程序情況。大概在綠色條的中間部分我就已經完成了切換。

在Windows 10上運作Linux及Windows容器

和MobyLinuxVM通信的<code>com.docker.proxy.exe</code>(清單裡的<code>dockerd.exe</code>),正如深綠色條高亮展示的那樣已然退出。

<code>dockerd.exe</code>,即Windows Docker引擎啟動了,并且它還發起了一個新的和Windows Docker引擎通信的<code>com.docker.proxy.exe</code>(dockerd.exe下面)。

是以,在切換後你仍然可以用<code>docker.exe</code>用戶端或者是內建在你喜愛的編輯器或IDE裡的Docker插件,而無需作任何環境上的改動。

代理程序隻是切換了連接配接到的Docker引擎而已。在這樣一個切換動作完成後實際上Linux和Windows兩個Docker引擎均在運作。

在體驗之前我們首先得切換回Linux容器。現在我們可以在80端口上運作預設的nginx web容器:

然後再切換到Windows容器:

在Windows 10上運作Linux及Windows容器

現在,讓我們跑一些Windows容器吧。但是首先我們還得試試看Linux容器是否仍然還在運作,并且服務是否是可以通路的:

通過這個<code>start</code>指令你可以打開Edge浏覽器通路一個運作在Linux容器裡的Nginx自帶的歡迎頁面。

在Windows 10上運作Linux及Windows容器

是的,這個Linux容器一直在跑着。

在Windows 10上你~~隻能運作Nanoserver容器。而這裡并沒有針對Nanoserver的IIS docker鏡像~~。重大更新:你可以在Windows 10上運作Nanoserver以及windowsservercore容器。

但是為了示範nanoserver容器是如何的簡單,我将仍然使用下面這個例子來做講解。那麼,我們現在來建立一個屬于自己的小型Node.js Web伺服器。首先,我們編寫一個簡單的web服務應用:

在<code>app.js</code>檔案裡鍵入如下代碼作為一個迷你web服務然後儲存該檔案。

現在我們來為這個應用建構一個Windows Docker鏡像。我們另外打開一個編輯器然後通過如下指令建立<code>Dockerfile</code>:

鍵入下面的代碼作為Dockerfile的内容。正如你所能看到的那樣,隻有<code>FROM</code>這一行和典型的Linux Dockerfile不太一樣。它使用的是一個來自Docker Hub的Windows基礎鏡像。

儲存該檔案然後通過如下熟悉的指令來建構Docker鏡像:

通過如下指令将Windows web服務跑在一個Docker容器裡:

在Windows 10上運作Linux及Windows容器

這時候你無法直接通過127.0.0.1連接配接到容器。但是可以使用容器的IP位址去通路。我們需要容器的ID或者名字,可以通過如下指令列出目前正在運作的容器:

然後打開浏覽器輸入對應容器的IP位址:

在Windows 10上運作Linux及Windows容器

此外,從主控端到容器的端口轉發使得你在其他機器上也可以通過81端口通路Web服務。

在Windows 10上運作Linux及Windows容器

是的,Windows容器也在處理請求了。

新版的Docker Windows測試版把兩個容器世界結合在了一起,并且簡化了Linux和Windows Docker鏡像的建構,使得一台Windows 10機器對于兩者而言均可算是一個不錯的開發平台。

并且在切換到所需的Docker引擎時稍微注意一下便能發現,Linux和Windows容器可以同時在兩側運作。

<b>原文釋出時間為:</b>2016-10-15

<b>本文作者:</b>吳佳興

<b>本文來自雲栖社群合作夥伴Dockerone.io,了解相關資訊可以關注Dockerone.io。</b>

<b></b>

<b>原文标題:</b><b>在Windows 10上運作Linux及Windows容器</b>

繼續閱讀