sql >> Base de Datos >  >> RDS >> PostgreSQL

docker compose:postgresql crear db, pase de usuario y otorgar permiso

Según los comentarios, intentaré responder aquí.

Creo que deberías ir con la imagen postgres 11-alpine. Y trataré de explicar por qué aquí.

Las imágenes oficiales de la ventana acoplable vienen con una serie de beneficios que siempre debe considerar antes de comenzar la suya propia.

  1. La ruta de actualización es fácil - cuando se publique una nueva revisión de la aplicación incluida en la imagen, en la mayoría de los casos la imagen oficial de la ventana acoplable se actualizará junto con ella. Y normalmente los cambios respetan las convenciones de configuración que ha establecido la imagen. Tales como variables de entorno, detalles de inicio. Para que los usuarios puedan simplemente cambiar la etiqueta en sus pilas y actualizar. Por supuesto, puede haber cambios importantes; siempre verifique esto.
  2. Gran base de usuarios - cuando las imágenes como postgres se han descargado más de 10 millones de veces (2019), esto no solo significa que es popular, sino que inherentemente funciona como una garantía de que la imagen se ha probado a fondo. Ya se han eliminado todos los errores elementales, y le resultará fácil con la imagen.
  3. Optimizado para tamaño y rendimiento - puede estar seguro de que se ha prestado atención a muchos detalles, minimizando el tamaño de la imagen y maximizando el rendimiento. Muchos proyectos publican sus aplicaciones en algunas distribuciones de Linux diferentes. Como postgres, publican debian y un alpine imágenes basadas El alpine image es la más pequeña, mientras que debian es un poco más grande, pero le da acceso a los vastos repositorios de paquetes de Debian si necesita instalar paquetes adicionales.
  4. Fácil configuración - Los mantenedores de las imágenes oficiales generalmente entienden muy bien los casos de uso de su base de usuarios. Y tratan de facilitarnos la vida como desarrolladores y administradores (que Dios los bendiga). Las imágenes oficiales suelen tener una documentación bastante buena en la página de destino de su docker hub, o un enlace a un repositorio de github donde el README.md cubrirá casos de uso comunes. Considero que vale la pena leer bien estas instrucciones de arriba a abajo.

Entiendo que desea mantener la imagen pequeña, pero ¿qué sabe? El proyecto Postgres tiene su caso de uso cubierto.

La última imagen de Alpine Postgres etiquetada 11-alpine tiene una huella comprimida de 28 MB y descomprimido de 70MB . Mientras que archlinux/base la imagen con la que desea comenzar tiene un espacio base comprimido de 153 MB y un tamaño descomprimido de 445 MB . Y eso es antes de presentar Postgres en sí mismo.

Agregue a eso, que la base de datos y el usuario que desea crear en el inicio, se pueden manejar solo en las variables de entorno para la imagen oficial de postgres. Así:

docker run -d --name some-postgres \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -e POSTGRES_USER=simha \
  -e POSTGRES_DB=btgapp \
postgres:11-alpine

Si eso no cubre la inicialización que necesita para su base de datos, puede copiar .sql guiones (y .sh scripts) en una ubicación especial en la imagen, y se ejecutarán al inicio. Para ello puedes ampliar su imagen así:

init-user-db.sh

#!/bin/bash
set -e

psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
    CREATE USER simha;
    CREATE DATABASE btgapp;
    GRANT ALL PRIVILEGES ON DATABASE btgapp TO simha;
EOSQL

Y luego con un Dockerfile así:

Dockerfile

FROM postgres:11-alpine
COPY ./init-user-db.sh /docker-entrypoint-initdb.d/init-user-db.sh

(Esto está tomado de la descripción de postgres en docker hub )

Para terminar, le recomendaría que no priorice la distribución en la que se basa una imagen sobre la facilidad de uso y el mantenimiento. Docker nos permite ejecutar aplicaciones en contenedores sin preocuparnos demasiado por qué distribución hay dentro del contenedor. Es todo linux de todos modos. Al final del día, espero que desee un contenedor de base de datos postgres estable como yo. Esto es lo que obtengo con la imagen oficial de postgres.

Espero haberte ayudado a evaluar tus opciones al respecto.