跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C#

银河麒麟 V10 服务器版 Docker 部署 .NET 8 WebAPI 指南

在银河麒麟 V10 服务器版上通过 Docker 容器化部署.NET 8 WebAPI 应用的完整流程。内容包括系统环境准备、Docker 及 Docker Compose 安装配置、WebAPI 项目创建、Dockerfile 与 Compose 文件编写、镜像构建与服务运行、健康检查验证以及常见问题排查。通过本教程可实现跨平台、高性能的 API 服务快速部署与环境隔离。

SqlMaster发布于 2026/4/6更新于 2026/7/547 浏览

银河麒麟 V10 服务器版 Docker 部署 .NET 8 WebAPI 指南

注意:微软目前尚未发布.NET 10 版本,本教程使用当前最新的 LTS 版本.NET 8 进行演示。如果未来.NET 10 正式发布,部署流程基本类似,只需更新 Docker 镜像版本即可。

1. 前言

本教程旨在指导用户在银河麒麟 v10 服务器版上使用 Docker 容器化技术部署.NET 8 WebAPI 应用程序。.NET 8 是微软推出的跨平台、高性能的开发框架,结合 Docker 容器化技术可以实现快速部署、环境隔离、弹性扩展等优势。

1.1 适用环境
  • 银河麒麟 v10 服务器版
  • 至少 2GB 内存
  • 至少 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 wget curl vim git

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://download.docker.com/linux/centos/docker-ce.repo
# 安装 Docker CE、CLI 和 containerd.io
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 启动 Docker 服务
sudo systemctl start docker
# 设置 Docker 服务开机自启
sudo systemctl enable docker
# 验证 Docker 安装是否成功
sudo docker --version
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
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 创建软链接到系统 PATH
sudo ln -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://localhost:5200/WeatherForecast
方法二:直接在 Linux 服务器上创建项目
# 在 Linux 服务器上安装.NET 8 SDK(可选,用于直接在服务器上开发)
# 下载安装脚本
wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
chmod +x dotnet-install.sh
# 安装.NET 8 SDK
./dotnet-install.sh -c 8.0 --install-dir /usr/share/dotnet
# 添加环境变量
export DOTNET_ROOT=/usr/share/dotnet
export PATH=$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools
# 创建 WebAPI 项目
mkdir -p /opt/dotnet/KylinDotNetWebAPI
cd /opt/dotnet/KylinDotNetWebAPI
dotnet new webapi -n KylinDotNetWebAPI -o .
# 测试项目运行
dotnet run
4.2 项目结构
KylinDotNetWebAPI/
├── Controllers/       # API 控制器目录
│   └── WeatherForecastController.cs  # 示例控制器
├── Properties/        # 项目属性
│   └── launchSettings.json  # 启动配置
├── appsettings.json   # 应用配置文件
├── appsettings.Development.json  # 开发环境配置
├── Program.cs         # 应用入口点
├── KylinDotNetWebAPI.csproj  # 项目文件
└── .gitignore         # Git 忽略文件

5. Docker 配置

5.1 创建 Dockerfile

在项目根目录创建 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 --from=build /app/publish .

# 暴露端口(HTTP 和 HTTPS)
EXPOSE 5000
EXPOSE 5001

# 设置环境变量
ENV ASPNETCORE_URLS=http://+:5000;https://+:5001

# 启动应用
ENTRYPOINT ["dotnet", "KylinDotNetWebAPI.dll"]
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
# 使用 Docker Compose 构建镜像
docker-compose build
# 或使用 docker 命令直接构建
docker build -t kylin-dotnet-webapi:latest .
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
# 或使用 docker 命令
docker logs -f kylin-dotnet-webapi

7. 服务验证

7.1 本地访问测试
# 使用 curl 测试 API 访问
curl http://localhost:5000/WeatherForecast
# 或指定 IP 访问
curl http://服务器 IP:5000/WeatherForecast
7.2 远程访问测试

从浏览器访问:

  • HTTP: http://服务器 IP:5000/WeatherForecast
  • HTTPS: https://服务器 IP:5001/WeatherForecast

注意:首次访问 HTTPS 可能会有证书警告,这是因为使用了自签名证书。在生产环境中应配置有效的 SSL 证书。

7.3 健康检查
# 检查 API 健康状态
curl -I http://服务器 IP:5000/WeatherForecast
# 期望返回状态码 200 OK

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;Database=WebAPIDemo;User=sa;Password=YourStrongPassword123!
  - Logging__LogLevel__Default=Information
8.3 日志配置

修改 appsettings.json 配置日志:

"Logging": {
  "LogLevel": {
    "Default": "Information",
    "Microsoft.AspNetCore": "Warning"
  },
  "File": {
    "LogLevel": {
      "Default": "Information"
    },
    "Path": "/app/logs/webapi.log",
    "RollingInterval": "Day"
  }
}
8.4 性能优化
  1. 启用 AOT 编译(.NET 7+ 支持):
    • 修改项目文件添加 AOT 配置
    • 更新 Dockerfile 使用 AOT 编译
  2. 使用性能监控:
    • 集成 App Metrics
    • 配置 Prometheus + Grafana 监控

9. 开机自启动配置

9.1 容器级自启动

在 docker-compose.yml 中已配置 restart: always,确保容器在退出或 Docker 服务重启时自动重启。

9.2 系统级自启动

确保 Docker 服务已设置开机自启:

# 验证 Docker 服务开机自启设置
sudo systemctl is-enabled docker
# 如果未启用,执行以下命令
sudo systemctl enable docker
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
# 启用服务开机自启
sudo systemctl enable kylin-dotnet-webapi
# 启动服务
sudo systemctl start kylin-dotnet-webapi
# 验证服务状态
sudo systemctl status kylin-dotnet-webapi

10. 常见问题与故障排除

10.1 端口被占用
# 检查端口占用情况
sudo netstat -tuln | grep 5000
sudo netstat -tuln | grep 5001
# 或使用 lsof 命令
sudo lsof -i :5000
# 停止占用端口的进程
sudo kill -9 <PID>
10.2 容器启动失败
# 查看详细日志
docker-compose logs -f
# 或查看 Docker 事件
docker events --since 1h
10.3 API 访问返回 500 错误
# 检查应用日志
docker exec -it kylin-dotnet-webapi cat /app/logs/webapi.log
# 或实时查看日志
docker exec -it kylin-dotnet-webapi tail -f /app/logs/webapi.log
10.4 依赖项问题

确保所有 NuGet 包都已正确恢复和构建:

# 在项目目录中执行
dotnet restore
dotnet build
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 格式
export password=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.0
    container_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 作为 API 的反向代理:

# 创建 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 的完整过程,包括:

  1. 系统环境准备和依赖安装
  2. Docker 和 Docker Compose 的安装与配置
  3. .NET 8 WebAPI 项目的创建方法
  4. Dockerfile 和 docker-compose.yml 的编写
  5. 服务的构建、运行和验证
  6. 配置优化和性能调优
  7. 开机自启动设置
  8. 常见问题的故障排除
  9. 高级功能扩展

通过 Docker 部署.NET 8 WebAPI,您可以快速搭建一个高性能、跨平台的 API 服务,同时享受容器化带来的环境隔离、快速部署和弹性扩展等优势。

13. 参考资料

  • .NET 8 官方文档
  • Docker 官方文档
  • 银河麒麟 v10 服务器版官方文档
  • ASP.NET Core WebAPI 文档

目录

  1. 银河麒麟 V10 服务器版 Docker 部署 .NET 8 WebAPI 指南
  2. 1. 前言
  3. 1.1 适用环境
  4. 1.2 .NET 8 特性
  5. 2. 系统环境准备
  6. 2.1 系统更新
  7. 更新系统软件包到最新版本
  8. 2.2 安装必要依赖
  9. 安装 wget、curl 等必要工具
  10. 3. Docker 安装与配置
  11. 3.1 安装 Docker
  12. 安装 Docker 所需的依赖包
  13. 添加 Docker 官方软件源
  14. 安装 Docker CE、CLI 和 containerd.io
  15. 启动 Docker 服务
  16. 设置 Docker 服务开机自启
  17. 验证 Docker 安装是否成功
  18. 3.2 安装 Docker Compose
  19. 下载 Docker Compose 二进制文件
  20. 赋予执行权限
  21. 创建软链接到系统 PATH
  22. 验证 Docker Compose 安装是否成功
  23. 3.3 配置防火墙
  24. 启动并启用 firewalld 服务
  25. 允许 Docker 服务通过防火墙
  26. 允许 WebAPI 端口 (5000/5001) 通过防火墙
  27. 重新加载防火墙规则
  28. 4. .NET 8 WebAPI 项目准备
  29. 4.1 项目创建方法
  30. 方法一:在 Windows 开发机上创建项目后部署
  31. 在 Windows 开发机上打开命令行
  32. 安装.NET 8 SDK
  33. 创建 WebAPI 项目
  34. 创建.gitignore 文件
  35. 测试项目运行
  36. 访问测试:http://localhost:5200/WeatherForecast
  37. 方法二:直接在 Linux 服务器上创建项目
  38. 在 Linux 服务器上安装.NET 8 SDK(可选,用于直接在服务器上开发)
  39. 下载安装脚本
  40. 安装.NET 8 SDK
  41. 添加环境变量
  42. 创建 WebAPI 项目
  43. 测试项目运行
  44. 4.2 项目结构
  45. 5. Docker 配置
  46. 5.1 创建 Dockerfile
  47. 使用多阶段构建优化镜像大小
  48. 阶段 1:构建阶段
  49. 复制项目文件并恢复依赖
  50. 复制所有文件并构建
  51. 发布应用
  52. 阶段 2:运行阶段
  53. 设置时区
  54. 从构建阶段复制发布文件
  55. 暴露端口(HTTP 和 HTTPS)
  56. 设置环境变量
  57. 启动应用
  58. 5.2 创建.dockerignore 文件
  59. .NET 项目文件
  60. 日志文件
  61. 测试文件
  62. 环境文件
  63. IDE 文件
  64. 5.3 创建 Docker Compose 文件
  65. 6. 部署与运行
  66. 6.1 构建 Docker 镜像
  67. 进入项目根目录
  68. 使用 Docker Compose 构建镜像
  69. 或使用 docker 命令直接构建
  70. 6.2 运行 Docker 容器
  71. 使用 Docker Compose 运行容器
  72. 或使用 docker 命令直接运行
  73. 6.3 查看容器状态
  74. 查看容器运行状态
  75. 或使用 docker 命令
  76. 查看容器日志
  77. 或使用 docker 命令
  78. 7. 服务验证
  79. 7.1 本地访问测试
  80. 使用 curl 测试 API 访问
  81. 或指定 IP 访问
  82. 7.2 远程访问测试
  83. 7.3 健康检查
  84. 检查 API 健康状态
  85. 期望返回状态码 200 OK
  86. 8. 配置与优化
  87. 8.1 应用配置
  88. 查看当前配置文件
  89. 8.2 环境变量配置
  90. 8.3 日志配置
  91. 8.4 性能优化
  92. 9. 开机自启动配置
  93. 9.1 容器级自启动
  94. 9.2 系统级自启动
  95. 验证 Docker 服务开机自启设置
  96. 如果未启用,执行以下命令
  97. 9.3 配置 Docker Compose 服务开机自启动
  98. 创建 systemd 服务文件
  99. 重新加载 systemd 配置
  100. 启用服务开机自启
  101. 启动服务
  102. 验证服务状态
  103. 10. 常见问题与故障排除
  104. 10.1 端口被占用
  105. 检查端口占用情况
  106. 或使用 lsof 命令
  107. 停止占用端口的进程
  108. 10.2 容器启动失败
  109. 查看详细日志
  110. 或查看 Docker 事件
  111. 10.3 API 访问返回 500 错误
  112. 检查应用日志
  113. 或实时查看日志
  114. 10.4 依赖项问题
  115. 在项目目录中执行
  116. 10.5 数据库连接问题
  117. 检查数据库连接字符串配置
  118. 验证数据库服务是否正常运行
  119. 检查网络连接是否正常
  120. 11. 高级功能
  121. 11.1 HTTPS 配置
  122. 11.1.1 使用自签名证书
  123. 生成自签名证书
  124. 转换为 pfx 格式
  125. 11.1.2 配置 HTTPS
  126. 11.2 集成数据库
  127. 11.3 使用 Nginx 反向代理
  128. 创建 Nginx 配置文件
  129. 12. 总结
  130. 13. 参考资料
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Python 异步编程与协程实战指南
  • CIC滤波器FPGA设计:位宽扩展与溢出控制实战
  • Java 集成高德开放平台 WebAPI 实现 POI 搜索
  • 全国计算机等级考试三级证书报考指南与科目解析
  • SpringBoot 联合 PostGIS 实现在线地图行政区划离线存储
  • 文本生成技术:原理、应用与国产工具实践
  • Neo4j 图数据库与 JDK 安装配置教程
  • Windows 10 系统性能优化指南:10 个实用技巧
  • 2024 年新能源大模型行业落地趋势与应用分析
  • Python 爬虫入门项目实战指南与学习路线
  • Android Studio 零基础入门指南:环境搭建与核心组件详解
  • .NET 开源分布式事务解决方案:CAP
  • 利用 Python 进行数据分析:核心流程与库详解
  • DES 加密算法原理详解、攻击手段及 3DES 原理
  • FPGA 任意角度图像旋转实现原理与代码设计
  • Windows 下 OpenClaw 开源 AI 代理框架部署指南
  • 从 0 到 1 打造 RISC-V 智能家居中控:硬件、固件与通信全链路实战
  • 二分查找算法原理与常见场景应用
  • Web Audio API 音频可视化技术拆解与实现
  • 使用 Google Colab 免费算力微调 Llama-3 8b 大模型教程

相关免费在线工具

  • 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

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online