# =============================================================================
# Dockerfile - PostgreSQL Production (Alpine)
# =============================================================================
#
# Imagem customizada PostgreSQL para substituir Bitnami.
# Otimizada para produção e formato eStargz (lazy pulling).
#
# Build (formato eStargz):
#   docker buildx build \
#     --output type=image,name=registry.kube.quest/factory/postgresql:17,push=true,compression=estargz,force-compression=true,oci-mediatypes=true \
#     .
#
# =============================================================================

FROM postgres:17-alpine

LABEL maintainer="workshop"
LABEL description="PostgreSQL 17 Alpine - Production Ready"
LABEL org.opencontainers.image.title="postgresql"
LABEL org.opencontainers.image.version="17"

# Variáveis de ambiente padrão
ENV POSTGRES_USER=postgres \
    POSTGRES_DB=postgres \
    PGDATA=/var/lib/postgresql/data/pgdata \
    LANG=en_US.UTF-8

# Instalar dependências adicionais úteis
RUN apk add --no-cache \
    tzdata \
    curl \
    jq

# Criar diretório para configurações customizadas
RUN mkdir -p /etc/postgresql/postgresql.conf.d

# Copiar configuração de produção
COPY postgresql.conf /etc/postgresql/postgresql.conf.d/00-production.conf

# Healthcheck nativo
HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \
    CMD pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB} || exit 1

# Expor porta padrão
EXPOSE 5432

# Usuário não-root (já vem configurado na imagem oficial)
USER postgres

# Comando padrão com configuração customizada
CMD ["postgres", "-c", "config_file=/etc/postgresql/postgresql.conf.d/00-production.conf"]
