測試完 windows 家族的 .NET Core CLR 之後,接下來就是 Linux 家族了。我挑了兩個環境,一個是標準安裝的 Ubuntu 15.10 server。另一個則是採用大家常用的 Boot2Docker, 它是附在 Docker Toolbox 內的一個元件,有人預先準備好的精簡型 Linux, 預先安裝了 Docker 在裡面。
為什麼要把 Linux 的部分獨立成一篇來說明? 因為 Linux 的環境是這整個測試中,意外狀況最多的一個環境了.. 有興趣的朋友請繼續看下去..
這次 .NET Core 的實驗做完,我看相關的 How To 可以寫一堆了 @@,整個過程中都在挑戰過去很少做的事情,包括 Linux, .NET Core, Docker, 現在連 Windows Container 都出動了.. 不過試完之後一整個充實啊,最後能把預期的結果弄出來,幾個晚上睡不飽是值得的…
接續上篇文章,這篇就把 windows 的兩個平台測試給搞定吧! 先快速交代一下打算當作對照組的 Windows 2012 R2~
記憶體管理,是跟底層平台高度相關的議題。對於 developer 來說,能掌控的部分很有限,developer 能做的動作,不外乎是 allocate / free memory, 頂多對於 GC (garbage collection) 的機制更明確的掌握而已。超出這個範圍以外的部分,就真的只剩下好好處理 exception 的份了…
這次 .NET Core 開源 + 支援 Linux / MacOS, 正好開創了一個新的平台支援,實際測測看,是掌握差異最快的方式。我挖出了當年的老文章探討的記憶體管理問題,在新的平台上驗證。不同平台的差異,遠比我想像的精彩,就順手把它寫成文章整理起來,給需要的人參考。
最近這幾篇 .NET Core / Docker 相關的文章貼出來之後,最常聽到有人問我的問題就是:
“要跑 .NET 就在 windows 上面跑就好了,要在 Linux 上跑 .NET 有甚麼意義嗎?”
其實還蠻有意義的 XD,這兩個月每天下班花一點時間研究之後的心得,.NET Core 的確還在起步的階段 (現在才第一版 RC),跟已經進展到 4.6 的 .NET Framework 完整成熟的生態來說真的差太遠,現階段來看還完全沒有什麼誘因值得立刻轉移到 .NET Core + Linux 上面執行。不過眼光放長遠一點,這我認為到是個蠻值得的投資。怎麼說? 以下是我的觀點,跟大家分享:
在半個月前,Microsoft Connect 2015 大會上正式宣布 .NET Core / ASP.NET 5 正式推出 RC1. RC 代表開發已經到了準備 release 的階段 (RC: release candidate), 功能都已完備 (FF: feature freeze), 品質也到一定的階段,RC 推出後若沒碰到重大問題,那接下來應該就是 RTM 了。
若你擔心 Beta 跟最終的版本落差太大,而不願意太早投入了解 .NET Core 的話,那現在是個適合的時間點了! 這次除了版本進展到 RC1 之外,Microsoft 除了在 Docker Hub 釋出了新版的 image 之外,也推出了另一個新的命令列工具集: DOTNET CLI, 同樣也提供 Docker Container 的 Image 可以使用。
原本開始研究 Docker, 目的是為了有個簡易上手的 .NET Core / ASP.NET 5 在 Linux 上面執行的環境而已,我真正的目標是了解 .NET Core 跨平台的轉移過程,以及跨平台帶來的效益 (單純的在 Linux 上執行並不是重點,而是在 Linux 上面執行後可以帶來其他的資源跟優勢,以及對企業大型佈署可以獲得的效益) ... 不過這陣子越玩越大,研究 & 體驗的範圍也擴大到正式佈署上會用到的幾個重要服務 (apache, nginx, docker, mysql ... etc),加上拿了我自己的部落格當白老鼠實際體驗,弄到現在才回到正題 =_=,正好趁那些偏離主題的研究告一段落,現在正好回頭來試試! 接著下去之前,先看看官方發布的消息:
Today, we are announcing .NET Core and ASP.NET 5 Release Candidate, supported on Windows, OS X and Linux. This release is "Go Live", meaning you can deploy apps into production and call Microsoft Support if you need help. Please check out theAnnouncing ASP.NET 5 RC blog post to learn more about the updates to ASP.NET 5.
這篇我分幾個角度來探討 .NET Core. 如果你是想看 Step by step 的教學,或是想看看新版本有甚麼功能,或是哪裡下載等等,那請直接 Google 新聞或是官網就可以了。我的重點會擺在我的研究過程發現的心得,一些官方文件上沒寫的資訊,以及我研究過程得到的結論跟想法等等。接下來這系列我會談到這幾個主題,一篇寫不完的話就請各位等待續集了~ Progrmming / Coding 相關的探討,我本來就會定期分享,因此這系列文章我會著重在跨平台以及 .NET Core 本身的改進,還有原本就用 Microsoft Solution 的企業,導入 .NET Core + Linux 後帶來的效益。主題包括:There may be occasions where it is not appropriate to run your app inside a container. To compile, but not run your app inside the Docker instance, you can write something like:
$ docker run --rm -v "$PWD":/myapp -w /myapp microsoft/dotnet:0.0.1-alpha dotnet compile
This will add your current directory as a volume to the container, set the working directory to the volume, and run the command dotnet compile
which will tell dotnet to compile the project in the working directory.
chicken@localhost:~$ sudo docker pull microsoft/dotnet
chicken@localhost:~$ sudo docker run --name dotnet --rm -t -i microsoft/dotnet /bin/bash root@6b021f6be610:/#第一行的 prompt 提示訊息還是 Linux Host OS, 執行成功之後,第二行的 prompt 就換成 Container 內的 shell ,代表執行成功! 如果你有現成的 code 想丟進去 Container 編輯使用,可以用 -v 加掛 volume 進去,不過我這邊的範例還不需要,我就略過了。接下來就進入這套新的 CLI: dotnet. 先來看看 dotnet cli 到底支援幾種命令?
root@6b021f6be610:/# dotnet -h
root@6b021f6be610:/tmp/HelloWorld# dotnet init
root@6b021f6be610:/tmp/HelloWorld# dotnet restore
root@6b021f6be610:/tmp/HelloWorld# dotnet compile -h
root@6b021f6be610:/tmp/HelloWorld# dotnet compile
root@6b021f6be610:/tmp/HelloWorld# dotnet run