本篇文章主要是如何在Docker容器中執行ASP.NET Core應用程式,以及修改系統之後,釋出更新。本文章採用自定義的Docker檔案

系統要求:

  1.伺服器或本地已經安裝docker

一、建立一個Asp.Net Core 2.1 Web應用(若可以熟練建立專案,可忽略此節)

注意這裡沒有勾選 “啟動Docker支援”

二、建立Docker檔案

  專案建立完成之後,在專案的根目錄下,新增一個Dockerfile檔案,注意檔名。

  在Dockerfile檔案中,新增如下內容

1

2

3

4

5

6

7

8

9

10

11

12

13

# 新增基礎映象

FROM microsoft/dotnet:2.1-aspnetcore-runtime

#容器中系統的工作空間

WORKDIR /app

#拷貝當前資料夾下的檔案到容器中系統的工作空間

COPY . /app

#設定Docker容器對外暴露的埠

EXPOSE 80

#容器中使用 ["dotnet","系統啟動的dll"] 來執行應用程式

#使用ENTRYPOINT ["dotnet","系統啟動的dll"]

#或使用 CMD ["dotnet","系統啟動的dll"]

ENTRYPOINT ["dotnet""School.Web.dll"]

  修改Dockerfile檔案屬性

  

 三、釋出應用程式

  

  注意在釋出的設定,目標執行時為可移植,我曾經設定為winX64發現執行時啟動不起來的問題

四、釋出應用程式到伺服器上

   使用FTP或其他工具,將應用程式上傳到伺服器上。如,我使用FileZilla,將檔案上傳到/home/ubuntu/work/project/csharp/school資料夾下。

五、建立映象

  在應用程式的目錄下:/home/ubuntu/work/project/csharp/school(根據自己情況而定,也就是伺服器上Dockerfile所在目錄),執行生成映象命令。

docker build -t school:1.0.0 . 

  注意映象名稱後邊的 .  (school:1.0.0是標識映象名稱和版本資訊)

  此時將下載Asp.Net Core 2.1-aspnetcore-runtime 基礎映象,並執行Dockerfile中的後續指令

六、建立並啟動容器

docker run --name=school -d -p 8000:80 -v /home/ubuntu/work/project/csharp/school:/app school:1.0.0 

  注意此處-v,將檔案掛載到伺服器宿主機上,便於後續更改時,可以直接重啟生效

  當成功執行之後,會輸出school(容器名稱),這時候可以通過 docker ps -a 檢視容器是否啟動正常。當容器狀態顯示為UP時,表示啟動成功。

  在本地輸入伺服器IP地址+8000埠,成功看到系統正常運行了。

七、應用程式更新及釋出

  專案正常啟動之後,嘗試修改專案的View頁面或Controller,然後重新發布之後,將更新上傳至伺服器對應的專案資料夾(/home/ubuntu/work/project/csharp/school)。

  執行命令,使專案更新:

docker restart school

  瀏覽器中重新整理頁面檢視更新

八、錯誤排查

  1.當啟動容器是發現容器狀態為Exit時,通過命令: docker logs school  檢視容器啟動中的錯誤。

  2.可對照上述過程中的各個注意點一一排查。