内容目录

问题

由于需要使用字体,所以再微软的基础镜像上,每次都需要安装字体,浪费很多编译时间。

方案

把每次重复的步骤编译到一个自定义的基础镜像,以后每次都从这个镜像开始。

创建基础镜像的 Dockerfile:

创建一个新的 Dockerfile(例如 Dockerfile.base)来安装字体和其他依赖项:

Dockerfile.base

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

# 安装字体和其他依赖项
RUN apt-get update && apt-get install -y \
    fonts-arphic-uming \
    fontconfig \
    curl \
    && mkdir -p /usr/share/fonts/truetype/msttcorefonts \
    && curl -o /usr/share/fonts/truetype/msttcorefonts/arial.ttf https://github.com/matomo-org/travis-scripts/raw/master/fonts/arial.ttf \
    && curl -o /usr/share/fonts/truetype/msttcorefonts/arialbd.ttf https://github.com/matomo-org/travis-scripts/raw/master/fonts/arialbd.ttf \
    && curl -o /usr/share/fonts/truetype/msttcorefonts/arialbi.ttf https://github.com/matomo-org/travis-scripts/raw/master/fonts/arialbi.ttf \
    && curl -o /usr/share/fonts/truetype/msttcorefonts/ariali.ttf https://github.com/matomo-org/travis-scripts/raw/master/fonts/ariali.ttf \
    && fc-cache -fv

构建并推送基础镜像:

运行以下命令来构建并推送这个基础镜像到你的阿里云镜像仓库:

docker build -f Dockerfile.base -t registry.cn-shanghai.aliyuncs.com/wivstn/dotnet-base:6.0 .
docker push registry.cn-shanghai.aliyuncs.com/wivstn/dotnet-base:6.0

修改你的项目 Dockerfile 使用这个基础镜像:

修改你的原始 Dockerfile,使其使用你推送的基础镜像:

FROM registry.cn-shanghai.aliyuncs.com/wivstn/dotnet-base:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["VolPro.WebApi/VolPro.WebApi.csproj", "VolPro.WebApi/"]
COPY ["VolPro.Builder/VolPro.Builder.csproj", "VolPro.Builder/"]
COPY ["VolPro.Core/VolPro.Core.csproj", "VolPro.Core/"]
COPY ["VolPro.Entity/VolPro.Entity.csproj", "VolPro.Entity/"]
COPY ["VolPro.DbTest/VolPro.DbTest.csproj", "VolPro.DbTest/"]
COPY ["VolPro.Sys/VolPro.Sys.csproj", "VolPro.Sys/"]
RUN dotnet restore "./VolPro.WebApi/VolPro.WebApi.csproj"
COPY . .
WORKDIR "/src/VolPro.WebApi"
RUN dotnet build "./VolPro.WebApi.csproj" -c $BUILD_CONFIGURATION -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./VolPro.WebApi.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "VolPro.WebApi.dll"]
最后修改日期: 2024 年 6 月 17 日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。