使用Visual Studio 2017构建.Net Core的Docker镜像
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,生产环境