在docker中运行ASP.NET Core Web API应用程序
本文是一篇指导快速演练的文章,将介绍在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应用程序相关推荐
- Docker容器环境下ASP.NET Core Web API应用程序的调试
本文主要介绍通过Visual Studio 2015 Tools for Docker – Preview插件,在Docker容器环境下,对ASP.NET Core Web API应用程序进行调试.在 ...
- 加速ASP.NET Core WEB API应用程序。 第三部分
深度重构和完善ASP.NET Core WEB API应用程序代码 (Deep refactoring and refinement of ASP.NET Core WEB API applicati ...
- 加速ASP.NET Core WEB API应用程序——第2部分
目录 应用程序生产力 异步设计模式 数据规范化与SQL查询效率 NCHAR与NVARCHAR 使用MSSQL服务器的全文引擎 存储过程 优化存储过程 预编译和重用存储过程执行计划 使用Entity F ...
- 使用Entity Developer构建ASP.NET Core Web API应用程序
目录 介绍 先决条件 在Visual Studio 2019中创建新的ASP.NET Core Web API项目 使用Entity Developer创建实体数据模型 创建API控制器 通过实体数据 ...
- 加速ASP.NET Core WEB API应用程序——第1部分
目录 介绍 创建测试RESTful WEB API服务 应用程序架构 数据库 创建ASP.NET核心WEB API应用程序 使用实体框架核心进行数据库访问 异步设计模式 存储库 存储库实现 服务 服务 ...
- 在Docker中运行asp.net core 跨平台应用程序
概述 Docker已经热了有一两年了,而且我相信这不是一个昙花一现的技术,而是一个将深远影响我们日后开发和部署.运营应用系统的一种创新(很多人将其作为devops的一种非常重要的基石).学习docke ...
- 在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务
在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务 https://procodeguide.com/programming/polly-in-aspnet-core ...
- [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了
园子里关于ASP.NET Core Web API的教程很多,但大多都是使用EF+Mysql或者EF+MSSQL的文章.甚至关于ASP.NET Core Web API中使用Dapper+Mysql组 ...
- core webapi缩略图_在ASP.NET Core Web API 项目里无法访问(wwwroot)下的文件
新建 ASP.NET Core Web API 项目 -- RESTFul 风格 Hello World! 一.创建一个空项目 请查看 新建 .NET Core 项目 -- Hello World! ...
最新文章
- LA3942字典树+递推
- 分布式锁和mysql事物扣库存_这个是真的厉害,高并发场景下的订单和库存处理方案,讲的很详细了!...
- php7.3安装yaf扩展(亲测)
- 启动Eclipse时,启不起来JVM terminated. Exit code=-1
- MySQL查询之聚合查询
- async中series的实现 javascript构件
- 数据增长率怎么算_2019 年“泰迪杯”数据分析职业技能大赛A题 超市销售数据分析...
- 50 岁再次创业:我希望 20 年后还能解 Bug
- 两次被简书签约作者拉黑的经历
- 第二十七讲 DataSet和XML
- 【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA实现:1.3 设计算法求数组中相差最小的两个元素(称为最接近数)的差
- vmware输入序列号老是不能注册问题
- 解决后台传入的大于js最大数值精度的问题
- Allegro PCB 将静态铜皮转化为动态铜皮
- 《Pajek社会网络探索性分析》书籍简介
- C++ 虚函数表 vfptr
- 封神台----尤里的复仇I-第一章:为了女神小芳
- 用C++实现矩阵计算器
- FFMPEG的像素格式
- 网络技术交流QQ群:46855032