使用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,生产环境
使用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 ...
随机推荐
- 什么是React中的组件
组件就是页面上的一部分.如图,左边是一个网页.右边是对应的一个组件图.我们可以把一个大的网页拆分成很多小的部分.比如标题部分,对应一个组件,就是标题组件.搜索部分,对应的组件就是搜索组件.而这个搜索组 ...
- C++函数委托
环境: win7_x64旗舰版.VS2015企业版 场景: C++标准库提供std::function类来将一个对象的调用操作封装在一个对象内部,然后可以委托调用,但是有一些弊端,例如下面的需求: 我 ...
- prior_box层
https://www.jianshu.com/p/5195165bbd06 1.step_w.step_h其实就相当于faster中的feat_stride,也就是把这些点从feature map映 ...
- MariaDB修改端口号
修改端口号 打开my.ini文件
- html、css和js原生写一个模态弹出框,顺便解决父元素半透明子元素不透明效果
模态框: html部分: <!-- 按钮 --> <button id="box" onclick="pop_box()">弹出框< ...
- 配置web项目session永不超时
众所周知,当用户登录网站后较长一段时间没有与服务器进行交互,将会导致服务器上的用户会话数据(即session)被销毁.此时,当用户再次操作网页时,如果服务器进行了session校验,那么浏览器将会提醒 ...
- 20.springboot项目部署到linux服务器文件上传临时路径处理问题
1.前言 把项目部署到服务器上之后,文件上传默认会在/tmp路径中. 之前想了各种解决办法,比如如何更改这个上传路径...... 最后发现不是个好的方法,当然就想到了更好的解决方案. 就是我把上传文件 ...
- JDBC相关
//原生jdbc操作案例 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; i ...
- hdu 3966 Aragorn's Story : 树链剖分 O(nlogn)建树 O((logn)²)修改与查询
/** problem: http://acm.hdu.edu.cn/showproblem.php?pid=3966 裸板 **/ #include<stdio.h> #include& ...
- VC中edit控件使用
SetSel(start,end)作用:定制EDIT的所选择内容.间接地可以用于定位光标位置. 使用例子:EXP1:设置光标CEdit* pEdit=(CEdit*)GetDlgItem(I ...