1. 程式人生 > >發布 .Net Core WebAPI 應用程序到 Docker

發布 .Net Core WebAPI 應用程序到 Docker

ast esc 現在 netcore tree tps 冒號 copy host

目錄

  • 1. 創建 .net core webapi 項目
  • 2. 編譯應用
  • 3. 創建 Dockerfile 文件
  • 4. 上傳文件到服務器
  • 5. 生成Docker Image
  • 6. 在Docker Container中運行 Web API應用
  • 7. 測試 Web API應用
  • 參考

1. 創建 .net core webapi 項目

創建基於 .net core 2.0 的 webapi 項目,命名為 GetMachNameWebAPI。

並修改 ValuesController 的 Get() 方法返回當前機器的機器名或其他操作。

// GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
    return new string[] { Environment.MachineName, Environment.OSVersion.Platform.ToString() };
}

2. 編譯應用

在項目根目錄使用 dotnet publish 命令發布應用程序,發布後的資源被保存在目錄
\bin\Debug\netcoreapp2.0\publish 下面。

3. 創建 Dockerfile 文件

在publish裏目錄裏面新建一個Dockerfile文件(文件名就是Dokerfile,沒有擴展名),並在該文件中定義如下的內容:

# 基於microsoft/aspnetcore:2.0構建Docker Image
FROM microsoft/aspnetcore:2.0
 
# 設置工作路徑
WORKDIR /app
 
# 將當前文件夾下的所有文件全部復制到工作目錄
COPY *.* ./
 
# 配置環境變量ASPNETCORE_URLS
ENV ASPNETCORE_URLS http://0.0.0.0:5000

# 暴露5000端口
EXPOSE 5000
 
# 執行dotnet GetMachNameWebAPI.dll命令
CMD ["dotnet", "GetMachNameWebAPI.dll"]

FROM:第一個指令必須為 FROM。 此指令用於初始化新的生成階段,並為剩余指令設置基礎映像。可使用多個FROM為多個映像。

WORKDIR:為剩余的任意 RUN、CMD、ENTRYPOINT、COPY 和 ADD Dockerfile 指令設置工作目錄。 如果不存在,則會創建該目錄。

COPY:從源路徑復制新文件或目錄,並將它們添加到目標容器文件系統。

ENV:用來在鏡像構建過程中設置環境變量。

RUN:在當前映像之上的一個新層中執行任何命令,並提交結果。

ENTRYPOINT:支持以可執行文件的形式運行容器。每個Dockerfile中只能有一個 ENTRYPOINT ,當指定多個時,只有最後一個起效。

詳細請參考官網Dockerfile reference文檔

註意ASPNETCORE_URLS的配置可以直接在代碼裏面Program的Main方法裏指定,比如:

.UseUrls("http://localhost:5001")

也可以如本文通過環境變量配置。可參看.Net Core 修改默認的啟動端口

4. 上傳文件到服務器

通過WinSCP類似的軟件,將該目錄下的全部內容復制到Ubuntu機器上。

5. 生成Docker Image

在 Dockerfile 文件同目錄下執行以下命令,創建Docker Image。千萬別省略了最後一個點號,它表示采用當前路徑的Dockerfile來生成Docker Image。

docker build -t getmachinewebapi:v0.1

在這條命令中:

-t參數用來指定 image 文件的名字,後面還可以用冒號指定標簽。如果不指定,默認的標簽就是latest。

最後的那個點表示 Dockerfile 文件所在的路徑,上例是當前路徑,所以是一個點。

詳細請參考官網docker build文檔

6. 在Docker Container中運行 Web API應用

現在,我們就可以使用docker run來執行剛才產生的Docker Image了。docker run會把Docker Image加載到Docker Container中,然後執行由Dockerfile指定的命令(也就是dotnet DockerWebAPI.dll命令)。docker run的命令如下

docker run -it -p 8080:5000 getmachinewebapi:v0.1

在這條命令中:

-it參數:表示需要提供一個模擬的shell環境,並要求有用戶交互功能,這樣在本機窗口輸入的命令,就會傳入容器。

-p 8080:5000參數:表示需要將Docker Container的5000端口映射到主機環境的8080端口,也就是客戶端可以直接通過8080端口訪問我們的應用程序。

getmachinewebapi:v0.1參數:image 文件的名字(如果有標簽,還需要提供標簽,默認是 latest 標簽)。

詳細請參考官網docker run文檔

7. 測試 Web API應用

在Linux主機裏面通過curl測試:

curl http://localhost:8080/api/values && echo

或者在另外一臺機器訪問地址 例如http://192.168.174.135:8080/api/values

參考

  • 在docker中運行ASP.NET Core Web API應用程序
  • Building Docker Images for .NET Core Applications
  • ASP.NET Core Docker Sample

發布 .Net Core WebAPI 應用程序到 Docker