对于一个 .NET Core开发人员,你可能没有使用过Docker,但是你不可能没有听说过Docker。Docker是Github上最受欢迎的开源项目之一,它号称要成为所有云应用的基石,并把互联网升级到下一代。Docker是dotCloud公司开源的一款产品,从其诞生那一刻算起,在短短两三年时间里就成为了开源社区最火爆的项目。对于完全拥抱开源的.NET Core来说,它自然应该对Docker提供完美的支持。对于接下来的内容,我们假设你已经对Docker有了基本的了解,并且在你的机器上(Windows)上已经安装了Docker。

一、创建一个ASP.NET Core应用

我们将演示如何创建一个ASP.NET Core程序并将其编译成Docker镜像,并Docker环境针对该镜像创建一个容器来启动一个应用实例。简单起见,我们还是直接采用脚手架命令行的形式来创建这个ASP.NET Core应用。如下图1所示,我们执行dotnet new web命令在“d:\projects\helloworld”目录下创建一个空的ASP.NET Core应用。

二、定义Dokerfile

我们现在需要将这个ASP.NET Core应用制作成一个Docker镜像,为此我们需要在项目根目录下创建一个Dockerfile文件(文件名就是Dokerfile,没有扩展名),并在该文件中定义如下的内容。如果我们对Dockerfile具有基本的了解,对于这个文件的内容应该不难理解。

# 1. 指定编译和发布应用的镜像FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build

# 2. 指定(编译和发布)工作目录WORKDIR /app

# 3. 拷贝.csproj到工作目录/app,然后执行dotnet restore恢复所有安装的NuGet包COPY *.csproj ./RUN dotnet restore

# 4. 拷贝所有文件到工作目录(/app),然后执行dotnet publish命令将应用发布到/app/out目录下COPY . ./RUN dotnet publish -c Release -o out

# 5. 编译生成Docker镜像# 5.1.设置基础镜像FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime

# 5.2. 设置(运行)工作目录,并将发布文件拷贝到out子目录下WORKDIR /appCOPY --from= build /app/out .

# 5.3. 利用环境变量设置ASP.NET Core应用的监听地址ENV ASPNETCORE_URLS http://0.0.0.0:3721

# 5.4. 执行dotnet命令启动ASP.NET Core应用ENTRYPOINT ["dotnet", "helloworld.dll"]

这个Dockerfile采用了一个中间层(build)来暂存ASP.NET Core MVC应用发布后的资源,其工作目录为“/app”。具体来说,这个层采用“microsoft/aspnetcore-build:2”作为基础镜像,我们先将定义项目的.csproj文件(helloworld.csproj)拷贝到当前工作目录,然后运行“dotnet restore”命令恢复所有注册在这个项目文件中的NuGet包。接下来我们将当前项目的所有文件拷贝到当前工作目录,并执行dotnet publish对整个项目进行编译发布(针对Release模式),发布后的资源被保存到目录“/app/out”中。

在真正将编译生成Docker镜像的时候,我们采用“mcr.microsoft.com/dotnet/core/aspnet:3.0”作为基础镜像,由于应用在上面进行了预先发布,所以我们只需要将发布后的所有文件拷贝到当前工作目录就可以了。接下来我们通过环境变量设置了ASP.NET Core应用的监听地址(http://0.0.0.0:3721)。针对ENTRYPOINT的定义(ENTRYPOINT ["dotnet", "helloworld.dll"]),我们知道当容器被启动的时候,“dotnet helloworld.dll”命令会被执行以启动这个ASP.NET Core应用。

三、生成镜像

Dockerfile文件定义好之后,我们打开CMD命令行并切换到项目所在根目录(也就是Dockerfile文件所在的目录),然后执行“docker build -t helloworldapp .”命令,该命令会利用这个Dockerfile文件生成一个命名为helloworldapp”的Docker镜像。

四、启动容器

既然Docker镜像已经被成功创建出来了,那么余下的工作就很简单了,我们只需要针对这个镜像创建对应的容器,最终的ASP.NET Core应用的启动就可以直接通过启动该容器来完成。如下图所示,我们执行“docker run -d -p 8080:3721 --name myapp helloworldapp”命令针对前面生成的Docker镜像(helloworldapp)创建并启动了一个命名为myapp(--name myapp)的容器。由于我们从外面访问这个应用,所以我们通过端口映射(-p 8080:3721)将内部监听端口3721映射为当前宿主机器的端口8080,所以我们利用地址“http://localhost:8080”访问这个通过Docker容器承载的ASP.NET Core应用。

原文链接:https://www.cnblogs.com/artech/p/inside-asp-net-core-01-06.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

[ASP.NET Core 3框架揭秘] 跨平台开发体验: Docker相关推荐

  1. [ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [上篇]

    微软在千禧年推出 .NET战略,并在两年后推出第一个版本的.NET Framework和IDE(Visual Studio.NET 2002,后来改名为Visual Studio),如果你是一个资深的 ...

  2. [ASP.NET Core 3框架揭秘] 跨平台开发体验: Mac OS

    除了微软自家的Windows平台, .NET Core针对Mac OS以及各种Linux Distribution(RHEL.Ubuntu.Debian.Fedora.CentOS和SUSE等)都提供 ...

  3. 《ASP.NET Core 3 框架揭秘(上下册)》送书结果公告

    [免费送书].Net5实操后的我一夜未眠,来个大胆预测!的送书抽奖结果已经出来了: 这位中奖的同学尽快填写收货地址,4/2 日还没有完成填写将作废,奖品可是热门的<ASP.NET Core 3 ...

  4. 《ASP.NET Core 6框架揭秘》实例演示[19]:数据加解密与哈希

    数据保护(Data Protection)框架旨在解决数据在传输与持久化存储过程中的一致性(Integrity)和机密性(confidentiality)问题,前者用于检验接收到的数据是否经过篡改,后 ...

  5. 《ASP.NET Core 6框架揭秘》实例演示[10]:Options基本编程模式

    依赖注入使我们可以将依赖的功能定义成服务,最终以一种松耦合的形式注入消费该功能的组件或者服务中.除了可以采用依赖注入的形式消费承载某种功能的服务,还可以采用相同的方式消费承载配置数据的Options对 ...

  6. 《ASP.NET Core 6框架揭秘》实例演示[32]:错误页面的N种呈现方式

    由于ASP.NET是一个同时处理多个请求的Web应用框架,所以在处理某个请求过程中出现异常并不会导致整个应用的中止.出于安全方面的考量,为了避免敏感信息外泄,客户端在默认情况下并不会得到详细的出错信息 ...

  7. 《ASP.NET Core 6框架揭秘》实例演示[18]:HttpClient处理管道

    在<<ASP.NET Core 6框架揭秘>实例演示[17]:利用IHttpClientFactory工厂来创建HttpClient>之后,我们将关注点放到HttpClient ...

  8. [ASP.NET Core 3框架揭秘] 异步线程无法使用IServiceProvider?

    标题反映的是上周五一个同事咨询我的问题,我觉得这是一个很好的问题.这个问题有助于我们深入理解依赖注入框架在ASP.NET Core中的应用,以及服务实例的生命周期. 一.问题重现 我们通过一个简单的实 ...

  9. [ASP.NET Core 3框架揭秘] 依赖注入:依赖注入模式

    IoC主要体现了这样一种设计思想:通过将一组通用流程的控制权从应用转移到框架之中以实现对流程的复用,并按照"好莱坞法则"实现应用程序的代码与框架之间的交互.我们可以采用若干设计模式 ...

最新文章

  1. Java 8 一行代码解决了空指针问题,太厉害了...
  2. 网络营销专员浅析在当下移动互联网中实施网络营销的基本特点
  3. python遍历字典方法总结
  4. [云炬创业基础笔记]做好市场调研
  5. python log函数_Python3
  6. Newton Raphson算法
  7. mysql for windows 64_MySQL 5.6 for Windows 解压缩版配置安装(win 10 64位亲测)附安装包下载链接...
  8. 20190906每日一句
  9. win7 64位系统PSD缩略图补丁
  10. 几何平均回归Geometric Mean Regression——使用Python实现
  11. 2012年8月 至 2014年2月1日读书列表
  12. 原理 CDN加速原理
  13. 【GD32F310开发板试用】Contiki-NG在GD32F310的移植
  14. JS-修改图片颜色值
  15. 高维空间中椭圆的基本方程
  16. 在电脑上怎么做判断题打√或x_苹果Mac电脑知识竞赛考试题
  17. RDP报表工具v2.3.*版本升级操作步骤
  18. Kubernetes系统日志查看命令
  19. docker mysql volum_Docker Volume入门用法详解
  20. python自动化操作教程_Python键鼠操作自动化库PyAutoGUI简介

热门文章

  1. pm_bout_1/2_on_subway
  2. DotNetMagic 5.4.0破解
  3. 如何使用ARM创建Teams Bot所需要的Azure资源
  4. 共享计算机后无法访问磁盘,win10电脑共享硬盘无法访问如何解决
  5. java部分服务出现异常_Java web service 异常
  6. python数据库实例_Python3.6简单的操作Mysql数据库的三个实例
  7. Haproxy安装与配置
  8. 美链BEC合约漏洞技术分析 1
  9. 创建 overlay 网络 - 每天5分钟玩转 Docker 容器技术(50)
  10. Apache-不重启完成添加或更改域名