快速學習-如何部署Windows容器

快速學習-如何部署Windows容器

3 人贊了文章

如何部署Windows容器

Windows Containers 最初是在Windows Server 2016 上發布的,並且在正式發布之前已經有幾年歷史了,目前國內基於windows容器的商業化應用可以說是寥寥無幾。在本文中,我將向您展示如何使用Docker Engine在Windows Server 2016 上部署Windows Containers—Windows Containers 的管理工具是Docker Engine,它提供了一組允許我們管理,創建和刪除容器的命令。

Windows Server上安裝docker

Windows 容器有兩個組件,第一個是Windows 容器伺服器角色,第二個是Windows Server 的Docker 引擎,它們都是在下面的安裝步驟中安裝的。

Microsoft 已成功使用一組PowerShell cmdlet 簡化了兩個組件的安裝。要在Windows Server 2016 上安裝Docker for Windows,請打開PowerShell 控制台並在下面鍵入cmdlet(您需要從伺服器訪問Internet 才能下載Docker Engine PowerShell 模塊)。

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force

接下來,運行下面的cmdlet以安裝Docker PowerShell Provider:

Install-Package -Name docker -ProviderName DockerMsftProvider

完成後,重新啟動Sever。要檢查已安裝的docker 版本:

docker version

要測試如果安裝成功,我將下載一個示例容器鏡像並運行一個新的Windows 容器。

首先,我將使用cmdlet 導入模塊:

Import-Module dockermsftprovider

要運行示例Dotnet 容器,我將使用下面的命令下載並運行Dot Net Sample Container

docker run microsoft / dotnet-samples:dotnetapp-nanoserver

如您所見,我的Windows容器正在運行

使用Dockerfile 創建Windows容器鏡像

為什麼要使用Dockerfile?

容器Image 保存為代碼,並且它始終使用最新的Container 構建與使用提交Image 進行比較。在此示例中,我將在Windows Server Core 2016上創建一個安裝了Windows IIS 的Container Image。

在下面的代碼中,我將使用Windows Core 2016,安裝IIS 並將HTML 頁面添加到默認的IIS 站點。

FROM microsoft/windowsservercore

RUN dism.exe /online /enable-feature /all /featurename:iis-webserver /NoRestart

RUN echo "Hello World - Dockerfile" > c:inetpubwwwrootindex.html

CMD [ "cmd" ]

代碼完成後,我保存為dockerfile文件,如下所示。

「Dockerfile」

保存dockerfile後,我將運行以下命令來創建鏡像。

docker build -t iis .

完成後,我將檢查鏡像是否已創建完成

docker images

接下來,我將使用新的Image 創建一個新的Container

docker run --name test01 -it microsoft/iis cmd

這樣,我們就能通過dockerfile來創建一個標準的windows鏡像。

通過官方鏡像創建MSSQL容器

第一步在此過程中,是使用下面的Docker 命令下載SQL Image:

docker pull microsoft / mssql-server-windows-express

images大小為12GB ,所以需要較長的下載時間。

完成後,可以使用下面的Docker 行運行SQL 容器:

docker run -e ACCEPT_EULA=Y -e SA_PASSWORD=Password01 -p 1433:1433 -d microsoft/microsoft/mssql-server-windows-express

這樣,我們就可以通過宿主機的1443埠直接訪問容器方式運行的MSSQL。

Windows Server 2016

Hyper-V和Native容器之間的差異

Windows 容器的工作方式與Linux 容器相同。每個容器化應用程序都在共享主機操作系統上的自己的用戶模式隔離容器中運行。如下圖所示,還顯示了如何為Docker 應用程序提取各種依賴項。

TIPS:

請注意,不同的容器可能使用相同的庫。另外,雖然應用程序依賴於某個操作系統版本並且可以下載基本操作系統鏡像,但這必須與主機操作系統版本匹配,因為多個容器共享公共內核和操作系統導致無法實現多個操作系統版本。

仍然Native是windows容器的發展方向,但是目前存在兩個挑戰,可能會在某些環境中引起問題:

沒有足夠的隔離,因為隔離是在用戶模式下意味著共享內核。在可以信任應用程序的單個租戶環境中,這不是問題,但在多租戶環境中,某些租戶可能會嘗試使用共享內核來攻擊其他容器。

主機操作系統版本甚至補丁級別都存在依賴性,如果將補丁部署到主機然後中斷應用程序,則可能會導致問題。

這是可以使用Hyper-V 容器的地方。Hyper-V 容器使用為應用程序定義的基本鏡像,並使用該基本鏡像像自動創建Hyper-V VM。在VM 內部是各種二進位文件、庫和Windows 容器中的應用程序。

Hyper-V 容器仍在VM 中使用Windows 容器。唯一的區別是Windows 容器現在在Hyper-V VM 中運行,它提供內核隔離並將主機補丁/ 版本級別與應用程序使用的級別分開。應用程序使用Windows 容器進行容器化,然後在部署時通過選擇Windows 或Hyper-V 容器來選擇所需的隔離級別。如下所示。請注意,多個Hyper-V 容器可以使用公共基礎鏡像,並且不需要手動管理VM。它們會自動創建和刪除。

同時,Windows Server 2016 支持嵌套虛擬化,這意味著即使您的容器主機是Hyper-V VM,您仍然可以在該容器主機上使用Hyper-V 容器,因為它可以在VM 中創建VM。

推薦閱讀:

容器苗乃大勢所趨?
resource & container
泡茶一定要選對容器
小熊容器上文字教程了! 鉤針交流 手工交流區
Buildah入門

TAG:容器 | 科技 | 計算機科學 |