内容目录
问题
由于需要使用字体,所以再微软的基础镜像上,每次都需要安装字体,浪费很多编译时间。
方案
把每次重复的步骤编译到一个自定义的基础镜像,以后每次都从这个镜像开始。
创建基础镜像的 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"]
留言