データベース環境構築をもっと簡単に! Docker で PostgreSQL コンテナを立ち上げる
Docker で PostgreSQL コンテナを起動して初期化する
このチュートリアルでは、Docker を使用して PostgreSQL コンテナを起動し、データベースを作成および初期化する手順を説明します。
前提条件
- Docker がインストールされていること
- 基本的な Docker コマンドの使用方法を知っていること
手順
- コンテナを起動する
以下のコマンドを使用して、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
シェルを開きます。
- データベースを作成する
CREATE DATABASE mydatabase;
- テーブルを作成する
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]');
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 ユーザーのパスワードに設定されます。
使用方法
- 上記のコードを
postgres
ディレクトリに保存します。 - 以下のコマンドを実行して、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