Otimização de Imagens .NET Core: Aceleração de Download, Configuração de Fuso Horário e Instalação de Libgdiplus

Ao utilizar imagens oficiais do .NET Core, como mcr.microsoft.com/dotnet/core/aspnet:3.1, o download pode ser lento devido ao uso da CDN global da Azure. Para usuários na China, a substituição de mcr.microsoft.com por mcr.azk8s.cn pode acelerra significativamente o processo. Por exemplo, o comando:

docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1

pode ser alterado para:

docker pull mcr.azk8s.cn/dotnet/core/aspnet:3.1

resultando em uma velocidade de download muito maior.

Configuração de Fuso Horário e Instalação de Libgdiplus

Os comandos para cofnigurar o fuso horário e instalar a biblioteca libgdiplus variam dependendo da imagem base utilizada.

Imagens Baseadas em Alpine (Ex: mcr.azk8s.cn/dotnet/core/aspnet:3.1-alpine)

Imagens Alpine são ideais para minimizar o tamanho final do container, pois utilizam um sistema mínimo. O gerenciador de pacotes é apk.

Configuração de Fuso Horário e Instalação de Dependências Básicas

O seguinte trecho de Dockerfile atualiza as fontes de repositório para um espelho chinês, instala pacotes essenciais e configura o fuso horário para Xangai:


RUN sed -i "s@http://dl-cdn.alpinelinux.org/@https://repo.huaweicloud.com/@g" /etc/apk/repositories \
   && apk --no-cache add tzdata \
   && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
   && echo 'Asia/Shanghai' > /etc/timezone
   
  • A primeira linha redireciona o download de pacotes para um espelho da Huawei Cloud.
  • A segunda linha instala o pacote tzdata, que contém informações de fuso horário.
  • As linhas seguintes configuram o sistema para usar o fuso horário de Xangai.

Instalação de Libgdiplus em Imagens Alpine

A biblioteca libgdiplus geralmente não está nos repositórios padrão do Alpine ou pode estar em um repositório de testes. O comando abaixo instala a biblioteca, garantindo que ela esteja disponível:


RUN sed -i "s@http://dl-cdn.alpinelinux.org/@https://repo.huaweicloud.com/@g" /etc/apk/repositories \
   && apk --no-cache add libgdiplus --update-cache --repository 'https://mirrors.huaweicloud.com/alpine/edge/testing/' --allow-untrusted \
   && ln -s /usr/lib/libgdiplus.so.0.0.0 /usr/lib/libgdiplus.so
   
  • A primeira linha atualiza as fontes de repositório.
  • A segunda linha instala libgdiplus especificando o repositório de testes da Huawei Cloud e permitindo a instalação não confiável (necessário para repositórios de teste).
  • A terceira linha cria um link simbólico para a biblioteca, garantindo compatibilidade.

Dockerfile Completo para Alpine (com Libgdiplus e Fuso Horário)

Este Dockerfile integra as configurações de fuso horário e a instalação de libgdiplus em uma imagem base Alpine:


FROM mcr.azk8s.cn/dotnet/core/aspnet:3.1-alpine AS base
WORKDIR /app
EXPOSE 80
COPY . .
RUN sed -i "s@http://dl-cdn.alpinelinux.org/@https://repo.huaweicloud.com/@g" /etc/apk/repositories \
   && apk --no-cache add libgdiplus --update-cache --repository 'https://mirrors.huaweicloud.com/alpine/edge/testing/' --allow-untrusted \
   && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
   && echo 'Asia/Shanghai' > /etc/timezone \
   && ln -s /usr/lib/libgdiplus.so.0.0.0 /usr/lib/libgdiplus.so
ENTRYPOINT ["dotnet", "MyHost.dll"]
   

Dockerfile Apenas com Fuso Horário para Alpine

Se libgdiplus não for necessário, a configuração do fuso horário pode ser feita de forma mais simples:


FROM mcr.azk8s.cn/dotnet/core/aspnet:3.1-alpine AS base
WORKDIR /app
EXPOSE 80
COPY . .
RUN sed -i "s@http://dl-cdn.alpinelinux.org/@https://repo.huaweicloud.com/@g" repositories \
   && apk --no-cache add tzdata \
   && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
   && echo 'Asia/Shanghai' > /etc/timezone
ENTRYPOINT ["dotnet", "MarketingManagement.HttpApi.Host.dll"]
   

Imagens Baseadas em Debian (Ex: mcr.azk8s.cn/dotnet/core/aspnet:3.1)

Imagens baseadas em Debian utilizam o gerenciador de pacotes apt. A instalação de pacotes pode aumentar significativamente o tamanho da imagem e o tempo de build em comparação com Alpine.

Dockerfile Completo para Debian (com Libgdiplus e Fuso Horário)

Este Dockerfile demonstra como configurar o fuso horário e instalar libgdiplus em uma imagem base Debian:


FROM mcr.azk8s.cn/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
COPY . .
# Configura fuso horário
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# Instala libgdiplus e outras dependências
RUN sed -i "s@http://deb.debian.org@http://repo.huaweicloud.com@g" /etc/apt/sources.list \
   && sed -i "s@http://security.debian.org@http://repo.huaweicloud.com@g" /etc/apt/sources.list \
   && apt-get update \
   && apt-get install -y --allow-unauthenticated \
       libgdiplus \
       nano \
   && rm -rf /var/lib/apt/lists/*

ENTRYPOINT ["dotnet", "MyHost.dll"]
   

A atualização do cache do apt e a instalação de pacotes tornam este processo mais demorado e resultam em imagens maiores se comparadas às construídas sobre Alpine.

Tags: .NET Core Docker alpine debian libgdiplus

Publicado em 7-30 19:39