1 Docker 鏡像優化
微軟在為開發人員生成 Docker 鏡像時,提供以下三種主要方案:
- 用於開發 .NET Core 應用的 鏡像
- 用於構建生成 .NET Core 應用的 鏡像
- 用於運行 .NET Core 應用的 鏡像
當開發、 構建和運行容器化應用程序時,我們具有不同的優先級別。
-
開發:優先級主要是為了快速循環更改和調試所做的更改的能力,鏡像的大小不為重要,而是你可以對代碼進行更改並快速查看它們(sdk)。
-
生成中:此鏡像包含將應用程序,其中包括編譯器和任何其他依賴項以優化的二進制文件編譯所需的一切(build)。 生成鏡像用於創建你將放入生產鏡像的資產。 將用於構建鏡像,持續集成,或在生成環境中。 此方法允許用於編譯和生成中生成映像實例應用程序 (具有所有必需的依賴項) 的生成代理。 生成代理只需要了解如何運行此 Docker 映像即可。
-
生產:速度可以部署和啟動你的映像, 此映像很小,因此從 Docker 注冊表到 Docker 主機的網絡性能進行了優化。 已准備運行內容,以此實現從 Docker 運行到處理結果的最快時間。 Docker 模型中不需要動態代碼編譯。 放置在此映像中的內容將限制為運行應用程序所需的二進制文件和內容。
例如,
dotnet publish
輸出包含:- 已編譯的二進制文件
- .js 和.css 文件
2 Docker 鏡像類型
若要實現上述目標,我們提供 microsoft/dotnet
鏡像類型:
microsoft/dotnet:<version>-sdk
(microsoft/dotnet:2.0.0-sdk
) 此映像包含.NET 核心 SDK,其中包含.NET 核心和命令行工具 (CLI)。 此映像將映射到開發方案。 此映像用於本地開發、 調試和單元測試。 此映像還可用於生成方案。 使用microsoft/dotnet:sdk
始終為你提供最新版本。
microsoft/dotnet:<version>-runtime
: 此映像包含.NET 核心 (運行時和庫),非常適合運行.NET Core 應用生產。
除了開發、生成和生產的優化方案外,我們還提供了其他映像:
microsoft/dotnet:<version>-runtime-deps
:運行時 deps映像包含操作系統所有所需的.NET 核心的本機依賴項。 此映像適用自包含的應用程序。
每個變體的最新版本:
microsoft/dotnet
或microsoft/dotnet:latest
(別名 SDK 映像)microsoft/dotnet:sdk
microsoft/dotnet:runtime
microsoft/dotnet:runtime-deps
3 構建基於ASP.NET Core 的Docker 應用
此 ASP.NET Core Docker 示例演示了針對適用於生產應用的 ASP.NET Core 構建 Docker 映像的最佳做法模式。
先決條件
若要生成並運行,請安裝以下各項:
.NET 核心 2.0 SDK
-
Visual Studio 2017
獲取示例應用程序
獲取該示例的最簡單方法是通過克隆示例存儲庫使用 git,使用以下說明:
git clone https://github.com/dotnet/dotnet-docker-samples/
本地運行 ASP.NET 應用程序
在容器化應用程序之前,請先在本地運行應用程序。
你可以本地生成並運行應用程序使用.NET 核心 2.0 SDK 使用以下命令 (的說明假定存儲庫的根目錄):
cd aspnetapp
dotnet run
在應用程序啟動后,請訪問http://localhost:5000/在 web 瀏覽器中。
使用 Docker 的 Linux 容器生成並運行示例
你可以生成並運行在 Docker 使用 Linux 容器使用以下命令 (的說明假定存儲庫的根目錄) 中的示例:
cd aspnetapp
docker build -t aspnetapp .
docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
在應用程序啟動后,請訪問http://localhost:5000/在 web 瀏覽器中。
Dockerfile打包編譯成果需要事先發布
您可以生成的應用程序已准備好部署到生產環境使用本地dotnet 發布命令。
dotnet publish -c release -o published
-C 版本自變量生成應用程序在發布模式下 (默認值為調試模式下)。 有關詳細信息,請參閱dotnet run 參考命令行參數。
你可以上運行應用程序Windows使用以下命令。
dotnet published/aspnetapp.dll
如果使用visual studio 2017,並且存在多個工程,則可以在release模式下,F6編譯生成所有工程的鏡像。
此示例中使用的 docker 映像
在此示例中使用以下的 Docker 映像
microsoft/aspnetcore-build:2.0,構建容器
microsoft/aspnetcore:2.0,生產環境