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/dotnetmicrosoft/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

获取示例应用程序

获取该示例的最简单方法是通过克隆示例存储库使用 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镜像的更多相关文章

  1. visual studio 2017发布dotnet core到docker

    docker的好处不用多说,有不了解的可移步<docker入门>,作为一个.net方面的老鸟也想早点搭上docker末班车,减少布署中的各种坑.以下我是在Visual Studio 201 ...

  2. Visual Studio 2017 ASP.NET Core开发

    Visual Studio 2017 ASP.NET Core开发,Visual Studio 2017 已经内置ASP.NET Core 开发工具. 在选择.NET Core 功能安装以后就可以进行 ...

  3. Visual Studio 2017 调试 windows server 2016 Docker Container

    网上很多文章都是在win10下,用Docker for windows工具进行Docker的安装部署的.用知道windows server 2016已经原生支持Docker了,其windows Con ...

  4. 在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序

    前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...

  5. 【Asp.Net Core】在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序

    前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...

  6. 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序

    如何在Visual Studio 2017中使用C# 7+语法   前言 之前不知看过哪位前辈的博文有点印象C# 7控制台开始支持执行异步方法,然后闲来无事,搞着,搞着没搞出来,然后就写了这篇博文,不 ...

  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 ...

  8. Visual Studio 2017 通过SSH 调试Linux 上.NET Core

    Visual Studio 2017 通过SSH 调试Linux 上.NET Core 应用程序. 本文环境 开发环境:Win10 x64 Visual Studio 2017 部署环境:Ubuntu ...

  9. Visual Studio 2017 15.7 下的.NET Core

    Visual Studio 2017 15.7版本发布,对.NET Core项目的主要相关改变如下, 同时对Xamarin.Android和iOS项目的支持上也做了较大改进. 一. .NET Core ...

随机推荐

  1. LA 4327 多段图

    题目链接:https://vjudge.net/contest/164840#problem/B 题意: 从南往北走,横向的时间不能超过 c: 横向路上有权值,求权值最大: 分析: n<=100 ...

  2. 课堂笔记--------JavaScript 的DOM操作

    1.DOM的基本概念 DOM是文档对象模型,这种模型为树模型:文档是指标签文档:对象是指文档中每个元素:模型是指抽象化的东西. 2.Window对象操作 一.属性和方法: 属性(值或者子对象): op ...

  3. spring 跨域 CORS (Cross Origin Resources Share) 跨域

    Spring提供了三种方式跨域 1.CorsFilter 过滤器 2.<mvc:cors> Bean(全局,推荐使用) 3.@CrossOrigin注解 以上三种方式本质都是用来配置Cor ...

  4. 【luogu P3372 线段树1】 模板

    线段树的模板题 题目链接:https://www.luogu.org/problemnew/show/P3372 update区间修改,query区间求和 #include <iostream& ...

  5. PC Android IOS资料同步更新

    在程序发布后,特别是IOS版本,想替换里边的内容,重新发布版本很是麻烦.我们就可以动态用AssetBundle更新内容. 如果是自定义二进制文件,先要改为“.Bytes”后缀的文件,Unity会把这个 ...

  6. JavaScript:验证输入

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  7. springboot 整合dubbo 消费模块引入springboot 之后自动注入jdbc 模块导致启动报错问题

    方案一: 排除方法 pom文件直接将数据起步模块内排除数据源自动注入 jdbc jar <!--mybatis-plus 集成 --><!--mybitis--><dep ...

  8. Mongodb在window上启动

    MongoDB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐.这里主要讲如何在windows平台下安装MongoDB. 安装最新版本mon ...

  9. 『ACM C++』HDU杭电OJ | 1425 - sort (排序函数的特殊应用)

    今天真的是累哭了,周一课从早八点半一直上到晚九点半,整个人要虚脱的感觉,因为时间不太够鸭所以就回头看看找了一些比较有知识点的题来总结总结分析一下,明天有空了就开始继续打题,嘻嘻嘻. 今日兴趣电影: & ...

  10. C++的句柄类

    上一篇文件介绍了关于C++代理类的使用场景和实现方法,但是代理类存在一定的缺陷,就是每个代理类会创建一个新的对象,无法避免一些不必要的内存拷贝,本篇文章引入句柄类,在保持代理类多态性的同时,还可以避免 ...