PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

docker compose:postgresql cria db, passa usuário e concede permissão


Com base nos comentários, tentarei responder aqui.

Eu acredito que você deve ir com a imagem postgres 11-alpine. E vou tentar explicar o porquê aqui.

As imagens oficiais do docker vêm com vários benefícios que você deve sempre considerar antes de iniciar o seu próprio.
  1. O caminho de atualização é fácil - quando uma nova revisão do aplicativo envolvido na imagem é lançada, a imagem oficial do docker, na maioria dos casos, será atualizada junto com ela. E geralmente as mudanças respeitam as convenções de configuração que a imagem estabeleceu. Como variáveis ​​de ambiente, especificações de inicialização. Para que os usuários possam simplesmente alterar a tag em suas pilhas e atualizar. É claro que pode haver alterações importantes - sempre verifique isso.
  2. Grande base de usuários - quando imagens como postgres foram baixadas mais de 10 milhões de vezes (2019), isso não significa apenas que é popular, mas funciona inerentemente como uma garantia de que a imagem foi testada completamente. Quaisquer erros elementares já foram eliminados e você terá facilidade com a imagem.
  3. Otimizado para tamanho e desempenho - você pode ter certeza de que a atenção foi dada a muitos detalhes, minimizando o tamanho da imagem e maximizando o desempenho. Muitos projetos publicam seus aplicativos em algumas distribuições Linux diferentes. Como postgres - eles publicam debian e um alpine imagens baseadas. O alpine imagem é a menor, enquanto o debian é um pouco maior, mas dá acesso aos vastos repositórios de pacotes debian se você precisar de pacotes extras instalados.
  4. Configuração fácil - os mantenedores das imagens oficiais geralmente entendem muito bem os casos de uso de sua base de usuários. E eles tentam tornar nossas vidas como desenvolvedores e administradores mais fáceis (Deus os abençoe). As imagens oficiais geralmente têm uma documentação muito boa na página de destino do hub do docker ou um link para um repositório do github onde o README.md cobrirá casos de uso comuns. Acho que vale a pena ler essas instruções de cima a baixo.

Eu entendo que você queira manter a imagem pequena, mas o que você sabe - o projeto postgres tem seu caso de uso coberto.

A última imagem alpine postgres com a tag 11-alpine tem um espaço compactado de 28 MB e descompactado de 70 MB . Enquanto o archlinux/base a imagem com a qual você deseja começar tem uma base compactada de 153 MB e um tamanho descompactado de 445 MB . E isso antes de você apresentar o próprio postgres.

Acrescente a isso, que o banco de dados e o usuário que você deseja criar na inicialização - podem ser tratados apenas nas variáveis ​​de ambiente para a imagem oficial do postgres. Assim:
docker run -d --name some-postgres \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -e POSTGRES_USER=simha \
  -e POSTGRES_DB=btgapp \
postgres:11-alpine

Se isso não cobrir a inicialização necessária para seu banco de dados, você poderá copiar .sql scripts (e .sh scripts) em um local especial na imagem - e eles serão executados na inicialização. Para isso, você pode estender a imagem deles assim:

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

E então com um Dockerfile assim:

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

(Isto é retirado da a descrição do postgres no docker hub )

Para encerrar - eu recomendaria que você não priorize a distribuição na qual uma imagem é baseada em relação à usabilidade e manutenção. O Docker nos permite executar aplicativos em contêineres sem nos importar muito com a distribuição que está dentro do contêiner. É tudo linux mesmo. No final do dia, espero que você queira um contêiner de banco de dados postgres estável como eu. Isso é o que eu recebo com a imagem oficial do postgres.

Espero ter ajudado você a avaliar suas opções sobre isso.