# Exemplo 3: Dockerfile para aplicacao Node.js
# Mostra padroes especificos do ecossistema JavaScript.

# Usa Node 20 sobre Alpine Linux (imagem muito pequena, ~50MB).
FROM node:20-alpine

# Convencao comum para apps Node em containers.
WORKDIR /usr/src/app

# Copia package.json E package-lock.json (o "*" faz o match) ANTES do codigo,
# para que o "npm ci" so seja reexecutado quando as dependencias mudarem.
COPY package*.json ./

# "npm ci" e mais rapido e determinista que "npm install" e respeita o lockfile.
# "--only=production" ignora devDependencies.
RUN npm ci --only=production

# Copia o restante do codigo.
COPY . .

# Define variavel de ambiente NODE_ENV (Express e outras libs otimizam quando ela e "production").
ENV NODE_ENV=production

# Documenta a porta usada pelo servidor.
EXPOSE 3000

# A imagem oficial do Node ja vem com um usuario "node" pre-criado - usamos por seguranca.
USER node

# Comando para iniciar a aplicacao.
CMD ["node", "index.js"]
