.netcore 使用surging框架发布到docker

yizhihongxing
  1. 环境准备

首先我们需要准备本地的开发环境,主要包括以下几个方面:

  • 安装 Docker
  • 安装 Docker Compose
  • 安装 .NET Core SDK

  • 创建 .NET Core 应用

我们需要创建一个 .NET Core 应用,使用 Surging 框架,这里提供一个简单的示例:

使用 Visual Studio Code 打开控制台,执行以下命令:

dotnet new webapi -n Surging.HelloWorld.Api

然后在 Surging.HelloWorld.Api 项目的根目录下,创建 surging.json 配置文件,添加以下内容:

{
  "ServerOptions": {
    "Ip": "0.0.0.0",
    "Port": 80,
    "Token": "",
    "MappingListenPath": "api"
  },
  "ServiceCacheOptions": {
    "Type": 0,
    "Config": {
      "CacheTime": 3600
    }
  }
}
  1. 在 Docker 中运行服务

首先,我们需要在本地创建 Docker 镜像。在项目根目录下创建 Dockerfile 文件,添加以下内容:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-alpine3.11 AS build

WORKDIR /src

COPY . .

RUN dotnet restore

RUN dotnet publish -c Release -o /app

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-alpine3.11

WORKDIR /app

COPY --from=build /app .

CMD ["dotnet", "Surging.HelloWorld.Api.dll"]

接下来,我们可以使用 Docker Compose 来启动服务。在项目根目录下创建 docker-compose.yml 文件,添加以下内容:

version: '3.4'

services:
  surging.helloworld.api:
    image: surging.helloworld.api:latest
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "80:80"

然后在控制台输入如下命令启动服务:

docker-compose up
  1. 验证

若一切顺利,控制台输出 surging.helloworld.api_1 | info: Microsoft.Hosting.Lifetime[0],则说明服务已经启动。访问 http://localhost:80/api/HelloWorld,应该输出 Hello world

示例1:

假设我们有一个 Surging 应用,需要对外提供 restful 接口。但是出于安全考虑,我们不想在传输时直接明文传输,需要使用 HTTPS 协议进行加密。在构建 docker 镜像时需要添加相应的 SSL 证书。具体步骤如下:

  1. 生成 SSL 证书

在项目根目录下运行如下命令:

openssl req -x509 -newkey rsa:4096 -nodes -keyout key.pem -out cert.pem -days 365

输入证书相关信息后,会生成 key.pemcert.pem 文件。

  1. 修改 Dockerfile

修改上述提到的 Dockerfile,将证书复制到容器中:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-alpine3.11 AS build

WORKDIR /src

COPY . .

RUN dotnet restore

RUN dotnet publish -c Release -o /app

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-alpine3.11

WORKDIR /app

COPY --from=build /app .

COPY key.pem /https/key.pem

COPY cert.pem /https/cert.pem

ENV ASPNETCORE_URLS=https://+:443;http://+:80

ENV ASPNETCORE_HTTPS_PORT=443

CMD ["dotnet", "Surging.HelloWorld.Api.dll"]
  1. 修改 docker-compose.yml

仅需要添加一行环境变量:

version: '3.4'

services:
  surging.helloworld.api:
    image: surging.helloworld.api:latest
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/cert.pem
      - ASPNETCORE_Kestrel__Certificates__Default__Password=
      - ASPNETCORE_Kestrel__Certificates__Default__AllowInvalid=
    ports:
      - "80:80"
      - "443:443"

示例2:

假设我们有一个 Surging 应用需要使用 Redis 作为缓存。在构建 docker 镜像时需要添加 Redis 的配置和安装 Redis 的库。具体步骤如下:

  1. 安装 Redis 库

修改 Surging 应用的 csproj 文件,添加以下依赖项:

<PackageReference Include="StackExchange.Redis" Version="2.2.4" />
  1. 修改 surging.json

添加 Redis 配置项:

{
  "ServerOptions": {
    "Ip": "0.0.0.0",
    "Port": 80,
    "Token": "",
    "MappingListenPath": "api"
  },
  "ServiceCacheOptions": {
    "Type": 1,
    "Config": {
      "Redis": {
        "Address": "127.0.0.1:6379",
        "Expiration": 60
      }
    }
  }
}
  1. 修改 Dockerfile

将 Redis 相关的文件添加到镜像中:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-alpine3.11 AS build

WORKDIR /src

COPY . .

RUN dotnet restore

RUN dotnet publish -c Release -o /app

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-alpine3.11

WORKDIR /app

COPY --from=build /app .

COPY surging.json /app/surging.json

RUN apk add --no-cache libc6-compat

COPY libssl.so.1.1 /usr/lib/

CMD ["dotnet", "Surging.HelloWorld.Api.dll"]
  1. 修改 docker-compose.yml

添加 Redis 的环境变量:

version: '3.4'

services:
  surging.helloworld.api:
    image: surging.helloworld.api:latest
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      - Redis__Configuration__Password=
    ports:
      - "80:80"

以上就是 .NET Core 使用 Surging 框架发布到 Docker 的完整攻略,提供了两个示例,分别为使用 HTTPS 协议和使用 Redis 缓存。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.netcore 使用surging框架发布到docker - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • python 调整图片亮度的示例

    下面是关于Python调整图片亮度的完整攻略,包含两个示例。 1. 背景介绍 在数字图像处理中,亮度是一个非常重要的概念,在不同的领域中有不同的定义和应用。在数字图像中,亮度一般指的是像素的亮度值,它代表了该像素的亮度强度。因此,对于某些需要调整图像亮度的场景,我们可以使用Python等编程语言进行操作。 2. Python调整图像亮度的代码示例 在Pyth…

    人工智能概论 2023年5月25日
    00
  • echarts动态获取Django数据的实现示例

    下面我会详细讲解“echarts动态获取Django数据的实现示例”的完整攻略。 1. 准备工作 第一步,需要安装ECharts和Django,可以使用以下命令: pip install django pip install echarts 第二步,创建一个Django项目: django-admin startproject myproject cd my…

    人工智能概论 2023年5月25日
    00
  • 有密码 优酷视频 破解方法

    有密码优酷视频破解方法 登录优酷账号,找到需要观看的有密码视频,在视频页面右下角找到“复制链接”按钮,复制视频链接。 打开一个新的浏览器窗口,访问秘迹网。 在搜索框输入“优酷破解”,点击“搜索”按钮,选择其中一个页面打开。 在页面中粘贴复制的视频链接,点击“获取真实地址”按钮,等待几秒钟。 在页面下方会显示出视频的真实地址,复制该地址。 打开一个新的浏览器窗…

    人工智能概论 2023年5月25日
    00
  • 利用nginx解决cookie跨域访问的方法

    下面是利用Nginx解决Cookie跨域访问的方法的完整攻略: 什么是Cookie跨域? 当一个网站向另一个域名的网站发送请求时,当前网站在请求中会携带Cookie信息。这种情况下,另一个域名的网站将无法获取Cookie信息,从而导致跨域问题。 使用Nginx解决Cookie跨域问题 Nginx是一款高性能的HTTP服务器和反向代理服务器,可以用来作为解决C…

    人工智能概览 2023年5月25日
    00
  • 用Python做一个简单的图书管理系统

    下面是使用Python实现一个简单的图书管理系统的攻略: 1. 确定需求和功能 在着手实现图书管理系统之前,我们需要先明确需要实现的功能,例如图书的添加、删除、修改和查询,借阅、归还等。具体的需求可以根据实际情况进一步补充。 2. 构建数据库 构建数据库是实现图书管理系统的关键步骤之一。在Python中,可以使用SQLite或者其他第三方数据库模块(如MyS…

    人工智能概览 2023年5月25日
    00
  • vue中的自定义属性并获得属性的值方式

    如果你想在Vue中实现自定义属性,并且获取属性的值,可以使用v-bind指令或简写的冒号(:)来绑定自定义属性。接下来是一些示例说明。 示例1:绑定简单的自定义属性 如果你想绑定一个简单的自定义属性,可以直接使用v-bind或简写的冒号(:)。 <template> <div v-bind:data-name="userName&…

    人工智能概论 2023年5月25日
    00
  • Python Web程序搭建简单的Web服务器

    我们来详细讲解 Python Web 程序搭建简单的 Web 服务器的完整攻略。本攻略包含以下三个部分: 环境准备 web.py 简介 web.py 搭建 Web 服务器的步骤 环境准备 在开始搭建 Python Web 服务器之前,我们需要事先准备好以下环境: Python 2.x 或者 Python 3.x(建议使用 Python 3.x) 安装 web…

    人工智能概览 2023年5月25日
    00
  • crontab执行结果未通过发送mail通知用户的方法

    下面是对于“crontab执行结果未通过发送mail通知用户的方法”的完整攻略: 1. 确定邮件服务商和配置邮件发送程序 要发送邮件,需要一些邮件服务商和程序的支持。在这里,我们以Gmail服务商和mutt程序为例子,演示如何设置。 打开Gmail账户,进入到账户安全页面,启用两步验证,并获取一个App密码,以便使用该密码来代替登录密码进行账户操作。 安装、…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部