🐳 Guia de Build Docker - SGApi
Build para AMD64 (x86_64) - Padrão
docker build -t sgapi:latest .
Build para ARM64
Opção 1: Usar Dockerfile.arm64 (Recomendado)
docker buildx build --platform linux/arm64 -f Dockerfile.arm64 -t sgapi:arm64 --load .
Opção 2: Usar Dockerfile padrão com buildx
# Criar builder com suporte multi-platform (se ainda não criou)
docker buildx create --name multiplatform --use
# Build para ARM64
docker buildx build --platform linux/arm64 -t sgapi:arm64 --load .
Opção 3: Build multi-platform (AMD64 + ARM64)
docker buildx build --platform linux/amd64,linux/arm64 -t sgapi:latest --push .
Solução de Problemas
Erro: System.AccessViolationException durante dotnet restore (ARM64)
Este erro era comum em builds cross-platform via QEMU devido a problemas conhecidos do .NET SDK 10.0.
✅ Solução Implementada:
O Dockerfile.arm64 foi otimizado para fazer o build completo em AMD64 (evitando problemas de QEMU) e depois copiar os binários compilados para ARM64 via cross-compilation do .NET. Esta abordagem:
- ✅ Evita problemas de SSL/TLS em QEMU
- ✅ Evita
AccessViolationExceptioneNullReferenceExceptiondo MSBuild - ✅ Usa cross-compilation nativa do .NET SDK
- ✅ Produz binários corretos para ARM64
Comando para build ARM64:
docker buildx build --platform linux/arm64 -f Dockerfile.arm64 -t sgapi:arm64 --load .
Outras opções (se necessário):
-
Usar script PowerShell:
.\build-arm64.ps1 -
Aumentar recursos do Docker Desktop (pode ajudar com performance):
- Settings → Resources → Advanced
- CPU: Mínimo 4 cores
- Memory: Mínimo 8GB (recomendado 16GB)
- Disk: Mínimo 60GB livre
-
Usar build nativo em máquina ARM64 (melhor performance):
# Em máquina ARM64 nativa (Mac M1/M2, Raspberry Pi 4+, etc)docker build -f Dockerfile.arm64 -t sgapi:arm64 .
Build muito lento (ARM64)
Builds cross-platform são naturalmente mais lentos devido à emulação. Para acelerar:
- Use
--loadapenas quando necessário (não use em CI/CD) - Use cache de layers:
docker buildx build --cache-from type=local,src=/tmp/.buildx-cache - Considere usar runners ARM64 nativos em CI/CD
Variáveis de Ambiente no Build
Você pode passar variáveis de ambiente durante o build:
docker build \
--build-arg BUILDPLATFORM=linux/amd64 \
-t sgapi:latest .
Executar Container
AMD64
docker run -d --name sgapi -p 8080:8080 sgapi:latest --cloud
ARM64
docker run -d --name sgapi -p 8080:8080 sgapi:arm64 --cloud
Verificar Arquitetura da Imagem
docker inspect sgapi:latest | grep Architecture
Notas
- O
Dockerfile.arm64é otimizado especificamente para builds ARM64 - Builds cross-platform podem levar 3-5x mais tempo que builds nativos
- Para produção, considere usar runners nativos da arquitetura alvo