使用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:sdkmicrosoft/dotnet:runtimemicrosoft/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,生产环境
使用Visual Studio 2017构建.Net Core的Docker镜像的更多相关文章
- visual studio 2017发布dotnet core到docker
docker的好处不用多说,有不了解的可移步<docker入门>,作为一个.net方面的老鸟也想早点搭上docker末班车,减少布署中的各种坑.以下我是在Visual Studio 201 ...
- Visual Studio 2017 ASP.NET Core开发
Visual Studio 2017 ASP.NET Core开发,Visual Studio 2017 已经内置ASP.NET Core 开发工具. 在选择.NET Core 功能安装以后就可以进行 ...
- Visual Studio 2017 调试 windows server 2016 Docker Container
网上很多文章都是在win10下,用Docker for windows工具进行Docker的安装部署的.用知道windows server 2016已经原生支持Docker了,其windows Con ...
- 在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序
前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...
- 【Asp.Net Core】在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序
前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...
- 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序
如何在Visual Studio 2017中使用C# 7+语法 前言 之前不知看过哪位前辈的博文有点印象C# 7控制台开始支持执行异步方法,然后闲来无事,搞着,搞着没搞出来,然后就写了这篇博文,不 ...
- 微软推出ASP.NET Core 2.0,并支持更新Visual Studio 2017
微软推出ASP.NET Core 2.0的一般可用性,并发布.NET Core 2.0.该公司还推出了其旗舰集成开发环境(IDE)的更新:Visual Studio 2017版本15.3和Visual ...
- Visual Studio 2017 通过SSH 调试Linux 上.NET Core
Visual Studio 2017 通过SSH 调试Linux 上.NET Core 应用程序. 本文环境 开发环境:Win10 x64 Visual Studio 2017 部署环境:Ubuntu ...
- Visual Studio 2017 15.7 下的.NET Core
Visual Studio 2017 15.7版本发布,对.NET Core项目的主要相关改变如下, 同时对Xamarin.Android和iOS项目的支持上也做了较大改进. 一. .NET Core ...
随机推荐
- LA 4327 多段图
题目链接:https://vjudge.net/contest/164840#problem/B 题意: 从南往北走,横向的时间不能超过 c: 横向路上有权值,求权值最大: 分析: n<=100 ...
- ASP.NET MVC有用工具
Route Debugger https://www.nuget.org/packages/routedebugger 在Asp.Net MVC程序中,路由(Route)是一个非常核心的概念,可以说是 ...
- GroundPlaneEstimator.cpp解读
GroundPlaneEstimator域下的compute函数,就相当于整个cpp的主函数,也体现了整个调用过程,先执行compute_v_disparity_data,再compute_v_dis ...
- Extjs treePanel 的treestore重复加载问题解决
在Extjs 4.2.2 中构建一个treePanel 发现设置rootVisible后 ,treeStore中设置的autoLoad:false不启作用,在组件初始化的时候即加载数据源,造成数据重复 ...
- 学习Node.js知识小结
什么是Node.js 官方解释:Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js使用了一个事件驱动.非阻塞式I/O的模型( Node.js的特性 ...
- 记录使用antd时样式不生效的问题
最近在学webpack,就配置了一个react的运行环境,为了偷懒使用了antd npm install antd 之后发现竟然tmd没有样式 谷歌之后发现好多同学都出现了这个问题,好在最后解决了 在 ...
- SpringBoot非官方教程 | 第二十三篇: 异步方法
转载请标明出处: 原文首发于https://www.fangzhipeng.com/springboot/2017/07/11/springboot-ansy/ 本文出自方志朋的博客 这篇文章主要介绍 ...
- [Linux]文件浏览
1.使用file命令查看文件中数据的类型 [oracle@linuxforlijiaman Desktop]$ ls linux oracle.txt test.png [oracle@linuxfo ...
- 02-第一个iOS程序-开发步骤
打开Xcode 选择项目模板 Single View Application是最适合初学者的模板 设置项目属性 运行程序 不管怎样,先运行第一个iOS程序看看效果先(用快捷键Command + R 也 ...
- [USACO06NOV]玉米田Corn Fields(动态规划,状态压缩)
题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ...