データベース環境構築をもっと簡単に! Docker で PostgreSQL コンテナを立ち上げる

2024-06-21

Docker で PostgreSQL コンテナを起動して初期化する

このチュートリアルでは、Docker を使用して PostgreSQL コンテナを起動し、データベースを作成および初期化する手順を説明します。

前提条件

  • Docker がインストールされていること
  • 基本的な Docker コマンドの使用方法を知っていること

手順

  1. コンテナを起動する

以下のコマンドを使用して、PostgreSQL コンテナを起動します。

docker run -d --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=password postgres

このコマンドは、postgres という名前のコンテナを作成し、5432 番ポートをホストの 5432 番ポートにマップし、パスワードを password に設定して PostgreSQL を実行します。

    以下のコマンドを使用して、コンテナに接続します。

    docker exec -it postgres psql -h localhost
    

    このコマンドは、postgres コンテナ内で psql シェルを開きます。

    1. データベースを作成する
    CREATE DATABASE mydatabase;
    
    1. テーブルを作成する
    CREATE TABLE users (
      id serial PRIMARY KEY,
      name varchar(255) NOT NULL,
      email varchar(255) UNIQUE NOT NULL
    );
    
    1. データを追加する
    INSERT INTO users (name, email)
    VALUES ('John Doe', '[email protected]'),
           ('Jane Doe', '[email protected]');
    
      SELECT * FROM users;
      
        docker stop postgres
        

        補足

        • データベースを永続化するには、-v フラグを使用してホスト ディレクトリをコンテナのデータ ディレクトリにマウントする必要があります。
        • 複数のコンテナでデータベースを共有するには、PostgreSQL レプリケーションを使用する必要があります。
        • バックアップと復元のために、定期的にデータベースのバックアップを取る必要があります。



          Dockerfile

          FROM postgres:14
          
          ENV POSTGRES_PASSWORD=password
          
          RUN mkdir -p /var/lib/postgresql/data
          
          COPY ./initdb.d/* /docker-entrypoint-initdb.d/
          

          この Dockerfile は、PostgreSQL 14 イメージに基づいています。 POSTGRES_PASSWORD 環境変数は、コンテナ内の PostgreSQL ユーザーのパスワードに設定されます。 /var/lib/postgresql/data ディレクトリは、データベース データ用の永続ストレージとして作成されます。 initdb.d ディレクトリ内のすべての .sql ファイルは、コンテナが起動されるときに実行されます。

          initdb.d/01_create_database.sql

          CREATE DATABASE mydatabase;
          

          この SQL ファイルは、mydbase という名前のデータベースを作成します。

          CREATE TABLE users (
            id serial PRIMARY KEY,
            name varchar(255) NOT NULL,
            email varchar(255) UNIQUE NOT NULL
          );
          
          INSERT INTO users (name, email)
          VALUES ('John Doe', '[email protected]'),
                 ('Jane Doe', '[email protected]');
          
          version: "3.8"
          
          services:
            postgres:
              build: .
              ports:
                - "5432:5432"
              environment:
                POSTGRES_PASSWORD: password
          

          この docker-compose.yml ファイルは、postgres という名前のサービスを定義します。 このサービスは、上記の Dockerfile を使用してビルドされ、5432 番ポートをホストの 5432 番ポートにマップします。 POSTGRES_PASSWORD 環境変数は、コンテナ内の PostgreSQL ユーザーのパスワードに設定されます。

          使用方法

          1. 上記のコードを postgres ディレクトリに保存します。
          2. 以下のコマンドを実行して、Docker イメージをビルドします。
          docker-compose build
          
            docker-compose up -d
            
              docker exec -it postgres psql -h localhost
              



                PostgreSQL コンテナを起動して初期化するその他の方法

                上記の基本的な方法に加えて、docker run コマンドを使用して、様々なオプションを指定して PostgreSQL コンテナを起動することができます。

                以下の例では、パスワードを mypassword に設定し、名前を mypostgres に変更し、ポート 5433 を公開する PostgreSQL 13.4 コンテナを起動します。

                docker run --name mypostgres -p 5433:5432 -e POSTGRES_PASSWORD=mypassword postgres:13.4
                

                さらに、以下のオプションを使用することができます。

                • -v:ホスト ディレクトリをコンテナのデータ ディレクトリにマウントします。
                • -e:コンテナ内の環境変数を設定します。
                • --user:コンテナ内で実行するユーザーを指定します。
                • --volume:名前付きボリュームを使用してデータを永続化します。
                • --network:コンテナを特定のネットワークに接続します。
                • --restart:コンテナが再起動されるかどうかを指定します。

                docker-compose を使用すると、複数のコンテナを定義して、それらをまとめて起動することができます。

                上記のサンプルコードでは、docker-compose.yml ファイルを使用して、PostgreSQL コンテナと、そのコンテナに接続するためのクライアント コンテナを定義しています。

                docker-compose を使用するには、以下のコマンドを実行します。

                docker-compose up -d
                

                このコマンドは、docker-compose.yml ファイルで定義されているすべてのコンテナを起動します。

                クラウド サービスを使用する

                Amazon Elastic Container Service (ECS) や Google Kubernetes Engine (GKE) などのクラウド サービスを使用して、PostgreSQL コンテナを起動することもできます。

                これらのサービスを使用すると、コンテナのデプロイと管理を容易に行うことができます。

                最適な方法を選択

                PostgreSQL コンテナを起動して初期化する方法を決定する際には、以下の要素を考慮する必要があります。

                • 必要な機能:どの程度の機能が必要ですか? 基本的なデータベース サーバーが必要ですか、それともレプリケーションや高可用性などの高度な機能が必要ですか?
                • 使用環境:コンテナをどこにデプロイしますか? オンプレミスですか、それともクラウドですか?
                • スキルと経験:どのようなスキルと経験を持っていますか? Docker や docker-compose に精通していますか?

                database postgresql docker


                PostgreSQL: INSERT INTO ... SELECT ... FROM ... WHERE NOT EXISTS ... を使う

                PostgreSQL 9.5 以降では、INSERT . .. ON CONFLICT 構文を使用して、レコードが存在しない場合のみ INSERT することができます。ON CONFLICT 句で、競合が発生した場合の処理を指定します。DO NOTHING は、競合が発生した場合、何もせずに処理を終了します。...


                PHPを使ってMySQLテーブルにタイムスタンプを保存する方法

                このチュートリアルでは、PHPとMySQLを使用して、現在の日時をタイムスタンプとしてMySQLテーブルに保存する方法を説明します。タイムスタンプは、イベントが発生した日時を記録するために使用される一般的なデータ型です。必要条件このチュートリアルを完了するには、以下のものが必要です。...


                複雑なトランザクションロジックをマスターする: PostgreSQL 関数とストアドプロシージャを使いこなす

                PostgreSQL 関数は、自身がトランザクションを開始したりコミットしたりすることはできません。常に、関数を実行する親クエリで確立されたトランザクション内で実行されます。詳細説明PostgreSQL では、トランザクションは BEGIN と COMMIT で囲まれた一連の SQL 文として定義されます。これらの文は、データベースに対する操作を原子単位として扱い、たとえ途中でエラーが発生しても、データの一貫性を保ちます。...


                SQL ServerビューでORDER BY句を使用できないときの解決策:マテリアライズドビューを使用する

                SQL Serverにおいて、ビュー、インライン関数、派生テーブル、サブクエリ、共通表式(CTE)などのオブジェクトでORDER BY句を使用しようとすると、「The ORDER BY clause is invalid in views...


                PostgreSQL COALESCE関数:空文字列とNULL値の処理をマスターするためのガイド

                空文字列とNULL値は、データ分析や処理において問題を引き起こす可能性があります。COALESCE関数を使用することで、これらの値を適切に処理し、望ましい結果を得ることができます。argument1、argument2、... argumentN は、関数に渡される引数です。...