跳到主要内容银河麒麟 V10 服务器版 Docker 部署 .NET 8 WebAPI 教程 | 极客日志C#
银河麒麟 V10 服务器版 Docker 部署 .NET 8 WebAPI 教程
详细讲解了在银河麒麟 V10 服务器版操作系统上使用 Docker 容器技术部署.NET 8 WebAPI 应用程序的完整步骤。内容包括系统环境准备、Docker 及 Compose 安装配置、防火墙设置、项目创建与结构、Dockerfile 与 Compose 文件编写、镜像构建与容器运行、服务验证、配置优化、开机自启动设置以及常见问题排查。通过本教程可实现跨平台、高性能的 API 服务快速部署与环境隔离。
日志猎手3 浏览 银河麒麟 V10 服务器版 Docker 部署 .NET 8 WebAPI 教程
注意:微软目前尚未发布.NET 10版本,本教程使用当前最新的 LTS 版本.NET 8 进行演示。如果未来.NET 10 正式发布,部署流程基本类似,只需更新 Docker 镜像版本即可。
1. 前言
本教程旨在指导用户在银河麒麟 v10 服务器版上使用 Docker 容器化技术部署.NET 8 WebAPI 应用程序。.NET 8 是微软推出的跨平台、高性能的开发框架,结合 Docker 容器化技术可以实现快速部署、环境隔离、弹性扩展等优势。
1.1 适用环境
至少 2GB 内存至少 10GB 可用磁盘空间网络连接正常1.2 .NET 8 特性
- 高性能(相比.NET 7 提升了 5-15%)
- 跨平台支持(Windows、Linux、macOS)
- 统一的开发模型(Web、桌面、移动、云)
- 内置容器支持
- 改进的 GC 性能
- 增强的 AOT 编译支持
2. 系统环境准备
2.1 系统更新
2.2 安装必要依赖
sudo yum install -y wget curl vim git
3. Docker 安装与配置
3.1 安装 Docker
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
sudo docker --version
3.2 安装 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
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version
3.3 配置防火墙
sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --permanent --zone=public --add-service=docker
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 开发机上创建项目后部署
winget install Microsoft.DotNet.SDK.8
mkdir KylinDotNetWebAPI
cd KylinDotNetWebAPI
dotnet new webapi -n KylinDotNetWebAPI -o .
dotnet new gitignore
dotnet run
方法二:直接在 Linux 服务器上创建项目
wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
chmod +x dotnet-install.sh
./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
mkdir -p /opt/dotnet/KylinDotNetWebAPI
cd /opt/dotnet/KylinDotNetWebAPI
dotnet new webapi -n KylinDotNetWebAPI -o .
dotnet run
4.2 项目结构
KylinDotNetWebAPI/
├── Controllers/
│ └── WeatherForecastController.cs
├── Properties/
│ └── launchSettings.json
├── appsettings.json
├── appsettings.Development.json
├── Program.cs
├── KylinDotNetWebAPI.csproj
└── .gitignore
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 --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
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 build
docker build -t kylin-dotnet-webapi:latest .
6.2 运行 Docker 容器
docker-compose up -d
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 ps
docker-compose logs -f
docker logs -f kylin-dotnet-webapi
7. 服务验证
7.1 本地访问测试
curl http://localhost:5000/WeatherForecast
curl http://服务器 IP:5000/WeatherForecast
7.2 远程访问测试
注意:首次访问 HTTPS 可能会有证书警告,这是因为使用了自签名证书。在生产环境中应配置有效的 SSL 证书。
7.3 健康检查
curl -I http://服务器 IP:5000/WeatherForecast
8. 配置与优化
8.1 应用配置
应用配置主要通过 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 性能优化
- 启用 AOT 编译(.NET 7+ 支持):
- 修改项目文件添加 AOT 配置
- 更新 Dockerfile 使用 AOT 编译
- 使用性能监控:
- 集成 App Metrics
- 配置 Prometheus + Grafana 监控
9. 开机自启动配置
9.1 容器级自启动
在 docker-compose.yml 中已配置 restart: always,确保容器在退出或 Docker 服务重启时自动重启。
9.2 系统级自启动
sudo systemctl is-enabled docker
sudo systemctl enable docker
9.3 配置 Docker Compose 服务开机自启动
创建 systemd 服务单元来管理.NET WebAPI 的 Docker Compose 服务:
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
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
sudo lsof -i :5000
sudo kill -9 <PID>
10.2 容器启动失败
docker-compose logs -f
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 依赖项问题
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
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 反向代理
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;
}
}
12. 总结
本教程详细介绍了在银河麒麟 v10 服务器版上使用 Docker 部署.NET 8 WebAPI 的完整过程,包括:
- 系统环境准备和依赖安装
- Docker 和 Docker Compose 的安装与配置
- .NET 8 WebAPI 项目的创建方法
- Dockerfile 和 docker-compose.yml 的编写
- 服务的构建、运行和验证
- 配置优化和性能调优
- 开机自启动设置
- 常见问题的故障排除
- 高级功能扩展
通过 Docker 部署.NET 8 WebAPI,您可以快速搭建一个高性能、跨平台的 API 服务,同时享受容器化带来的环境隔离、快速部署和弹性扩展等优势。
13. 参考资料
微信扫一扫,关注极客日志
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具
- 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