docker-compose で PostgreSQL コンテナーを起動して psql コマンドを実行

2024-04-14

Docker コンテナー内で psql コマンドを実行する方法

このチュートリアルでは、Dockerdocker-compose を使用して PostgreSQL コンテナーを起動し、そのコンテナー内で psql コマンドを実行する方法を説明します。

前提知識

このチュートリアルを理解するには、以下の知識が必要です。

  • Docker の基本的な概念
  • docker-compose の基本的な概念
  • PostgreSQL の基本的な概念

手順

  1. Docker コンテナーの作成

    まず、PostgreSQL コンテナーを作成する必要があります。これを行うには、次のコマンドを実行します。

    docker run -d --name postgres -p 5432:5432 postgres
    

    このコマンドは、postgres という名前のコンテナーを作成し、コンテナー内のポート 5432 をホストマシンのポート 5432 にマップします。

  2. psql コマンドの実行

    PostgreSQL コンテナーが起動したら、そのコンテナー内で psql コマンドを実行できます。これを行うには、次のコマンドを実行します。

    docker exec -it postgres psql -h localhost
    

    このコマンドは、postgres コンテナー内で psql コマンドを実行し、PostgreSQL サーバーに接続します。

  3. データベースの作成

    CREATE DATABASE mydatabase;
    
  4. テーブルの作成

    CREATE TABLE mytable (
        id SERIAL PRIMARY KEY,
        name VARCHAR(255) NOT NULL
    );
    
  5. データの挿入

    INSERT INTO mytable (name)
    VALUES ('John Doe');
    
  6. SELECT * FROM mytable;
    
  7. コンテナーの終了

    docker stop postgres
    

上記の手順は、Docker コマンドラインを使用して PostgreSQL コンテナーを起動および管理する方法を示しています。より簡単な方法として、docker-compose を使用してコンテナーを起動および管理することもできます。

docker-compose.yml ファイルを作成し、次の内容を追加します。

version: "3"

services:
  postgres:
    image: postgres
    ports:
      - "5432:5432"

このファイルは、postgres という名前のサービスを定義します。このサービスは、PostgreSQL イメージに基づいており、ポート 5432 をホストマシンのポート 5432 にマップします。

docker-compose up コマンドを実行して、コンテナーを起動できます。

docker-compose up -d

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

psql コマンドを実行するにはdocker-compose exec コマンドを使用できます。

docker-compose exec postgres psql -h localhost
docker-compose down



PostgreSQL Docker サンプルコード

Dockerfile

FROM postgres:14

RUN usermod -U postgres -d /home/postgres
RUN mkdir -p /var/lib/postgresql/data
RUN chown -R postgres:postgres /var/lib/postgresql/data

ENV PGDATA /var/lib/postgresql/data

COPY --from=current /docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh

VOLUME /var/lib/postgresql/data

ENTRYPOINT ["docker-entrypoint.sh"]

この Dockerfile は、PostgreSQL 14 イメージに基づいています。イメージを作成するには、次のコマンドを実行します。

docker build -t postgres .
version: "3"

services:
  postgres:
    image: postgres
    container_name: postgres
    ports:
      - "5432:5432"
    volumes:
      - ./data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: password

この docker-compose.yml ファイルは、postgres という名前のサービスを定義します。このサービスは、postgres イメージに基づいており、ポート 5432 をホストマシンのポート 5432 にマップします。また、data ディレクトリをコンテナーの /var/lib/postgresql/data ディレクトリにボリュームマウントします。

psql コマンドを実行するには、次のコマンドを実行します。

docker-compose exec postgres psql -h localhost

パスワードを入力するように求められます。 デフォルトのパスワードは password です。

CREATE DATABASE mydatabase;
CREATE TABLE mytable (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL
);
INSERT INTO mytable (name)
VALUES ('John Doe');
SELECT * FROM mytable;
docker-compose down

このサンプルコードは、PostgreSQL コンテナーを起動および管理するための基本的な方法を示しています。 詳細については、PostgreSQL、Docker、および docker-compose の公式ドキュメントを参照してください。




PostgreSQL コンテナー内で psql コマンドを実行するその他の方法

bash シェルを使用する

Docker コマンドラインを使用してコンテナーに接続し、bash シェルを開くことができます。その後、psql コマンドを実行できます。

docker exec -it postgres bash
psql -h localhost

Dockerfile で ENTRYPOINT コマンドを指定して、psql コマンドをコンテナーが起動時に自動的に実行するようにすることができます。

FROM postgres

RUN usermod -U postgres -d /home/postgres
RUN mkdir -p /var/lib/postgresql/data
RUN chown -R postgres:postgres /var/lib/postgresql/data

ENV PGDATA /var/lib/postgresql/data

COPY --from=current /docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh

VOLUME /var/lib/postgresql/data

ENTRYPOINT ["psql", "-h", "localhost"]

この Dockerfile を使用してイメージを作成すると、コンテナーを起動するたびに psql コマンドが自動的に実行されます。

Kubernetes を使用して PostgreSQL コンテナーをデプロイしている場合は、kubectl exec コマンドを使用してコンテナーに接続し、psql コマンドを実行できます。

kubectl exec -it pod/postgres-pod-name psql -h localhost

Cloud Shell を使用する

Google Cloud Platform (GCP) を使用している場合は、Cloud Shell を使用して PostgreSQL コンテナーに接続し、psql コマンドを実行できます。

  1. 次のコマンドを実行して、コンテナーに接続します。
docker exec -it gcp-project-id-postgres-container-name bash
  1. 次のコマンドを実行して、psql コマンドを実行します。
psql -h localhost

PostgreSQL コンテナー内で psql コマンドを実行するには、さまざまな方法があります。上記の方法はほんの一例です。自分に合った方法を選択してください。


postgresql docker docker-compose


PostgreSQLプロセスが「トランザクションでアイドル状態」になる原因と解決方法

クエリの実行待ちクエリが複雑で、処理に時間がかかっている。必要なデータがディスクから読み込まれるのを待っている。競合が発生し、他のプロセスがロックを解放するのを待っている。接続の待機クライアントからの新しい接続を待っている。接続プールからの接続を待っている。...


SQLクエリでPostgreSQLデータベースデータを効率的に比較する方法

pgAdminによる視覚的な比較pgAdminは、PostgreSQLデータベースを管理するためのオープンソースツールで、スキーマとデータの比較機能を提供します。手順:pgAdminで両方のデータベースに接続します。ツールバーから「比較」を選択します。...


PostgreSQLで日付範囲を抽出する

例: 2024年3月10日から2024年3月18日までのデータを抽出上記例では、BETWEEN演算子は閉じた範囲を指定します。つまり、開始日と終了日を含むデータが抽出されます。開いた範囲を指定するには、BETWEENの代わりにBETWEEN SYMMETRICを使用します。...


SQL SQL SQL SQL Amazon で見る



PostgreSQLでデータベースを切り替える方法

\connect コマンドは、PostgreSQLクライアントの中で最も簡単な方法でデータベースを切り替えることができます。ここで、database_name は接続したいデータベースの名前です。例:このコマンドを実行すると、my_database データベースに接続されます。


PostgreSQL コマンドラインユーティリティ psql の使い方

この解説では、psqlから正常に終了するための方法を、分かりやすく日本語で説明します。\q コマンドを使用するpsqlから終了する最も簡単な方法は、\qコマンドを使用することです。このコマンドは、psqlを即座に終了し、オペレーティングシステムのプロンプトに戻ります。