2017微軟擁抱容器技術歷程回顧,手把手帶您構建原生的Windows 容器
出品丨Docker公司(ID:docker-cn)
編譯丨小東
每週一、三、五晚6點10分 與您不見不散
說在前面
在2017年即將結束的時候,我們選出了讀者們最喜歡的五篇文章。對於那些還沒有在Windows上構建過Docker容器的朋友,我將為您推薦這篇可以幫助您在Windows上快速構建並且執行Docker容器的教程。
早些時候,微軟宣佈Windows Server 2016將會普及,以便可以在Windows上使用原生的Docker引擎執行容器。本文將詳細介紹如何在Windows 10上執行Docker Windows Containers或使用Windows Server 2016 VM。在開始之前,您首先需要準備一個支援構建、執行Docker容器的Windows系統。
Windows 10週年紀念版更新
對於開發人員來說,Windows 10系統是執行Docker Windows容器的好地方,隨著週年紀念版的更新,Windows 10 核心將新增對容器化的支援(它所缺少的僅僅是Windows原生的Docker引擎和一些映象的基礎層)。
在Windows上獲取Docker引擎最簡單的方法就是安裝Docker for Windows。Docker for Windows過去僅設定了基於Linux的Docker開發環境,但現在它可以同時為Linux和Windows設定Docker開發環境。一旦安裝完畢,Docker for Windows圖示就可以在Linux和Windows容器之間進行切換了。
切換到Windows容器,進入下一節內容。
Windows Server 2016
Windows Server 2016就是要將Docker Windows容器部署到生產環境。對於那些計劃開發大量Docker Windows容器的開發者來說,在Windows 10和Docker for Windows完美支援Windows容器之前,建立一個Windows Server 2016開發系統(例如在一個虛擬機器上)是一件相當值得做的事情。下載一個免費版本,並將其安裝在裸機上或那些執行Hyper-V、VirtualBox或擁有類似虛擬化技術的虛擬機器上。使用Windows Server 2016執行虛擬機器也是在macOS和較舊的Windows版本上執行Docker Windows容器開發的好方法。
一旦啟動、登入並執行Windows Server 2016,Windows將提示您進行更新,更新後將直接為您安裝Windows原生的Docker引擎(就是不再使用“Docker for Windows”了),在PowerShell中輸入以下命令:
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force Install-Module -Name DockerMsftProvider -Force Install-Package -Name docker -ProviderName DockerMsftProvider -Force Restart-Computer -Force |
Docker引擎正在以Windows service的形式執行,監聽預設的Docker命名管道。
# Open firewall port 2375 netsh advfirewall firewall add rule name="docker engine" dir=in action=allow protocol=TCP localport=2375 |
# Configure Docker daemon to listen on both pipe and TCP (replaces docker --register-service invocation above) Stop-Service docker dockerd --unregister-service dockerd -H npipe:// -H 0.0.0.0:2375 --register-service Start-Service docker |
現在可以通過設定DOCKER_HOST從虛擬機器中使用Windows Server 2016 的Docker引擎了:
$env:DOCKER_HOST = "<ip-address-of-vm>:2375" |
執行Windows容器
首先,確保您的Docker正在執行中:
> docker version Client: Version: 1.12.1 API version: 1.24 Go version: go1.6.3 Git commit: 23cf638 Built: Thu Aug 18 17:32:24 2016 OS/Arch: windows/amd64 Experimental: true Server: Version: 1.12.2-cs2-ws-beta API version: 1.25 Go version: go1.7.1 Git commit: 62d9ff9 Built: Fri Sep 23 20:50:29 2016 OS/Arch: windows/amd64 |
接下來,下載一個與評估構建相容的基礎映象,重新標記它並進行測試執行:
docker pull microsoft/windowsservercore docker run microsoft/windowsservercore hostname 69c7de26ea48 |
構建和上傳Windows容器映象
將映象推送到Docker Cloud需要一個Docker ID。在Docker Cloud上儲存映象是一種很好的習慣,可以為以後的使用者儲存構建,與同事共享基礎映象,或者建立構建管道通過Docker將應用程式從開發移植到生產。
Docker映象通常是通過Dockerfile中的docker build來構建的,但是在這個示例中,我們將在PowerShell中實時建立一個映象。
"FROM microsoft/windowsservercore `n CMD echo Hello World!" | docker build -t <docker-id>/windows-test-image |
測試映象:
docker run <docker-id>/windows-test-image Hello World! |
用docker login登入,然後上傳映象:
docker push <docker-id>/windows-test-image |
儲存在公共映象庫中的映象可以被其他Docker使用者下載使用。
在Windows上使用docker-compose
Docker Compose是開發多容器(由資料庫、佇列和Web前端組合的複雜容器)的好方式。
要在Windows Server 2016系統上使用Docker Compose進行開發,就需要安裝Windows Server 2016(而在安裝了Docker for Windows的Windows 10中則不需要再安裝它了):
Invoke-WebRequest https://dl.bintray.com/docker-compose/master/docker-compose-Windows-x86_64.exe -UseBasicParsing -OutFile $env:ProgramFiles\docker\docker-compose.exe |
在Windows上試用Compose,請先克隆由SQL Server Express 2016資料庫支援的ASP.NET Core MVC MusicStore應用程式的變數。在開始前,一個擁有正確標籤的 microsoft/windowsservercore 映象是必不可少的。
git clone https://github.com/friism/Musicstore ... cd Musicstore docker-compose -f .\docker-compose.windows.yml build ... docker-compose -f .\docker-compose.windows.yml up ... |
要從執行容器的主機上訪問正在執行的應用程式(例如,在Windows 10上執行時,或者在執行Docker引擎的Windows Server 2016系統上開啟瀏覽器),請使用容器IP和埠5000:
docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" musicstore_web_1 172.21.124.54 |
如果使用Windows Server 2016並從VM或主機外部訪問,則只需使用VM或主機IP和埠5000即可。
總結
本文描述瞭如何在Windows 10和Windows Server 2016上構建和執行原生的Docker Windows Containers。要檢視更多詳情可以點選下列標題:
如果本文對你有幫助,歡迎分享到朋友圈!獲取更多Docker實用技巧,掃描下圖二維碼!