- 环境准备
首先我们需要准备本地的开发环境,主要包括以下几个方面:
- 安装 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
}
}
}
- 在 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
- 验证
若一切顺利,控制台输出 surging.helloworld.api_1 | info: Microsoft.Hosting.Lifetime[0]
,则说明服务已经启动。访问 http://localhost:80/api/HelloWorld
,应该输出 Hello world
。
示例1:
假设我们有一个 Surging 应用,需要对外提供 restful 接口。但是出于安全考虑,我们不想在传输时直接明文传输,需要使用 HTTPS 协议进行加密。在构建 docker 镜像时需要添加相应的 SSL 证书。具体步骤如下:
- 生成 SSL 证书
在项目根目录下运行如下命令:
openssl req -x509 -newkey rsa:4096 -nodes -keyout key.pem -out cert.pem -days 365
输入证书相关信息后,会生成 key.pem
和 cert.pem
文件。
- 修改 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"]
- 修改 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 的库。具体步骤如下:
- 安装 Redis 库
修改 Surging 应用的 csproj 文件,添加以下依赖项:
<PackageReference Include="StackExchange.Redis" Version="2.2.4" />
- 修改 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
}
}
}
}
- 修改 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"]
- 修改 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技术站