Case: POC Docker multi-stage + K8s para Rails
Case: POC Docker multi-stage + K8s para Rails
Contexto
Precisávamos de um modelo rápido para apps Rails que compilasse imagens separadas por ambiente (tst/hmg/prd), já com client Oracle, assets e engines, e que pudesse ser implantado em K8s com job de migração e ingress. Objetivo: acelerar POCs e demos sem reconstruir pipeline do zero.
O que foi feito
- Dockerfile multi-stage com estágios base/build/tst/hmg/prd: instala Oracle Instant Client, Node/Yarn, clona engines via secret SSH, precompila assets/bootsnap, remove toolchain nos estágios finais e ajusta permissões/usuário.
- Configuração por ambiente:
env.txtindica ambiente;BUNDLE_WITHOUTeRAILS_ENV/NODE_ENVvariam por estágio; precompilação paralela e limpeza de cache para imagens menores. - Templates K8s: Job de migration + Deployment/Service/Ingress parametrizados (
VERSION,DB_*,REDIS_URL,HOST,INGRESS_PATH), com requests/limits e imagePullSecrets. - Ferramental: Procfile, configs de DB docker, e orientação para build/push em Azure DevOps/ACR.
Fluxo (simplificado)
flowchart LR
Code --> Build[Docker build --target tst/hmg/prd\n+ secret SSH]
Build --> Image[Imagem com assets + Oracle client]
Image --> K8sJob[Job migrate\nbundle exec rake db:migrate]
Image --> K8sDeploy[Deployment API]
K8sDeploy --> SVC[Service 3000]
SVC --> Ingress[Ingress TLS\npath/host parametrizáveis]
Operação e devX
- Builds separados por ambiente (
--target tst|hmg|prd), com secrets montados só durante o clone das engines. - Assets e bootsnap precompilados; toolchain removido nos finais para reduzir superfície e tamanho.
- Templates K8s permitem trocar versão/host/path sem editar YAMLs; inclui Job de migração na mesma imagem.
Impacto (anonimizado)
- POCs e demos prontos em horas, com build e deploy reproduzíveis para AKS/K3s.
- Menos drift entre ambientes: estágios dedicados com configs claras e assets pré-gerados.
- Pipeline simplificado para times: um Dockerfile e templates K8s cobrem build/run sem depender do monólito original.
O que você pode reutilizar
- Estrutura de estágios (base/build/tst/hmg/prd) e precompilação com limpeza de cache.
- Uso de secrets SSH apenas no build, removendo toolchain depois.
- Templates K8s com Job de migrate acoplado à mesma imagem do app.
Esta postagem está licenciada sob
CC BY 4.0
pelo autor.