环境准备与项目部署
安装必要工具
创建.NET Web API项目
通过命令行生成项目
dotnet new webapi -n mywebapi
cd mywebapi
编写Dockerfile
多阶段构建优化
在项目根目录无后缀的Dockerfile
文件
# 构建阶段
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY . .
RUN dotnet restore
RUN dotnet publish -c Release -o /app
# 运行阶段
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS final
WORKDIR /app
COPY --from=build /app .
EXPOSE 80
ENTRYPOINT ["dotnet", "mywebapi.dll"]
多阶段构建可以减少最终镜像体积。
WORKDIR
指定容器内工作目录
配置.dockerignore
创建.dockerignore
文件排除非必要文件(bin/、obj/)
构建与运行容器
构建Docker镜像
docker build -t mywebapi:1.0 .
-t
指定镜像名称及标签末尾的
.
表示Dockerfile所在目录
启动容器
docker run -d -p 8080:80 --restart=always --name webapi_container mywebapi:1.0
-p 8080:80
将容器80端口映射到宿主机8080--restart-always
容器崩溃后自动重启
部署优化
依赖缓存加速构建
通过分离COPY *.csproj
与COPY . .
操作,利用Docker层缓存机制
COPY *.csproj ./
RUN dotnet restore
COPY . ./
当代码变更但依赖未变时,可跳过
dotnet restore
步骤
检查配置
在Program.cs
中添加
app.MapHealthChecks("/health");
容器启动后可通过
http://localhost:8080/health
验证服务状态
日志管理
挂载日志目录避免容器销毁后数据丢失
docker run -v /host/logs:/app/logs ...
生产环境
使用Docker Compose编排
创建docker-compose.yml
实现一键部署
version: '3'
services:
webapi:
build: .
ports:
- "8080:80"
restart: unless-stopped
通过
docker compose up -d
启动服务集群
镜像安全
使用
alpine
版本镜像(如aspnet:9.0-alpine
)扫描镜像漏洞
docker scan mywebapi:1.0