将 .NET Core 项目,打包成 Docker 镜像

前言

最近身边的小伙伴想将自己的 Netcore 项目,升级为容器化部署,对于刚刚接触 Docker 的同学编写 Dockerfile 文件可能稍显吃力,出于此我这里写一个简单的示例,也方便其它的刚接触的小伙伴可以学习和参考。

1. 编写Dockerfile文件,此例采用多阶段构建方式
# 第一阶段: 设置基础镜像
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
# 配置基本环境
# 在 OpenSSL 配置文件中将 TLS 版本从 TLSv1.2 替换为 TLSv1.0
RUN sed -i 's/TLSv1.2/TLSv1.0/g' /etc/ssl/openssl.cnf
# 设置 ASP.NET Core 运行环境为 Staging
ENV ASPNETCORE_ENVIRONMENT=Staging

# 设置容器内的工作目录为 /app
WORKDIR /app
# 暴露容器的端口 80 和 443
EXPOSE 80
EXPOSE 443

# 第二个阶段: 构建阶段
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
# 设置容器内的工作目录为 /src
WORKDIR /src
# 复制项目文件和目录到容器内,目录结构大致如下:
# Dockerfile(文件)
# MyFirst.API(目录)
# MyFirst.Domain(目录)
# MyFirst.Infrastructure(目录)
#
# API项目 引用 Infrastructure项目,Infrastructure 引用 Domain项目。
COPY . .

# 切换目录到 /src/MyFirst.API
WORKDIR "MyFirst.API"
# 运行 dotnet restore 命令,还原项目的依赖项
RUN dotnet restore "MyFirst.API.csproj"
# 使用 dotnet build 命令构建项目,输出到 /app/build 目录
RUN dotnet build "MyFirst.API.csproj" -c Release -o /app/build

# 第三个阶段: 发布阶段
FROM build AS publish
# 使用 dotnet publish 命令发布项目,输出到 /app/publish 目录
RUN dotnet publish "MyFirst.API.csproj" -c Release -o /app/publish

# 第四个阶段: 最终阶段
FROM base AS final
# 设置容器内的工作目录为 /app
WORKDIR /app
# 创建软链接以设置容器的时区为 Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 从发布阶段复制构建输出到容器内
COPY --from=publish /app/publish .
# 设置容器启动时的入口点
ENTRYPOINT ["dotnet", "MyFirst.API.dll"]
2. 在Dockerfile 文件所在目录下执行,build参数详见:官网
docker build -t MyFirst.API:1.0 .
分享到:
本文链接:https://blog.renzicu.com/2023/08/380.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0 许可协议。转载请注明出处!
THE END
二维码
打赏