目录
- 1 ASP.NET Core简要介绍
- 2 .NET SDK
- 2.1 什么是 .NET SDK?
- 2.2 安装 .NET SDK
- 2.3 安装Visual Studio
- 3 创建一个asp.net core的web应用
- 3.1 使用Visual Studio创建web项目
- 3.2 给项目添加需要的依赖
- 3.3 添加一个controller,功能是创建一个word文档
- 3.4 启动测试
- 4 使用Linux的docker进行部署
- 4.1 修改配置文件(添加在服务器运行时的端口)
- 4.2 当前项目结构
- 4.3 Dockerfile文件
- 4.4 添加.dockerignore文件
- 4.5 打包上传服务器
- 4.6 构建镜像
- 4.7 实时运行
1 ASP.NET Core简要介绍
ASP.NET Core 是一个跨平台的高性能开源框架,用于生成启用云且连接 Internet 的新式应用。
在以前的版本中( ASP.NET x.x )(注意是不带core的)是不支持跨平台的,于是微软根据标准又重新的编写了一套新版本,名为ASP.NET Core,这个版本是跨平台的,支持在 Windows、macOS 和 Linux 上部署。
他们都实现了共同的标准,但是对于不同的标准有不同的实现,比如操作windows系统的api就不会在Linux上体现。
使用 ASP.NET Core,您可以:
- 生成 Web 应用和服务、物联网 (IoT) 应用和移动后端。
- 在 Windows、macOS 和 Linux 上使用喜爱的开发工具。
- 部署到云或本地。
- 在 .NET Core 上运行。
2 .NET SDK
2.1 什么是 .NET SDK?
.NET SDK 是一组库和工具,开发人员可用其创建 .NET 应用程序和库。 它包含以下用于构建和运行应用程序的组件:
- .NET CLI(构建打包工具)。
- .NET 运行时(runtime 运行环境)和库.
- dotnet dotnet。
2.2 安装 .NET SDK
官网:https://dotnet.microsoft.com/zh-cn/download
下载链接:https://download.visualstudio.microsoft.com/download/pr/e4f4bbac-5660-45a9-8316-0ffc10765179/8ade57de09ce7f12d6411ed664f74eca/dotnet-sdk-6.0.202-win-x64.exe
一般选择sdk而不是运行时,因为我们要在本地开发应用,在部署时可以选择runtime。
- 安装完成后,可以看到,我们的.net sdk与asp.net core 都已经安装好了,基本上可以说是傻瓜式安装
2.3 安装Visual Studio
3 创建一个asp.net core的web应用
3.1 使用Visual Studio创建web项目
1、选择 asp.net core web api 下一步
2、项目名:myapp
注意:下面的那个将解决方案和项目放在同一目录中不要选择
3、选择.net 6.0 其他默认。然后下一步
到此,项目创建完成
3.2 给项目添加需要的依赖
选择依赖项->管理nuget程序包,然后搜索openxml,安装
3.3 添加一个controller,功能是创建一个word文档
在Controllers文件夹下新建一个类,名称为OpenXmlController
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Wordprocessing;
using DocumentFormat.OpenXml.Packaging;
using Microsoft.AspNetCore.Mvc;
namespace myapp.Controllers
{
[Route("openxml/[controller]")]
[ApiController]
public class OpenXmlController: ControllerBase
{
[HttpGet()]
public String createWord() {
// ①:创建WordprocessingDocument实例doc,对应于TEST.docx文件
using (WordprocessingDocument doc = WordprocessingDocument.Create(@"Test.docx", WordprocessingDocumentType.Document))
{
// ②:为doc添加MainDocumentPart部分
MainDocumentPart mainPart = doc.AddMainDocumentPart();
// ③:为mainPart添加Document,对应于Word里的文档内容部分
mainPart.Document = new Document();
// ④:为Document添加Body,之后所有于内容相关的均在此body中
Body body = mainPart.Document.AppendChild(new Body());
// ⑤:添加段落P,P中包含一个文本“TEST”
Paragraph p = mainPart.Document.Body.AppendChild(new Paragraph());
p.AppendChild(new Run(new Text("TEST")));
}
return "ojbk";
}
}
}
3.4 启动测试
点击图中位置
自动跳转到swagger页面,然后选择刚才编写的接口进行测试即可
查看当前目录下,可见新建了一个名称为Test.docx的文档,到此结束,下面开始部署
4 使用Linux的docker进行部署
在vs项目中右键,添加docker支持即可
这里手动操作只是展示dockerfile其中步骤含义
4.1 修改配置文件(添加在服务器运行时的端口)
修改文件myapp\Properties\launchSettings.json
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:11264",
"sslPort": 44315
}
},
"profiles": {
"myapp": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "https://localhost:7047;http://localhost:5047",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
// 添加dev的端口,默认为80
"publicdev": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://+:80"
}
}
}
4.2 当前项目结构
在myapp.sln同级目录下创建Dockerfile文件和.dockerignore文件
4.3 Dockerfile文件
# 编译环境和运行环境分离
#---------------------------开始编译过程-----------------------------
# https://hub.docker.com/_/microsoft-dotnet
# 编译阶段命名为build
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
# 复制项目解决方案文件myapp.sln到怕/source文件夹下
COPY *.sln .
# 复制项目中的打包配置文件myapp/myapp.csproj到/source/myapp/文件夹下
COPY myapp/*.csproj ./myapp/
# 使用mcr.microsoft.com/dotnet/sdk:6.0这个镜像的环境,将NuGet还原当前目录中项目的依赖项和工具
RUN dotnet restore
# copy everything else and build app
# 复制项目其他文件到/source/myapp/文件夹下
COPY myapp/. ./myapp/
# 重新指定工作文件夹为/source/myapp/,所以现在在/source/myapp文件夹下
WORKDIR /source/myapp
# dotnet publish - 将应用程序及其依赖项打包并发布到指定文件夹以部署到托管系统。
# -c|--configuration <CONFIGURATION> 定义生成配置。 大多数项目的默认配置为 Debug,但你可以覆盖项目中的生成配置设置。
# -o|--output <OUTPUT_DIRECTORY> 指定输出目录的路径。
# --no-restore 运行此命令时不执行隐式还原。
# 注意,dockerfile运行到这里时,会产生一个空名字的中间镜像
RUN dotnet publish -c release -o /app --no-restore
#---------------------------编译过程结束,下面开始运行-----------------------------
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
# --from=0 参数,【从前边的阶段中拷贝文件到当前阶段中】
# 多个FROM语句时,0代表第一个阶段。
# --from=build,除了使用数字,我们还可以给使用命名的阶段
# 当前命令的意思的,在名为build的这个容器中,将其内部app目录下的所有文件都复制到当前目录下
COPY --from=build /app ./
# 入口点(程序开始运行)
ENTRYPOINT ["dotnet", "myapp.dll"]
4.4 添加.dockerignore文件
**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md
4.5 打包上传服务器
上传后所在路径如下:
4.6 构建镜像
docker build -t myapp.
4.7 实时运行
docker run -it --rm -p 5000:80 --name myapp_sample myapp
后台运行删除 --rm,然后加上-d即可