40 lines
1.4 KiB
Docker
40 lines
1.4 KiB
Docker
# ==========================================================
|
|
# 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"]
|