# ========================================================== # Dockerfile — "Receita" para criar a imagem Docker da app # ========================================================== # Analogia: assim como você cria uma VM a partir de um template, # este arquivo define o template (imagem) do container. # # O Jenkins executa "docker build" usando este arquivo para # criar a imagem que será implantada no staging. # ========================================================== # 1. Imagem base: Node.js 20 Alpine (versão enxuta do Linux) # Alpine é uma distro minimalista (~5 MB), ideal para containers FROM node:20-alpine # 2. Diretório de trabalho dentro do container WORKDIR /app # 3. Copia APENAS os arquivos de dependências primeiro # Isso aproveita o cache do Docker: se package.json não mudar, # o "npm ci" não roda de novo (build mais rápido) COPY package*.json ./ # 4. Instala dependências de produção # "npm ci" é mais rápido e determinístico que "npm install" # "--omit=dev" ignora dependências de teste (jest, supertest) RUN npm ci --omit=dev # 5. Copia o código-fonte da aplicação COPY src/ ./src/ # 6. Porta que a aplicação escuta EXPOSE 3000 # 7. Roda como usuário não-root (segurança) # A imagem node:alpine já inclui o usuário "node" USER node # 8. Comando que inicia a aplicação quando o container sobe CMD ["node", "src/index.js"]