sql >> データベース >  >> RDS >> PostgreSQL

docker compose:postgresql create db、ユーザーパスおよび権限の付与

    コメントに基づいて、ここで回答しようと思います。

    私はあなたがpostgres11-高山のイメージで行くべきだと信じています。そして、その理由をここで説明しようと思います。

    公式のDockerイメージには、独自のイメージを開始する前に常に検討する必要のある多くの利点があります。

    1. アップグレードパスは簡単です -イメージにラップされたアプリケーションの新しいリビジョンがリリースされると、ほとんどの場合、公式のDockerイメージも一緒に更新されます。また、通常、変更はイメージが確立した構成規則を尊重します。環境変数、スタートアップの詳細など。ユーザーがスタック内のタグを簡単に変更してアップグレードできるようにします。もちろん、重大な変更がある可能性があります。常にこれを確認してください。
    2. 大規模なユーザーベース --postgresのような画像が10ミリオン回(2019年)以上ダウンロードされた場合、これは人気があることを意味するだけでなく、本質的に画像が徹底的にテストされたことを保証するように機能します。基本的なバグはすでに取り除かれているので、画像を簡単に操作できます。
    3. サイズとパフォーマンスを最適化 -画像のサイズを最小化し、パフォーマンスを最大化することで、多くの細部に注意が払われていることを確認できます。多くのプロジェクトは、いくつかの異なるLinuxディストリビューションでアプリケーションを公開しています。 postgresのように-彼らはdebianを公開します およびalpine ベースの画像。 alpine 画像は小さい方ですが、debian 少し大きいですが、追加のパッケージをインストールする必要がある場合は、広大なdebianパッケージリポジトリにアクセスできます。
    4. 簡単な構成 -公式画像のメンテナは通常、ユーザーベースのユースケースをよく理解しています。そして、彼らは開発者や管理者としての私たちの生活を楽にしようとしています(神は彼らを祝福します)。公式画像には通常、Docker Hubのランディングページにかなり優れたドキュメントが掲載されているか、README.mdがあるgithubリポジトリへのリンクがあります。 一般的なユースケースをカバーします。これらの手順は、上から下まで読む価値があると思います。

    画像を小さく保ちたいとのことですが、ご存知のとおり、postgresプロジェクトでユースケースがカバーされています。

    11-alpineとタグ付けされた最新の高山postgres画像 28 MBの圧縮フットプリントがあります 70MBの解凍 。 archlinux/base 最初に使用する画像のベースフットプリントは153MBに圧縮されています 解凍されたサイズは445MB 。そして、それはpostgres自体を紹介する前です。

    それに加えて、起動時に作成するデータベースとユーザーは、公式のpostgresイメージの環境変数のみで処理できます。このように:

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

    データベースに必要な初期化がカバーされていない場合は、.sqlをコピーできます。 スクリプト(および.sh スクリプト)をイメージ内の特別な場所に配置します。これらは起動時に実行されます。このために、あなたはこのように彼らのイメージを拡張することができます:

    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
    

    そして、Dockerfile このように:

    Dockerfile

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

    (これは、dockerhubのpostgresの説明 から取得したものです。 )

    最後に-使いやすさと保守性よりも、イメージの基になっているディストリビューションを優先しないことをお勧めします。 Dockerを使用すると、コンテナー内のディストリビューションをあまり気にすることなく、コンテナー内でアプリケーションを実行できます。とにかくそれはすべてLinuxです。結局のところ、私のような安定したpostgresデータベースコンテナが必要になると思います。これは私が公式のpostgres画像で得たものです。

    私はあなたがこれに関するあなたの選択肢を評価するのを手伝ったことを願っています。




    1. sql:DELETE+INSERTとUPDATE+INSERT

    2. CRUDアプリでLaravelを増やすにはどうすればよいですか?

    3. サブクエリからの行のカウント

    4. mysqlの絵文字は疑問符に変わります