我的 Linux 主機最重要使命是跑 ASP.NET Core 專案或 .NET Core 服務、排程。前篇文章裝好 Debian 也能跑 .NET 5 之後,下一件任務便是把 Docker Engine 裝起來,只要能順利執行 Docker 容器,Linux 即可上線運轉,至於版本是 CentOS、Ubuntu 或是 Debian 並不重要,只要穩定、安全就好。之所以能這麼灑脫,全拜容器技術之賜,容器摡念讓應用程式擺脫對特定硬體平台、作業系統版本、環境設定的高度相依性,為部署、換版、Scale-Out 擴充作業帶來革命性改變,預期會成為(或者該說已經是)未來部署管理的主流,建議還沒接觸過的同學花點時間了解。(這也是即使是寫 ASP.NET Core 也值得學 Linux 的理由。)

Debian 是 Linux 的一線選項,Docker 有專章介紹如何安裝。

準備工作,安裝透過 HTTPS 存取套件來源的必要工具:

sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

取得 Docker 的公開 GPG 金鑰並檢查指紋是否為 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88。(註:Debian/Ubuntu 在使用第三方套件時,需要匯入 GPG 金鑰) 加入 Docker Repository 來源,安裝 Docker 套件:

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

這樣子 Docker Engine 就裝好了! 下一步來下載安裝 Docker Compose:

sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

接著我試著在 Debian 上建立自己部落格的 Docker Image、設定 volumes 對映實體路徑(與 CentOS 相比,Debian 沒有 SELinux,可省去 chcon -Rt svirt\sandbox\file\t /var/www/...的權限設定步驟,相關細節可參考這篇:ASP.NET Core Docker 筆記 2 - 組合容器建構系統),最後 sudo docker-compose up 執行 ASP.NET Core 部落格網站容器。

就醬,沒踩到什麼雷,我的部落格容器順利在 Debian 運轉,我完成了 Debian 登陸任務,Debian 正式成為我的 Docker 容器主機選項。

最後,回頭補充 Linux 版本選擇議題,這陣子承蒙不少 Linux 前輩分享心得或提供建議(特此感謝),對各家版本再多一點認識,追加幾則心得。

我把 Linux 分為自用跟商用。自用的選擇相對單純,看你高興,用得開心就好。商用的則可再區分 新創/小型公司 vs 中大型企業。新創及小型公司較在意成本,Linux 多用來跑自家系統,只要技術人員熟悉扛著住,免費的 CentOS、Ubuntu、Debian 都是不錯選擇。中大型企業的 Linux 常拿來跑商用軟體,要考量軟體是否適用、廠商技術支援... 等等。我想到一個新角度來看「企業常用什麼 Linux 版本?」,檢視雲端平台的 Linux VM 選項,以及重量級商業軟體支援的版本:

綜合來看,RHEL 跟 SUSE(SLES) 普及率最高,三大雲端平台、SAP、SQL、Oracle 都支援。但大型商業軟體採用何種 Linux 版本由廠商指定的機率挺高,企業 IT 單位要配合培訓或召募人才,未必輪得到技術人員決定。自行開發系統時,企業 IT 較有自主決定權。從開發人員角度,只要能跑 Docker,Linux 作業系統是什麼版本(或是直接上雲端)差異不大;故採用何種 Linux 版本對 IT 單位的影響比較大,要考量穩定性、學習資源、技能價值(換工作時能不能加分)、授權成本、廠商支援... 等,猜想也會走「西瓜偎大邊」策略吧! 回頭想想,Linux 的核心操作系統大同小異,熟悉一種後要跨到另一個版本並不難(像是我的 CentOS 經驗有許多在 Debian 也適用),與其斟酌再三遲遲無法決定,還不如快點挑一個鑽進去玩,覺得不 OK 再換囉,哈!

Real case of moving my ASP.NET Core blog docker container to a fresh Debian.


Comments

# by jackson

如果 Debian 系統帶的起來,其實在 Ubuntu 可能會更容易,因為套件關係是差不多的。Debian 主張開源不加料,不會有商業插旗 :) 然後身為 Windows 的門外漢請教一下... 如果 .dll 要註冊,c#程式開發才能引用,這樣也能包在 Docker 裡面,丟到 linux 裡面跑嗎?

# by Jeffrey

to jackson, 我猜你說要註冊才能用的 DLL 應該是 COM+ 元件,COM+ 為 Windows 限定,無法在 Linux 執行。要實現跨平台,.NET Framework 專案需先改寫成 .NET Core/.NET 5,專案移植方式可參考 https://docs.microsoft.com/zh-tw/dotnet/core/porting/

# by Lik

黑大,你最終Debian會裝在N3150, 4G Ram 的那台機器嗎? https://blog.darkthread.net/blog/minipc-as-centos-server/ 因為我沒有用docker的經驗,也想試一試,linux + docker + asp.net core 效能如何?

# by Jeffrey

to Lik, 迷你主機有在跑網站,已經算是線上環境了,換作業系統很麻煩(現在是CentOS 7),沒事不會去動它。但我想同一台機器跑 CentOS、Debian、Ubuntu 的效能不會差太多。

# by Kevin

SSH的部分可以考慮直接用powershell的openssh + windows terminal畫面會比較好看XD

Post a comment