使用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 ...
随机推荐
- ACM-ICPC 2018 徐州赛区网络预赛 A.Hard to prepare 【规律递推】
任意门:https://nanti.jisuanke.com/t/31453 A.Hard to prepare After Incident, a feast is usually held in ...
- 安卓extends和implements
extends是继承类 implements是实现接口
- 【luogu P1343 地震逃生】 题解
题目链接:https://www.luogu.org/problemnew/show/P1343 菜 #include <queue> #include <cstdio> #i ...
- java.lang.IllegalStateException: Circular dependencies cannot exist in RelativeLayout
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content&q ...
- MVC5 模型 生成EF
在看本篇之前请先去了解一下EF以及如何利用模型生成数据库 https://i.cnblogs.com/posts?categoryid=1107227 看Code First就可以了. 等你了解了E ...
- focal loss for dense object detection
温故知新 focal loss for dense object detection,知乎上一人的评论很经典.hard negative sampling, 就是只挑出来男神(还是最难追的),而foc ...
- shell脚本中 [-eq] [-ne] [-gt] [-lt] [ge] [le]
-eq //等于 -ne //不等于 -gt //大于 (greater ) -lt //小于 (less) -ge //大于等于 -le //小于等于 在linux 中 命令执行状态:0 为真,其他 ...
- spring入门学习感悟
1:ioc:控制反转 控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是有外部容器负责创建和维护的(获取依赖对象的过程被反转了) 2:di:依赖注入,它是一种控制反转的一种实现方法,ioc容器 ...
- 全局变量重复定义,fatal error LNK1169: 找到一个或多个多重定义的符号
1.在GlobeValue.h中定义了一个变量: char gl_UID[256]; 2.在b.cpp和e.cpp中分别引用GlobeValue.h,并且使用gl_UID的全局变量, 结果出现:fat ...
- ubuntu以root进入图形化界面
sudo nautilus 可以进行一些文件夹移动操作,不会出现权限的问题