Docker与C#:从A到Z的应用程序容器化

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Docker与C#:.NET应用程序容器化完整指南



容器化已成为部署现代应用程序的事实标准。如果您使用C#(.NET)进行开发,Docker允许您将应用程序及其所有依赖项打包到轻量级、隔离的容器中。在本文中,我们将从创建简单的Dockerfile到发布和运行完整镜像,一步步引导您。您将学习如何容器化C#应用程序、优化镜像大小并运用最佳实践。



1. .NET开发者的Docker基础



Docker是一个用于在容器中开发、交付和运行应用程序的平台。容器是标准化的软件单元,包含代码及其所有依赖项。与虚拟机不同,容器共享操作系统内核,因此更快、更轻量。



对于C#(.NET),Docker尤其有用,因为它解决了“在我机器上能运行”的问题——您能确保应用程序在开发机、测试服务器和生产环境中行为一致。主要组件包括:



  • Docker Engine — 容器运行时环境
  • Dockerfile — 包含构建镜像指令的文本文件
  • 镜像(Image) — 用于创建容器的不可变模板
  • 容器(Container) — 镜像的运行实例


请安装适用于Windows/Mac的Docker Desktop或适用于Linux的Docker Engine。安装后,使用以下命令验证:



docker --version


2. 为C#(.NET)应用程序创建Dockerfile



我们从创建一个简单的ASP.NET Core Web API应用程序开始。新建项目:



dotnet new webapi -n MyDockerAppcd MyDockerApp


现在,在项目根目录创建Dockerfile(无扩展名)。以下是使用多阶段构建的基础版本:



# 阶段1:构建应用程序FROM mcr.microsoft.com/dotnet/sdk:8.0 AS buildWORKDIR /src

# 复制csproj并还原依赖项COPY ["MyDockerApp.csproj", "."]RUN dotnet restore

# 复制其余代码并编译项目COPY . .RUN dotnet publish -c Release -o /app/publish

# 阶段2:创建用于运行的最小镜像FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtimeWORKDIR /appEXPOSE 80EXPOSE 443

# 从第一阶段复制编译好的应用程序COPY --from=build /app/publish .

# 入口点ENTRYPOINT ["dotnet", "MyDockerApp.dll"]


关键指令说明:

  • FROM — 指定基础镜像(构建用SDK,运行用ASP.NET)
  • WORKDIR — 设置工作目录
  • COPY — 将构建上下文中的文件复制到镜像
  • RUN dotnet restore — 还原NuGet包
  • RUN dotnet publish — 编译并发布应用程序
  • EXPOSE — 声明容器监听的端口
  • ENTRYPOINT — 容器启动时执行的命令


多阶段构建对C#至关重要:最终镜像仅包含运行时和您的应用程序,不含SDK和源代码。这可将镜像大小从约1.5 GB减小到约200 MB。



3. 构建并运行容器



构建Docker镜像:



docker build -t my-dotnet-app:latest .


-t标志指定标签(名称:版本)。末尾的点表示当前目录为构建上下文。



运行容器:



docker run -d -p 8080:80 --name my-app my-dotnet-app:latest


参数说明:

  • -d — 后台运行(分离模式)
  • -p 8080:80 — 端口映射:主机端口8080

博客

书籍推荐