# ============================================================================= # 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"]