2016年11月19日 星期六

Docker for Windows 與 ASP.NET Core - Part.1 安裝與使用 Visual Studio 2015

目前容器技術已經成為主流,許多公司的資訊系統架構都已經轉向容器化,以往在 Windows 系統要使用 Docker 都會受到許多技術限制,雖然可以用許多方式來使用 Docker,但使用上還是不太順暢與便利,不過 2016年的下半年陸續由 Docker 發佈了 Docker for Windows 以及 Microsoft 發佈 Windows Container,前者可以讓開發人員可以在 Windows 環境裡架設及使用 Linux 基礎的 Docker,後者則是 Windows 版的 Container 技術,不管是哪一種版本都是開發人員必須要熟悉與認識,因為這是未來的一大趨勢。

此篇文章會先介紹如何安裝 Docker for Windows,另外使用 Visual Studio 2015 建立 ASP.NET Core 專案以及安裝套件,然後使用這個 ASP.NET Core 專案建立 Docker image, container 以及執行。

接下來會有幾篇文章會介紹 Docker for Windows 與 Windows Container 的文章,方便大家可以入門學習。


image

有關 Docker 的介紹與相關資訊,可以詳閱 Docker 的文件(https://docs.docker.com/),在網路上也可以找到許多相關文章,整體中文書籍也出版了許多本,不過對於初學者、開發人員來說,我會推薦以下兩本,「Docker 入門與實戰」與「Docker 錦囊妙計 (Docker Cookbook)

Aca020700A465

在台灣也有社群組織在做推廣,大家可以主要先關注「Docker.Taipei」,不定時會有資訊分享、研討會、Meetup 的活動。

https://zh-tw.facebook.com/groups/docker.taipei/
http://www.meetup.com/Docker-Taipei/

 

Docker for Windows

這是由 Docker 所製作的原生 Windows 應用程式,讓使用 Windows 系統的開發人員不必再使用其他迂迴方式去繞路使用 Docker,只要安裝 Docker for Windows 就能夠快速且方便的使用 Docker,不過要先說的是,Docker for Windows 只能執行 Linux 基礎的 Container,如果想要使用 Windows base 的 Container 就必須使用 Windows Container,兩種 Docker 可以都安裝在一個作業系統環境裡,但是無法同時執行,一次只能執行一種,而且兩種系統的 container 無法互相使用,不過兩種系統的操作指令都是一樣的,這倒是減少了困擾與不便,增加開發人員的學習意願,也方便開發人員的操作使用。

 

安裝使用前的環境注意事項

Docker for Windows 只能安裝運行在 64 位元的 Widnows 10 專業版或企業版的作業系統裡,而且必須開啟 Microsoft Hyper-V 功能,另外作業系統的更新也請務必更新的最新的版本。

Docker for Windows requires 64bit Windows 10 Pro, Enterprise and Education (1511 November update, Build 10586 or later) and Microsoft Hyper-V.

可以在自己的電腦裡先使用「Win 鍵 + R 」或在「命令提示字元 (cmd)」裡輸入「winver.exe」,查看自己的作業系統版本資訊

SNAGHTML239c13b2

要啟用 Hyper-V 功能

SNAGHTML239fb023

 

下載 Docker for Windows

下載 Docker for Windows 的地方有兩個,一個是首頁的「Get Started with Docker

https://www.docker.com/

image

https://www.docker.com/products/docker#/windows

image

說明文件「Get started with Docker for Windows」裡也可以下載,請各位下載 Docker for Windows (Stable),說明文件裡的內容相當豐富完整。

image

 

安裝 Docker for Windows

下載的檔案為「InstallDocker.msi」,下載完成後就直接執行吧

目前 Docker for Windows 的版本為 1.12.3

SNAGHTML23a82636

安裝中

SNAGHTML23a938bf

安裝完成,預設勾選「Launch Docker」會在按下 Finish 後就執行開啟 Docker for Windows

SNAGHTML23aa7a77

Docker for Windows 啟動中

image

啟動完成之後就可以出現 Welcome 視窗,按下 Got it 就可以開始進入 Docker 的世界囉

SNAGHTML23b1f2a2

image

 

因為 Docker for Windows 會使用到 Hyper-V,如果一開始沒有啟用 Windows 10 裡的 Hyper-V,那麼在安裝 Docker for Windows 的過程中就會去啟用 Hyper-V 功能,而且安裝過程會需要重新啟動 Windows 的步驟,已經完成安裝及啟用 Docker for Window,可以開啟 Hyper-V 管理員,然後會在「虛擬機器」裡看到「MobyLinuxVM」正在執行,可千萬不要把這個 VM 給刪除啦

image

 

Kitematic

接著用滑鼠右鍵點選在右下角的 Docker 圖示,然後點擊 Open Kitematic,這是 Docker for Windows 的圖形管理介面,並沒有隨著安裝 Docker for Windows 而一起安裝,所以第一次使用會需要下載和安裝, 會下載一個「Kitematic-Windows.zip」檔案

SNAGHTML23c02b04

下載「Kitematic-Windows.zip」完成後,就請解開壓縮檔,然後執行「Kitematic.exe」

image

執行安裝完成後就可以看到以下的視窗畫面

image

不限制一定要申請帳號才能使用,第一次使用的開發人員可以先點選右下的「SKIP FOR NOW」,接著就可以看到圖形化管理介面囉

image

在這裡可以直接搜尋相關的 Image 並且建立 container,建立了 container 後也可以進行啟用、停止與設定的操作,有興趣的朋友可以自行研究,這部分我在這裡就不多介紹。

有關 Kitematic 的豆知識:「Docker收購新創公司Kitematic:讓Mac電腦輕鬆部署容器 | iThome」

 

Docker for Windows - Settings

image

可以使用 Settings 去調整使用的項目與設定,

SNAGHTML23e08a9d

以下的 Shared Drives 記得要將你會需要用到的 disk 勾選起來並且按下 Apply 喔

SNAGHTML23e12ff5

SNAGHTML23ed6d13

SNAGHTML23eec03f

SNAGHTML23ef4780

SNAGHTML23f02482

SNAGHTML23f0e542

SNAGHTML23f111b1

 

確認 Docker Version

在 Windows 作業系統裡可以使用 PowerShell 輸入 Docker 指令操作,我習慣使用 PowerShell ISE 執行指令操作,在 PowerShell 裡輸入「docker version」,可以看到 Docker client 與版本資訊

image

 

 

使用 Visual Studio 2015 建立 ASP.NET Core 專案

很多相關建立 ASP.NET Core 專案的教學都是會介紹用指令碼的方式,不過這邊會說明使用 Visual Studio 2015 新建 ASP.NET Core 應用程式的方式去建立專案,在執行前請確認 Visual Studio 2015 已經有更新到 Update 3 並且安裝相關 ASP.NET Core 的組件庫(例如 Microsoft ASP.NET and Tools)

SNAGHTML23fff641

 

新增專案 >> .NET Core  >> ASP.NET Core Web Application (.NET Core)

SNAGHTML2401f31a

SNAGHTML2404df65

image

先執行重新建置方案後,按下 Ctrl + F5 (啟動但不偵錯)執行網站

image

 

使用 Visual Studio Tools for Docker - Preview

https://marketplace.visualstudio.com/items?itemName=MicrosoftCloudExplorer.VisualStudioToolsforDocker-Preview

image

在前不久才結束的 Microsoft Connect(); 2016 大會所發表的 Visual Studio 2017 RC,已經有把這一個功能給內建進去,但是在 Visual Studio 2015 裡就必須另外安裝這一個套件,而且這一個套件只能建立 Linux 的 Docker Image 與 Container,在 2016 年 11 月初已經正式發佈 Windows Containers,所以在套件的說明頁面理也有說將會盡快推出可以建立在 Windows Container 運行的版本。

image

這個擴充功能的目前版本所發佈的日期為 2016-09-28,版本為 0.41.0

 

下載好套件安裝檔並且安裝完成後,重新開啟 Visual Studio 2015 與 ASP.NET Core 專案,在方案總管的專案按下滑鼠右鍵,點選「加入 >> Docker Support

image

點擊之後就會在專案目錄裡增加了以下五個檔案

image

可以直接開啟 Dockerfile 檔案來查看,這個 Dockerfile 是用來建立 Docker Image,使用的基礎映象檔為 microsoft/aspnetcore:1.0.1

image

什麼都不用改也不另外做什麼設定的情況下,上方的可以直接選擇偵錯執行就已經預設為使用 Docker

image

這個時候就直接按下去或是按下 F5 鍵,這時候開啟「輸出」視窗就可以觀察到專案建置後就會開始執行建立 Docker Image 檔案與 Container 並且執行

image

進入偵錯模式就會自動開啟瀏覽器並且連接運行在 Container 裡的 Container

image

image

回到 PowerShell 裡,首先執行 docker images,列出所有的 Images 檔案,其中 user /webapplication1 就是剛才所建立的 Images 檔案

image

輸入 docker ps,可以列出目前正在執行的 container,目前正在執行的 container 名稱為 webapplication1_webapplication1_1

image

現在使用 Host 的 Port 32768 對到 container 裡的 Port 80

可千萬別以為這僅僅只是建立 Docker Image 與建立並執行 container 而已喔,而是真的可以偵錯的,各位可以在程式裡下中斷點,當瀏覽執行在 Docker container 的網站時,當執行到下中斷點的位置時,是真的可以進行偵錯喔,這部分就給各位自己去嘗試囉

 

一些 Docker 指令操作

當我們要停止正在運行的 container 時,可輸入 docker stop container_id

image

執行完 docker stop 指令後,再次執行 docker ps 後是無法看到剛才所停止的 container,docker ps 是列出正在運行的所有 container,如果要列出所有的 container 則需要執行 docker ps -a

如果要刪除 container 則是要執行 docker rm container_id

image

 

刪除 images 檔案前,請務必確認依據這個 images 所建立 container 都已經退出執行狀態並移除

刪除 images 檔案的指令為 docker rmi image_id

image

 

因為 .NET Core 1.1.0 已經正式發佈了,而且在 Docker Hub 裡也已經有 microsoft/aspnetcore 1.1.0 版本的 images,所以大家可以試著修改 Dockerfiler 裡的內容,讓 ASP.NET Core 專案運行在 Docker Container 的版本為 ASP.NET Core 1.1.0

大家試試看囉


這篇的內容應該分成兩篇的,不過連貫起來會比較完整,至少安裝完 Docker for Windows 之後再馬上去開發一個 ASP.NET Core 專案,並且馬上做好 Docker Image 以及建立並執行 Container,看到自己動手做一個運行在 Linux 裡 ASP.NET Core 的網站,對於 Linux 未曾接觸與比較少接觸的開發人員就會是一種突破。

ASP.NET Core 藉由 Docker for Windows 讓開發人員不必再去為了開發環境與測試環境而疲於奔命,也不必再怕因為作業系統安裝了一堆第三方套件、工具、SDK 而搞砸了作業環境,要測試連接 Redis Elasticsearch Mongo 等就不必再等別人準備好環境,現在只要在 Doker 裡把這些 Application 的 Image 拉下來,馬上就可以快速建立一個測試與開發的環境,讓專案連接其他系統更加便利。

Docker 與 Container 已經是資訊開發與系統管理的未來主流,所以趕快認識、入門學習吧!

 

相關連結與延伸閱讀

The Docker commands - Docker

Use the Docker Engine command-line - Docker

GitBook - 全面易懂的Docker指令大全

GitBook - 《Docker —— 從入門到實踐­》正體中文版

把 ASP.NET Core 應用程式裝進 Docker 裡 - 使用 Docker Tools for Visual Studio 2015 - MSDN 台灣部落格

The Will Will Web | 新版 Docker for Windows 正式推出:全新安裝與快速上手

Announcing .NET Core 1.1 | .NET Blog

Announcing the Fastest ASP.NET Yet, ASP.NET Core 1.1 RTM | .NET Web Development and Tools Blog

 

以上

1 則留言:

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。