發布 .Net Core WebAPI 應用程序到 Docker
目錄
- 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