docker-compose で PostgreSQL コンテナーを起動して psql コマンドを実行
Docker コンテナー内で psql コマンドを実行する方法
このチュートリアルでは、Docker と docker-compose を使用して PostgreSQL コンテナーを起動し、そのコンテナー内で psql コマンドを実行する方法を説明します。
前提知識
このチュートリアルを理解するには、以下の知識が必要です。
- Docker の基本的な概念
- docker-compose の基本的な概念
- PostgreSQL の基本的な概念
手順
-
Docker コンテナーの作成
まず、PostgreSQL コンテナーを作成する必要があります。これを行うには、次のコマンドを実行します。
docker run -d --name postgres -p 5432:5432 postgres
このコマンドは、
postgres
という名前のコンテナーを作成し、コンテナー内のポート 5432 をホストマシンのポート 5432 にマップします。 -
psql コマンドの実行
PostgreSQL コンテナーが起動したら、そのコンテナー内で psql コマンドを実行できます。これを行うには、次のコマンドを実行します。
docker exec -it postgres psql -h localhost
このコマンドは、
postgres
コンテナー内でpsql
コマンドを実行し、PostgreSQL サーバーに接続します。 -
データベースの作成
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 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 コマンドを実行できます。
- 次のコマンドを実行して、コンテナーに接続します。
docker exec -it gcp-project-id-postgres-container-name bash
- 次のコマンドを実行して、psql コマンドを実行します。
psql -h localhost
PostgreSQL コンテナー内で psql コマンドを実行するには、さまざまな方法があります。上記の方法はほんの一例です。自分に合った方法を選択してください。
postgresql docker docker-compose