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
libgdiplusespecificando 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.