跳到主要内容银河麒麟v10服务器版Docker部署.NET 8 WebAPI教程 | 极客日志Python
银河麒麟v10服务器版Docker部署.NET 8 WebAPI教程
银河麒麟v10服务器版Docker部署.NET 8 WebAPI教程 > **注意**:微软目前尚未发布.NET 10版本,本教程使用当前最新的LTS版本.NET 8进行演示。如果未来.NET 10正式发布,部署流程基本类似,只需更新Docker镜像版本即可。 1\. 前言 本教程旨在指导用户在银河麒麟v10服务器版上使用Docker容器化技术部署.NET 8 WebAPI应用程序。.NET 8是…
城市逃兵98K 浏览 银河麒麟v10服务器版Docker部署.NET 8 WebAPI教程
注意:微软目前尚未发布.NET 10版本,本教程使用当前最新的LTS版本.NET 8进行演示。如果未来.NET 10正式发布,部署流程基本类似,只需更新Docker镜像版本即可。
1. 前言
本教程旨在指导用户在银河麒麟v10服务器版上使用Docker容器化技术部署.NET 8 WebAPI应用程序。.NET 8是微软推出的跨平台、高性能的开发框架,结合Docker容器化技术可以实现快速部署、环境隔离、弹性扩展等优势。
1.1 适用环境
至少10GB可用磁盘空间网络连接正常1.2 .NET 8特性
- 高性能(相比.NET 7提升了5-15%)
- 跨平台支持(Windows、Linux、macOS)
- 统一的开发模型(Web、桌面、移动、云)
- 内置容器支持
- 改进的GC性能
- 增强的AOT编译支持
2. 系统环境准备
2.1 系统更新
# 更新系统软件包到最新版本sudo yum update -y
2.2 安装必要依赖
# 安装wget、curl等必要工具sudo yum install -y wgetcurlvimgit
3. Docker安装与配置
3.1 安装Docker
# 安装Docker所需的依赖包sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加Docker官方软件源sudo yum-config-manager --add-repo https:
3.2 安装Docker Compose
# 下载Docker Compose二进制文件curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 赋予执行权限sudochmod +x /usr/local/bin/docker-compose # 创建软链接到系统PATHsudoln -s /usr/local/bin/docker-compose /usr/bin/docker-compose # 验证Docker Compose安装是否成功 docker-compose --version
3.3 配置防火墙
# 启动并启用firewalld服务sudo systemctl start firewalld sudo systemctl enable firewalld # 允许Docker服务通过防火墙sudo firewall-cmd --permanent --zone=public --add-service=docker # 允许WebAPI端口(5000/5001)通过防火墙sudo firewall-cmd --permanent --zone=public --add-port=5000/tcp sudo firewall-cmd --permanent --zone=public --add-port=5001/tcp # 重新加载防火墙规则sudo firewall-cmd --reload
4. .NET 8 WebAPI项目准备
4.1 项目创建方法
方法一:在Windows开发机上创建项目后部署
# 在Windows开发机上打开命令行# 安装.NET 8 SDK winget install Microsoft.DotNet.SDK.8 # 创建WebAPI项目mkdir KylinDotNetWebAPI cd KylinDotNetWebAPI dotnet new webapi -n KylinDotNetWebAPI -o .# 创建.gitignore文件 dotnet new gitignore # 测试项目运行 dotnet run # 访问测试:http:
方法二:直接在Linux服务器上创建项目
# 在Linux服务器上安装.NET 8 SDK(可选,用于直接在服务器上开发)# 下载安装脚本wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh chmod +x dotnet-install.sh
4.2 项目结构
KylinDotNetWebAPI/ ├── Controllers/
5. Docker配置
5.1 创建Dockerfile
# 使用多阶段构建优化镜像大小 # 阶段1:构建阶段 FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS build WORKDIR /src # 复制项目文件并恢复依赖 COPY ["KylinDotNetWebAPI.csproj", "./"] RUN dotnet restore "./KylinDotNetWebAPI.csproj" # 复制所有文件并构建 COPY . . WORKDIR "/src/" RUN dotnet build "KylinDotNetWebAPI.csproj" -c Release -o /app/build # 发布应用 RUN dotnet publish "KylinDotNetWebAPI.csproj" -c Release -o /app/publish /p:UseAppHost=false # 阶段2:运行阶段 FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine AS base WORKDIR /app # 设置时区 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 从构建阶段复制发布文件 COPY
5.2 创建.dockerignore文件
在项目根目录创建.dockerignore文件,减少构建上下文大小:
# .NET项目文件 bin/ obj/ *.swp *.swo *~ # 日志文件 logs/ *.log # 测试文件 *Tests*/ *.Tests.csproj # 环境文件 .env .env.local .env.development.local .env.test.local .env.production.local # IDE文件 .idea/ .vscode/ *.suo *.ntvs* *.njsproj *.sln *.sw?
5.3 创建Docker Compose文件
在项目根目录创建docker-compose.yml文件:
version:'3.8'services:kylin-webapi:image: kylin-dotnet-webapi:latest container_name: kylin-dotnet-webapi restart: always build:context: . dockerfile: Dockerfile environment:- ASPNETCORE_ENVIRONMENT=Production - ASPNETCORE_HTTP_PORTS=5000 - ASPNETCORE_HTTPS_PORTS=5001 # 配置数据库连接等环境变量# - ConnectionStrings__DefaultConnection=Server=db;Database=WebAPIDemo;User=sa;Password=YourStrongPassword123!ports:-"5000:5000"-"5001:5001"volumes:# 挂载日志目录- ./logs:/app/logs networks:- dotnet-network # 可选:定义网络(如果需要连接其他服务)networks:dotnet-network:driver: bridge
6. 部署与运行
6.1 构建Docker镜像
# 进入项目根目录cd /opt/dotnet/KylinDotNetWebAPI
6.2 运行Docker容器
# 使用Docker Compose运行容器 docker-compose up -d # 或使用docker命令直接运行 docker run -d \ --name kylin-dotnet-webapi \ --restart always \ -p 5000:5000 \ -p 5001:5001 \ -e ASPNETCORE_ENVIRONMENT=Production \ kylin-dotnet-webapi:latest
6.3 查看容器状态
# 查看容器运行状态 docker-compose ps# 或使用docker命令 docker ps# 查看容器日志 docker-compose logs -f
7. 服务验证
7.1 本地访问测试
# 使用curl测试API访问curl http://localhost:5000/WeatherForecast
7.2 远程访问测试
注意:首次访问HTTPS可能会有证书警告,这是因为使用了自签名证书。在生产环境中应配置有效的SSL证书。
7.3 健康检查
# 检查API健康状态curl -I http://服务器IP:5000/WeatherForecast
8. 配置与优化
8.1 应用配置
应用配置主要通过appsettings.json和环境变量进行管理:
# 查看当前配置文件cat appsettings.json
docker-compose up -d --build
8.2 环境变量配置
可以在docker-compose.yml中添加环境变量:
environment:- ASPNETCORE_ENVIRONMENT=Production - ASPNETCORE_HTTP_PORTS=5000 - ASPNETCORE_HTTPS_PORTS=5001 - ConnectionStrings__DefaultConnection=Server=db
8.3 日志配置
"Logging":{"LogLevel":{"Default":"Information","Microsoft.AspNetCore":"Warning"},"File":{"LogLevel":{"Default":"Information"},"Path":"/app/logs/webapi.log","RollingInterval":"Day"}}
8.4 性能优化
- 启用AOT编译(.NET 7+支持):
- 修改项目文件添加AOT配置
- 更新Dockerfile使用AOT编译
- 使用性能监控:
- 集成App Metrics
- 配置Prometheus + Grafana监控
9. 开机自启动配置
9.1 容器级自启动
在docker-compose.yml中已配置restart: always,确保容器在退出或Docker服务重启时自动重启。
9.2 系统级自启动
9.3 配置Docker Compose服务开机自启
创建systemd服务单元来管理.NET WebAPI的Docker Compose服务:
# 创建systemd服务文件cat> /etc/systemd/system/kylin-dotnet-webapi.service <<EOF [Unit] Description=Kylin .NET 8 WebAPI Docker Service Requires=docker.service After=docker.service [Service] Type=oneshot RemainAfterExit=yes WorkingDirectory=/opt/dotnet/KylinDotNetWebAPI ExecStart=/usr/local/bin/docker-compose up -d ExecStop=/usr/local/bin/docker-compose down TimeoutStartSec=0 [Install] WantedBy=multi-user.target EOF
# 重新加载systemd配置sudo systemctl daemon-reload
10. 常见问题与故障排除
10.1 端口被占用
# 检查端口占用情况sudonetstat -tuln |grep5000sudonetstat -tuln |grep5001# 或使用lsof命令sudolsof -i :5000
10.2 容器启动失败
# 查看详细日志 docker-compose logs -f
10.3 API访问返回500错误
# 检查应用日志 docker exec -it kylin-dotnet-webapi cat /app/logs/webapi.log
10.4 依赖项问题
10.5 数据库连接问题
11. 高级功能
11.1 HTTPS配置
11.1.1 使用自签名证书
# 生成自签名证书 openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes # 转换为pfx格式exportpassword=YourCertificatePassword123! openssl pkcs12 -export -out certificate.pfx -inkey key.pem -in cert.pem -passout pass:$password
11.1.2 配置HTTPS
在docker-compose.yml中挂载证书:
volumes:- ./certificate.pfx:/app/certificate.pfx environment:- ASPNETCORE_Kestrel__Certificates__Default__Password=YourCertificatePassword123!- ASPNETCORE_Kestrel__Certificates__Default__Path=/app/certificate.pfx
11.2 集成数据库
以MySQL为例,修改docker-compose.yml添加数据库服务:
services:kylin-webapi:# ... 现有配置depends_on:- mysql mysql:image: mysql:8.0container_name: mysql restart: always environment:- MYSQL_ROOT_PASSWORD=YourRootPassword123!- MYSQL_DATABASE=WebAPIDemo - MYSQL_USER=webapi - MYSQL_PASSWORD=YourStrongPassword123!ports:-"3306:3306"volumes:- mysql-data:/var/lib/mysql networks:- dotnet-network volumes:mysql-data:
11.3 使用Nginx反向代理
# 创建Nginx配置文件cat> /opt/docker/nginx/conf/conf.d/webapi.example.com.conf <<EOF server { listen 80; server_name webapi.example.com; location / { proxy_pass http://服务器IP:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache_bypass $http_upgrade; } } EOF
12. 总结
本教程详细介绍了在银河麒麟v10服务器版上使用Docker部署.NET 8 WebAPI的完整过程,包括:
- 系统环境准备和依赖安装
- Docker和Docker Compose的安装与配置
- .NET 8 WebAPI项目的创建方法
- Dockerfile和docker-compose.yml的编写
- 服务的构建、运行和验证
- 配置优化和性能调优
- 开机自启动设置
- 常见问题的故障排除
- 高级功能扩展
通过Docker部署.NET 8 WebAPI,您可以快速搭建一个高性能、跨平台的API服务,同时享受容器化带来的环境隔离、快速部署和弹性扩展等优势。
13. 参考资料
微信扫一扫,关注极客日志
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown 转 HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
- HTML 转 Markdown
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
- JSON 压缩
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online