在现代 DevOps 环境中,使用 Docker 将 ASP.NET Core 应用部署到 Linux 服务器已成为高效、灵活的主流方式。本文从零开始带你完成从创建项目、编写 Dockerfile 到远程部署运行的网站上线全流程,让你快速掌握实战部署技巧。
1. 准备环境:安装 Docker 与 .NET SDK
首先,需要确保目标 Linux 服务器(例如 Ubuntu)已安装 Docker。通过添加官方 Docker 源后,运行如下命令即可安装 Docker 引擎和相关组件。接着,安装 .NET SDK(如 .NET 8),确保可以在容器中构建与运行 ASP.NET Core 应用。环境安装是部署成功的首要基础。
2. 创建 ASP.NET Core 项目
在本地或服务器上,使用 dotnet new web(或 dotnet new webapi)创建一个基础 ASP.NET Core 项目。此项目将作为 Docker 镜像构建的基础。
3. 编写 Dockerfile(多阶段构建)
在项目根目录下创建 Dockerfile,推荐使用多阶段构建方式:
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /app
COPY . .
RUN dotnet restore
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
COPY --from=build /app/out .
ENV ASPNETCORE_URLS=http://0.0.0.0:80
EXPOSE 80
ENTRYPOINT ["dotnet", "YourApp.dll"]
第一阶段使用 SDK 镜像完成依赖还原与发布,第二阶段使用轻量运行时镜像启动应用。该方式能显著减小最终镜像体积,加快部署效率。
4. 构建 Docker 镜像
在项目目录下运行:
docker build -t my-aspnetcore-app .
上述命令将创建 my-aspnetcore-app 镜像,包含运行你的网站所需的所有内容。
5. 运行 Docker 容器并映射端口
构建完成后,可启动容器并暴露端口,以便外网访问:
docker run -d -p 80:80 --name aspnet_web my-aspnetcore-app
这行命令将容器启动为后台服务,并将容器内部的 80 端口映射到主机 80 端口,使网站可以通过 http://服务器IP 访问。
6. 部署到远程 Linux 服务器
将项目源码或打包好的镜像推送到服务器。你可以在服务器上直接执行构建,也可使用私有 Docker Registry 或 Docker Hub 上传镜像后在目标服务器拉取运行。远程环境部署流程与本地基本一致,只需保证 Docker 已安装并可以运行。
以下是部署到 Linux 的简要步骤:
- 构建 Docker 镜像:在本地或持续集成环境中,使用 docker build 构建 ASP.NET Core 应用镜像。镜像源通常使用多阶段 Dockerfile,从 SDK 镜像构建,再切换至轻量运行时镜像以减少体积。
- 将镜像推送到远程或私有镜像仓库:将构建好的镜像推送至 Docker Registry(如 Docker Hub、私有 Registry),或直接将项目代码及 Dockerfile 复制到服务器后,在服务器上 构建镜像。
- 远程服务器环境准备:在目标 Linux 服务器上安装 Docker 引擎,并确保拥有合适权限可执行 docker 命令。你可以通过 SSH 工具(如 SCP、SFTP)传输镜像或代码。
- 从 Registry 拉取镜像 / 构建镜像:若已将镜像推送至仓库,可使用 docker pull your-image-name 获取镜像;如果上传了代码与 Dockerfile,则在服务器上运行 docker build 构建镜像。
- 运行容器并映射端口:使用 docker run -d -p 主机端口:容器端口 your-image-name 启动容器。例如映射 80 端口使应用可通过浏览器访问。
- 后台管理与自动启动:为确保应用稳定运行,推荐使用 systemd 创建服务单位,使容器在服务器重启时自动启动;或使用 Docker Compose 管理多个容器,并让服务始终在线。
7. 持续运行与服务管理
为了保持容器一直运行,可结合系统服务管理工具(如 systemd)进行容器管理,或使用容器编排工具进一步扩展部署能力。此方式能保证网站在服务器重启后自动恢复运行,适合生产环境部署。
8. 总结与实用建议
使用多阶段 Dockerfile 是减少镜像大小、提高安全性的最佳实践。
将容器化流程纳入 CI/CD 管道,实现一键构建部署更高效。
常用命令:
- docker ps 查看运行容器
- docker logs <container> 查看日志
- docker stop/start <container> 管理容器状态
通过 Docker 部署 ASP.NET Core 到 Linux 服务器,不仅简化了环境配置,还提升了部署一致性与可维护性。从安装 Docker 和 .NET SDK,到编写多阶段 Dockerfile,再到远程运行与服务化管理,本文为你提供“一条龙”全流程指导,帮助你快速上线高可用 ASP.NET Core 网站。