dotnet-asp.net-docker简要介绍与项目部署(docker方式)

48 篇文章 2 订阅
25 篇文章 1 订阅

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即可

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L-960

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值