Registro das otimizações aplicadas aos Dockerfiles e ao processo de build multiarch.
| Métrica | Antes | Depois |
|---|---|---|
| Tamanho da imagem (estimado) | ~2.3 GB | ~700 MB–1 GB |
| Maior contribuinte removido | torch CUDA (~1.5 GB) | torch CPU-only (~500 MB) |
| Build subsequente (cache remoto) | 15–30 min | 5–10 min |
| Ferramentas de dev na imagem prod | black, coverage instalados |
removidos |
Os valores de tamanho são estimativas; confirme com
docker image lsapós o build.
sentence-transformers puxa o PyTorch completo com suporte a CUDA por padrão (~2 GB).
O projeto usa o modelo BERT apenas para inferência e não possui GPU em produção.
Solução: instalar torch com --index-url https://download.pytorch.org/whl/cpu antes
dos demais pacotes. O pip reutiliza o torch já instalado ao processar os demais
requisitos, evitando o download do build CUDA.
Economia estimada: ~1.5 GB.
black, coverage e ruff foram removidos de requirements.txt para requirements-dev.txt.
A imagem de produção instala apenas requirements.txt.
Para desenvolvimento local:
pip install -r requirements-dev.txtO curl não tem uso no builder após a remoção do git-lfs (o modelo BERT é baixado
via huggingface_hub em Python, não via curl). Elimina uma camada de apt-get
desnecessária.
Labels no stage intermediário (builder) são descartadas e não aparecem na imagem final, porém ainda consomem uma camada durante o build. Movidas exclusivamente para o stage runtime.
Após a instalação dos pacotes Python, são removidos os diretórios tests/ e test/
bundled dentro dos pacotes em /root/.local, antes do COPY para o runtime stage.
A versão do Apache Tika foi extraída para um ARG:
ARG TIKA_VERSION=3.2.2
Atualizar o Tika não requer mais edição do Dockerfile:
make build-tika-server TIKA_VERSION=3.3.0Quando REGISTRY não é passado, o valor é inferido da URL do remote origin:
| Remote | REGISTRY derivado |
|---|---|
git@github.com:org/repo.git |
ghcr.io/org |
https://github.com/org/repo.git |
ghcr.io/org |
git@gitlab.com:org/repo.git |
registry.gitlab.com/org |
Override manual ainda funciona: make build-base-multi-arch REGISTRY=my.registry/org
As seguintes mudanças foram aplicadas em commit anterior ao das 7 otimizações acima:
.dockerignorecriado: exclui.git,tests/,debug/,docs/,models/,*.mddo contexto de build, reduzindo o contexto de ~25 MB para ~5 MB.build-essential/libpq-dev/git-lfsremovidos do builder: desnecessários compsycopg2-binary.- ARGs de multiarch e labels OCI adicionados a
Dockerfile.baseeDockerfile. - Novos targets no Makefile com cache remoto:
build-base-multi-arch,build-multi-arch-optimized,build-multi-arch-tika-optimized,build-all-multi-arch,build-multi-arch-load,help-build.
Dockerfile.base # Builder + runtime da imagem base (deps + modelo ML)
Dockerfile # Imagem final (só copia o código sobre a base)
Dockerfile_apache_tika # Imagem do Apache Tika (multi-stage)
requirements.txt # Dependências de produção
requirements-dev.txt # Dependências de dev/test (inclui requirements.txt via -r)
.dockerignore # Exclusões do contexto de build
Makefile # Targets de build com suporte a multiarch e cache remoto
docs/BASE_IMAGE.md # Guia prático de build para contribuidores