当前位置:首页 > 资讯列表 >使用 Docker 容器化部署 .NET Web 应用

使用 Docker 容器化部署 .NET Web 应用

发布时间:2026-08-14 10:25:35 分类:营销学堂

使用 Docker 容器化部署 .NET Web 应用

本文介绍如何通过 Dockerfile 多阶段构建,将 .NET Web 应用打包为镜像,并使用 docker-compose 完成容器化部署。

编写 Dockerfile

拉取用到的镜像

sudo docker pull mcr.microsoft.com/dotnet/sdk:10.0
sudo docker pull mcr.microsoft.com/dotnet/aspnet:10.0

第一阶段:拉取源码

使用 .NET SDK 镜像作为编译环境。由于 SDK 镜像默认未安装 Git,需先安装再拉取代码:

FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
RUN apt-get update && apt-get install -y git
RUN git clone http://git.localhost/demo/demo.git

第二阶段:编译发布

源码就绪后,还原依赖并编译为 Release 版本:

RUN dotnet restore ./demo
# 编译为 Release 版本,输出到容器的 /app/build 目录
RUN dotnet publish ./demo -c Release -o /app/build

第三阶段:运行环境

使用更轻量的 ASP.NET 运行时镜像作为最终环境,将编译产物从构建阶段复制过来:

# 运行时镜像
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final
# 指定工作目录
WORKDIR /app
# 从编译阶段复制产物
COPY --from=build /app/build .
# 指定启动命令
ENTRYPOINT ["dotnet", "./WebApp.dll"]

多阶段构建的优势:最终镜像仅包含运行时和编译产物,体积远小于 SDK 镜像,更利于分发和部署。

编写 docker-compose.yml

services:
  netwebdemo:
    image: netwebdemo:0.0.1
    build:
      context: .
      dockerfile: Dockerfile
    # volumes:
    #   - ./etc/appsettings.json:/app/appsettings.json
    environment:
      - TZ=Asia/Shanghai
    restart: always
    ports:
      - 8002:8080
    networks:
      - network

networks:
  network:
    external: true

配置说明:

配置项 说明
image 镜像名称及版本号
build 指定 Dockerfile 路径与构建上下文
environment 设置时区为 Asia/Shanghai
restart: always 容器异常退出时自动重启
ports 宿主机 8002 端口映射到容器 8080 端口
networks 使用外部网络 network,便于与其他容器互通

Volume 挂载配置

容器内的配置文件(如 appsettings.json)会随镜像打包,每次修改都需要重新构建镜像。通过 Volume 挂载,可以将宿主机文件映射到容器内,实现配置热更新而无需重建镜像。

使用方式

docker-compose.yml 中取消 volumes 注释并按需调整:

volumes:
  - ./etc/appsettings.json:/app/appsettings.json

该配置表示将宿主机当前目录下的 etc/appsettings.json 映射到容器内的 /app/appsettings.json

目录结构

挂载前需确保宿主机上存在对应文件,建议的目录结构如下:

project/
├── Dockerfile
├── docker-compose.yml
└── etc/
    └── appsettings.json

注意事项

  • 文件必须存在:宿主机上的源文件必须提前创建,否则 Docker 会将其当作目录创建,导致挂载失败
  • 文件格式:挂载的是文件而非目录,路径必须精确到文件名
  • 权限问题:容器内进程对挂载文件的读写权限取决于宿主机文件权限,若出现权限拒绝可执行:
    chmod 644 ./etc/appsettings.json
  • 挂载多个文件:如需挂载多个配置文件,依次添加即可:
    volumes:
      - ./etc/appsettings.json:/app/appsettings.json
      - ./etc/logconfig.json:/app/logconfig.json
  • 挂载整个目录:如果配置文件较多,也可以直接挂载整个目录:
    volumes:
      - ./etc:/app/config
    此时需同步修改应用代码中的配置读取路径

启动部署

执行以下命令,Docker 将自动构建镜像并启动容器:

sudo docker compose up -d

启动成功后,通过浏览器访问 http://localhost:8002 即可查看应用。