在docker中运行ASP.NET Core Web API应用程序

   2023-02-09 学习力0
核心提示:本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述。对于.NET Core以及docker的基本概念,网上已经有很多文章对其进行介绍了,因此本文不会再详细讲解

本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述。对于.NET Core以及docker的基本概念,网上已经有很多文章对其进行介绍了,因此本文不会再详细讲解这些内容。对.NET Core和docker不了解的朋友,建议首先查阅与这些技术相关的文档,然后再阅读本文。

转载于:http://www.cnblogs.com/daxnet/p/5782019.html

要完成本文所介绍的演练任务,需要准备以下环境:

  • Visual Studio 2015,或者Visual Studio Code,用于创建ASP.NET Core的Web API应用程序。本文使用Visual Studio 2015
  • 如果使用Visual Studio 2015,则需要安装.NET Core 1.0.0 – VS 2015 Tooling Preview 2。请点击此处安装
  • Microsoft .NET Core SDK,可以到微软官方网站下载安装
  • 一台装有Ubuntu 14.04.4 LTS的机器,可以是虚拟机。在Ubuntu中安装docker CLI。可以按照docker网站上的步骤进行安装
  • 如果希望在Windows下使用docker,请确保Windows机器满足下面的需求:
    • 64位Windows 10 Pro、Enterprise或者Education版本(Build 10586以上版本,需要安装1511 November更新)
    • 在系统中启用Hyper-V。如果没有启用,Docker for Windows在安装过程中会自动启用Hyper-V(这个过程需要重启系统)

有关Docker for Windows的内容,我会在另外的文章中介绍。

演练步骤

使用Visual Studio 2015创建一个ASP.NET Core的Web API应用程序

打开Visual Studio 2015,在新建项目的对话框中选择.NET Core分类下的ASP.NET Core Web Application (.NET Core)项目模板,给项目命名为DockerWebAPI,然后单击确定按钮。

在docker中运行ASP.NET Core Web API应用程序

在New ASP.NET Core Web Application (.NET Core)对话框中,选择Web API,然后点击确定按钮。

在docker中运行ASP.NET Core Web API应用程序

项目成功创建后,在解决方案浏览器中可以看到如下项目结构:(注意:其中的DockerWebAPI1是我为后面做负载均衡准备的第二个项目)

在docker中运行ASP.NET Core Web API应用程序

 

在此也不对ASP.NET Core的应用程序结构做过多介绍了。接下来,我们修改一下自动产生的ValuesController,使得GET方法返回当前机器的机器名,如下:

在docker中运行ASP.NET Core Web API应用程序

 

打开Program.cs文件,在构建WebHostBuilder的连贯方法链中,加入UseUrls调用,以便我们的应用程序可以接受来自任何IP的请求。这就使得应用程序在docker容器中也能接受HTTP请求:

在docker中运行ASP.NET Core Web API应用程序

OK,编译后,在命令行使用dotnet run运行这个应用程序:

在docker中运行ASP.NET Core Web API应用程序

 

打开浏览器,测试一下我们的应用,运行成功:

在docker中运行ASP.NET Core Web API应用程序

将ASP.NET Core Web API应用程序编译成Docker Image

首先,进入项目根目录(如我的项目目录为:C:\Users\Administrator\Documents\Visual Studio 2017\Projects\DockerWebAPI\DockerWebAPI),使用dotnet publish命令发布应用程序。这就会把编译后的DLL连同依赖项一起,全部复制到bin/Debug/netcoreapp1.0/publish目录下。dotnet publish命令成功后,在命令行

中可以看到所有的这些文件:

在docker中运行ASP.NET Core Web API应用程序

 

接下来,在这个包含有DockerWebAPI.dll文件的目录下,新建一个Dockerfile文件,使用文本编辑器进行编辑,不过我是用的记事本。输入以下内容(#开头的行为注释行,可以不输入):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 基于microsoft/dotnet:latest构建Docker Image
FROM microsoft/dotnet:latest
 
# 进入docker中的/usr/local/src目录
RUN cd /usr/local/src
 
# 创建DockerWebAPI目录
RUN mkdir DockerWebAPI
 
# 设置工作路径
WORKDIR /usr/local/src/DockerWebAPI
 
# 将当前文件夹下的所有文件全部复制到工作目录
COPY *.* ./
 
# 向外界暴露5000端口
EXPOSE 5000
 
# 执行dotnet DockerWebAPI.dll命令
CMD ["dotnet", "DockerWebAPI.dll"]

 

 

 

 

 

 

 

 

 

 

 

关于Dockerfile的定义,我们暂不讨论,请参考Docker的官方文档。

仍然在当前目录下,执行以下命令,创建Docker Image:

1
docker build -t daxnet/docker-webapi .

 

注意,千万别省略了最后一个点号,它表示采用当前路径的Dockerfile来生成Docker Image。如果是第一次生成,由于需要下载microsoft/dotnet:latest这个Docker Image作为基础Image,所以会比较慢(国内网速原因,你懂的,如果想提高下载速度,可以使用阿里云的镜像,下一篇文章中我会讲到怎么使用阿里云镜像)。如果成功的话,大致可以看到以下画面:

在docker中运行ASP.NET Core Web API应用程序

在Docker Container中运行ASP.NET Core Web API应用程序

现在,我们就可以使用docker run来执行刚才产生的Docker Image了。docker run会把Docker Image加载到Docker Container中,然后执行由Dockerfile指定的命令(也就是dotnet DockerWebAPI.dll命令)。docker run的命令如下:

1
docker run -it -p 8080:5000 daxnet/docker-webapi

 

在这条命令中:

  • -it参数表示需要提供一个模拟的shell环境,并要求有用户交互功能,这样当我们按下Ctrl+C的时候,就可以停止我们的应用程序
  • -p 8080:5000参数表示需要将Docker Container的5000端口映射到主机环境的8080端口,也就是客户端可以直接通过8080端口访问我们的应用程序
  • daxnet/docker-webapi参数指定了需要运行的Docker Image。此处采用默认的latest标签

运行后,可以看到如下界面:

在docker中运行ASP.NET Core Web API应用程序

让我们测试一下,注意,与之前的测试相比,端口号需要由5000改为8080:

 

当然,也可以在另一台机器的浏览器中调用:

在docker中运行ASP.NET Core Web API应用程序

 

事实上,这时返回的机器名,已经是Docker容器的ID值了:

在docker中运行ASP.NET Core Web API应用程序

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 使用WebClient自动填写并提交ASP.NET页面表单的源代码
    使用WebClient自动填写并提交ASP.NET页面表单的
    转自:http://www.cnblogs.com/anjou/archive/2007/03/07/667253.html 在.NET中通过程序填写和提交表单还是比较简单。比如,要提交一个如下图所示的登录表单:           填写和提交以上表单的代码如下:       // 要提交表单的URI字符串
    02-09
  • asp.net mvc多条件+分页查询解决方案
    


            
asp.net mvc多条件+分页查询解决方案
    asp.net mvc多条件+分页查询解决方案
    http://www.cnblogs.com/nickppa/p/3232535.html开发环境vs2010css:bootstrapjs:jquery    bootstrap paginator原先只是想做个mvc的分页,但是一般的数据展现都需要检索条件,而且是多个条件,所以就变成了MVC多条件+分页查询因为美工不是很好,所以用的是
    02-09
  • ASP.NET操作Cookies的问题(Bug or Not)
    以下存和取都是在不同的页面中,如果是在同一个页面也没必要用cookies了。 Test1: 给Cookies赋值: const string AAA="aaa"; Response.Cookies[AAA].Value = "111;222;333"; 取值: string value = Request.Cookies[AAA].Value; // value为111 Test2: 给Cooki
    02-09
  • Asp.Net Core 自定义验证属性
      很多时候,在模型上的验证需要自己定义一些特定于我们需求的验证属性。所以这一篇我们就来介绍一下怎么自定义验证属性。  我们来实现一个验证邮箱域名的自定义验证属性,当然,最重要的是需要定义一个继承自ValidationAttribute的类,然后在实现其IsVal
    02-09
  • Asp.Net 之 枚举类型的下拉列表绑定
    有这样一个学科枚举类型:/// 学科 /// /summary public enum Subject {None = 0,[Description("语文")]Chinese = 1,[Description("数学")]Mathematics = 2,[Description("英语")]English = 3,[Description("政治")]Politics = 4,[Description("物理&qu
    02-09
  • [ASP.NET笔记] 1.Web基础知识
         1:http协议:     2:web服务器:     3:静态网页的概念     4:动态网页的概念       http协议:http(hypertext transfer protocol) 即超文本传输协议,这个协议是在internet上进行信息传送的协议任何网页之间要相互沟通,必须要尊循
    02-09
  • ASP.NET邮件发送 .net 发送邮件
      今天做了个ASP.NET做发送邮件功能,发现QQ邮箱好奇怪,当你用QQ邮箱做服务器的时候什么邮件都发送不出去(QQ邮箱除外)。而且爆出这样的错误:"邮箱不可用。 服务器响应为: Error: content rejected.http://mail.qq.com/zh_CN/help/content/rejectedmail.ht
    02-09
  • 由ASP.NET Core根据路径下载文件异常引发的探究
    前言    最近在开发新的项目,使用的是ASP.NET Core6.0版本的框架。由于项目中存在文件下载功能,没有使用类似MinIO或OSS之类的分布式文件系统,而是下载本地文件,也就是根据本地文件路径进行下载。这其中遇到了一个问题,是关于如何提供文件路径的,通
    02-09
  • ASP.NET的运行原理与运行机制 ASP.NET的开发模式包括
    ASP.NET的运行原理与运行机制 ASP.NET的开发模
    在Asp.net4和4.5中,新增了WebPages Framework,编写页面代码使用了新的Razor语法,代码更加的简洁和符合Web标准,编写方式更接近于PHP和以前的Asp,和使用WebForms这种模仿Windows Form编程方式有了很大不同,不再有大量控件和控件生成的大量不够灵活的代码
    02-09
  • ASP.NET 后台接收前台POST过来的json数据方法
     ASP.NET前后台交互之JSON数据 https://www.cnblogs.com/ensleep/p/3319756.html
    02-09
点击排行