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

先决条件

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

  • 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,然后单击确定按钮。

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

项目成功创建后,在解决方案浏览器中可以看到如下项目结构:

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

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

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

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

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

首先,进入项目根目录(也就是包含有project.json文件的这个目录),使用dotnet publish命令发布应用程序。这就会把编译后的DLL连同依赖项一起,全部复制到bin/Debug/netcoreapp1.0/publish目录下。此时,使用WinSCP类似的软件,将该目录下的所有内容全部复制到Ubuntu的机器上(当然,如果是在Windows 10下使用Docker,也就不需要这个复制的步骤)。复制完成后,在Ubuntu系统中可以看到所有的这些文件:

我们顺便在Ubuntu中测试一下这个应用程序,看ASP.NET Core Web API是否能够在Linux的系统中与Windows下有着相同的用户体验。此时,在这个目录下运行dotnet DockerWebAPI.dll命令(要运行dotnet命令,就需要在Ubuntu中安装.NET Core CLI,也可以到微软官方网站下载安装,但对于本文的演练来说,这一步是不一定需要的),可以看到下面的界面:

使用curl命令测试一下:

测试成功。

接下来,在这个包含有DockerWebAPI.dll文件的目录下,新建一个Dockerfile文件,使用vim或者nano等文本编辑器,输入以下内容(#开头的行为注释行,可以不输入):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1 6
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 Container中运行ASP.NET Core Web API应用程序

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

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标签

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

让我们测试一下,在Linux中使用curl命令调用我们的服务,注意,与之前的测试相比,端口号需要由5000改为8080:

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

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

总结

本文通过快速地对各个步骤的描述,介绍了使用Visual Studio 2015创建ASP.NET Core WebAPI应用程序,并在Docker中运行该应用程序的方法。有些地方可能描述得不是很清楚,如有疑问欢迎留言讨论。今后争取能够更多地分享Visual Studio 2015、Docker、.NET Core等相关的实践经验。

相关文章:

  • docker4dotnet #1 – 前世今生 & 世界你好

  • docker4dotnet #2 容器化主机

  • docker – 你应该知道的10件事

  • ASP.NET Core Docker部署

  • docker4dotnet #3 .net猿和小鲸鱼的苹果山之旅

  • 我为什么用docker-compose来打包开发环境

  • Win10上运行Docker

原文地址:http://www.cnblogs.com/daxnet/p/5782019.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

在docker中运行ASP.NET Core Web API应用程序相关推荐

  1. Docker容器环境下ASP.NET Core Web API应用程序的调试

    本文主要介绍通过Visual Studio 2015 Tools for Docker – Preview插件,在Docker容器环境下,对ASP.NET Core Web API应用程序进行调试.在 ...

  2. 加速ASP.NET Core WEB API应用程序。 第三部分

    深度重构和完善ASP.NET Core WEB API应用程序代码 (Deep refactoring and refinement of ASP.NET Core WEB API applicati ...

  3. 加速ASP.NET Core WEB API应用程序——第2部分

    目录 应用程序生产力 异步设计模式 数据规范化与SQL查询效率 NCHAR与NVARCHAR 使用MSSQL服务器的全文引擎 存储过程 优化存储过程 预编译和重用存储过程执行计划 使用Entity F ...

  4. 使用Entity Developer构建ASP.NET Core Web API应用程序

    目录 介绍 先决条件 在Visual Studio 2019中创建新的ASP.NET Core Web API项目 使用Entity Developer创建实体数据模型 创建API控制器 通过实体数据 ...

  5. 加速ASP.NET Core WEB API应用程序——第1部分

    目录 介绍 创建测试RESTful WEB API服务 应用程序架构 数据库 创建ASP.NET核心WEB API应用程序 使用实体框架核心进行数据库访问 异步设计模式 存储库 存储库实现 服务 服务 ...

  6. 在Docker中运行asp.net core 跨平台应用程序

    概述 Docker已经热了有一两年了,而且我相信这不是一个昙花一现的技术,而是一个将深远影响我们日后开发和部署.运营应用系统的一种创新(很多人将其作为devops的一种非常重要的基石).学习docke ...

  7. 在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务

    在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务 https://procodeguide.com/programming/polly-in-aspnet-core ...

  8. [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了

    园子里关于ASP.NET Core Web API的教程很多,但大多都是使用EF+Mysql或者EF+MSSQL的文章.甚至关于ASP.NET Core Web API中使用Dapper+Mysql组 ...

  9. core webapi缩略图_在ASP.NET Core Web API 项目里无法访问(wwwroot)下的文件

    新建 ASP.NET Core Web API 项目 -- RESTFul 风格 Hello World! 一.创建一个空项目 请查看 新建 .NET Core 项目 -- Hello World!  ...

最新文章

  1. LA3942字典树+递推
  2. 分布式锁和mysql事物扣库存_这个是真的厉害,高并发场景下的订单和库存处理方案,讲的很详细了!...
  3. php7.3安装yaf扩展(亲测)
  4. 启动Eclipse时,启不起来JVM terminated. Exit code=-1
  5. MySQL查询之聚合查询
  6. async中series的实现 javascript构件
  7. 数据增长率怎么算_2019 年“泰迪杯”数据分析职业技能大赛A题 超市销售数据分析...
  8. 50 岁再次创业:我希望 20 年后还能解 Bug
  9. 两次被简书签约作者拉黑的经历
  10. 第二十七讲 DataSet和XML
  11. 【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA实现:1.3 设计算法求数组中相差最小的两个元素(称为最接近数)的差
  12. vmware输入序列号老是不能注册问题
  13. 解决后台传入的大于js最大数值精度的问题
  14. Allegro PCB 将静态铜皮转化为动态铜皮
  15. 《Pajek社会网络探索性分析》书籍简介
  16. C++ 虚函数表 vfptr
  17. 封神台----尤里的复仇I-第一章:为了女神小芳
  18. 用C++实现矩阵计算器
  19. FFMPEG的像素格式
  20. 网络技术交流QQ群:46855032

热门文章

  1. 编码GBK的不可映射字符
  2. Python编程系列教程第13讲——隐藏数据和封装
  3. php与java安全之争
  4. 敏捷个人:提供更多文档下载,并转载一篇敏捷个人读书笔记
  5. PHP环境,放置系统盘的文件
  6. C# 中是否支持 Like 和 ln 条件的参数化查询 ?
  7. 客户要求ASP.NET Core API返回特定格式,怎么办?(续2)
  8. 推荐Mongodb GUI 可视化管理工具-NoSQLBooster
  9. .NET 6 数组拷贝性能对比
  10. .NET6正式版将近,70%开发者或面临技术断层!