DockerでPostgreSQLデータベースのデータを永続化する - ボリュームとホストディレクトリのマウントの比較
DockerでPostgreSQLデータベースのデータを永続化する - ボリュームを使った方法
ボリュームは、コンテナとホストマシン間でデータを共有するための機能です。コンテナが削除されても、ボリュームに保存されたデータは消えません。
ボリュームを使ったデータ永続化の手順
- Dockerfileの作成
PostgreSQLと必要なツールをインストールするDockerfileを作成します。
FROM postgres:14
ENV POSTGRES_USER postgres
ENV POSTGRES_PASSWORD postgres
RUN mkdir -p /var/lib/postgresql/data
CMD ["postgres", "-D", "/var/lib/postgresql/data"]
- docker-compose.ymlの作成
PostgreSQLコンテナとボリュームを定義するdocker-compose.ymlファイルを作成します。
version: "3"
services:
postgres:
image: postgres:14
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
- コンテナの起動
docker-compose up
コマンドを実行してコンテナを起動します。
- データベースへの接続
psql
コマンドを使用してデータベースに接続し、データ操作を行います。
psql -h localhost -U postgres -W
- データの確認
データベースに接続して、データが保存されていることを確認します。
ポイント
- ボリュームは名前で指定します。
- データベースのデータは
/var/lib/postgresql/data
ディレクトリに保存されます。 - docker-compose.ymlファイルでボリュームを定義する際は、
volumes
キーワードを使用します。 - 匿名ボリュームは永続化されないため、名前付きボリュームを使用しましょう。
DockerでPostgreSQLデータベースのデータを永続化するには、ボリュームを使用します。ボリュームを使用することで、コンテナが削除されてもデータは消えません。
Dockerfile
FROM postgres:14
ENV POSTGRES_USER postgres
ENV POSTGRES_PASSWORD postgres
RUN mkdir -p /var/lib/postgresql/data
CMD ["postgres", "-D", "/var/lib/postgresql/data"]
docker-compose.yml
version: "3"
services:
postgres:
image: postgres:14
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
データ操作例
-- データベースの作成
CREATE DATABASE test;
-- テーブルの作成
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(255)
);
-- データの挿入
INSERT INTO users (id, name) VALUES (1, 'John Doe');
-- データの取得
SELECT * FROM users;
- 上記のコードはあくまでサンプルです。実際の運用環境に合わせて修正してください。
- データベースの接続情報やパスワードなどは環境に合わせて変更してください。
DockerでPostgreSQLデータベースのデータを永続化する他の方法
ホストディレクトリのマウント
PostgreSQLのデータディレクトリ (/var/lib/postgresql/data
) をホストマシンのディレクトリにマウントする方法です。
docker run -d -p 5432:5432 -v /my/postgres/data:/var/lib/postgresql/data postgres
この方法の利点は、設定が簡単で、ボリュームを使用するよりもパフォーマンスが向上する場合があることです。
Dockerイメージの保存
PostgreSQLデータベースを含むDockerイメージを作成して保存する方法です。
docker commit <container_id> my-postgres-image
この方法の利点は、データベースの状態を特定の時点に固定できることです。
外部ストレージの使用
Amazon S3やGoogle Cloud Storageなどの外部ストレージサービスを使用してデータを保存する方法です。
docker run -d -p 5432:5432 -e "PGDATA=/mnt/postgres" -v /mnt/postgres:/mnt/postgres postgres
この方法の利点は、スケーラビリティと可用性に優れていることです。
データベースバックアップ
定期的にデータベースのバックアップを取ることで、データを永続化することができます。
docker exec -it <container_id> pg_dumpall -U postgres > backup.sql
この方法の利点は、データ損失のリスクを軽減できることです。
- データ量が少ない場合は、ボリュームを使う方法が最も簡単です。
- パフォーマンスが重要な場合は、ホストディレクトリのマウントを使用する方が良い場合があります。
- データベースの状態を特定の時点に固定したい場合は、Dockerイメージの保存を使用する方が良い場合があります。
- スケーラビリティと可用性が必要な場合は、外部ストレージを使用する方が良い場合があります。
- データ損失のリスクを軽減したい場合は、データベースバックアップを取る必要があります。
DockerでPostgreSQLデータベースのデータを永続化する方法はいくつかあります。要件と環境に合わせて最適な方法を選択してください。
postgresql docker docker-compose