.Net Core Docker Linux

在CentOS上運行ASP.NET Core 容器

韓世謙 2020/06/10 09:49:50
2011

事前準備:

VirtualBox
Linux CentOS虛擬機器
ASP.NET Core Docker Image

一、安裝CentOS作業系統

在 VirtualBox中,我們不需要重頭開始安裝CentOS。只需要到這個網站下載VisualBox專屬的CentOS映象檔, 然後匯入即可, 安裝Local測試環境的CentOS就是這麼容易。


二、準備 Docker Image

在本文中,已經先準備好一個ASP.NET Core的 Docker Image,只需要將Image從DockerHub pull下來即可。

三、Linux中的http server

在Linux中最常使用的網頁伺服器服務就是 Apache 和 Nginx了,但是要讓 ASP.NET Core 在 CentOS中執行起來,並且對外開啟服務並不需要安裝 Apache 和 Nginx。在ASP.NET Core的專案中已經隨附了Kestrel網頁伺服器, 只要搭配了Docker, 在CentOS中,不用安裝Apache或Nginx就可以執行ASP.NET Core的網站了。

四、安裝Docker服務

接下來將一步步的說明如何將Docker安裝起來

安裝lvm2
# yum install -y yum-utils device-mapper-persistent-data lvm2 

新增docker-ce repo
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安裝docker-ce
# yum install -y docker-ce

將現在使用者加入 docker 群組
# usermod -aG docker $(whoami) 

開啟docker
# systemctl enable docker

啟動docker
# systemctl start docker  

五、使用 Docker Image並且開啟對外服務

下載容器 (為了示範,已經事先準備了一個ASP.NET Core專案範本,並且放到DockerHub上)
# docker pull me4000/coreapp1:0.2

執行容器
# docker run -it --rm --name coreapp1 -p 8000:80 me4000/coreapp1:0.2

docker run 參數說明

-i:Keep STDIN open even if not attached,讓標準輸入維持在打開的狀態,通常會和-t一起使用,參數是可以一起合併使用的,因此在寫法上可以是-i -t或者是-it
-t:Allocate a pseudo-tty,替Container配置一個虛擬的終端機,通常會和-i一起使用來綁定標準輸入,這樣這個Container就擁有了標準的輸入輸出能力,例如以busybox為例,執行完以下指令後,可用ls來查看Container內的資訊
--rm:Automatically remove the container when it exits. 意思是說Container執行結束之後會自動被移除,因此Container的Status就不會處在「Exited」的狀態。
--name:替container取一個別名。
-p 8080:80:把主機的8000 port 對應到Container的80 port。

六、開啟範例網站

當docker 容器啟動後,ASP.NET Core在容器中的port為80,但是外部要存取容器中的服務就需要透過port mapping來達成,也就是參數 -p 8000:80的用途。
先在CentOS開啟瀏覽器,觀察看看網站是否正常顯示。

但是在本地端測試還不足以驗證這個網站在外部也可以存取,先觀察對外 IP是什麼,如下圖: 

Local的對外IP為 192.168.40.252

接著在虛擬機外部開啟瀏覽器驗證是否可以正常開啟網站

 

七、總結

這篇文章僅作為ASP.NET Core在Linux中執行的一個入門,實務上可能不是這麼運作的,ASP.NET Core 有可能直接 run 在 Apache或Nginx上。
更進階的會使用Kubernetes,以叢集的方式部署 ASP.NET Core應用程式。這會是一個更複雜的主題。

 

 

韓世謙