(最終更新日:2023年6月)
✔このような方へ向けて書かれた記事となります
「PostgreSQLとDockerの組み合わせってどんなメリットがあるのだろうか?」
「PostgreSQLとDockerを連携させる方法を知りたい」
「PostgreSQLとDockerの実際の使い方が見たい」
✔当記事を通じてお伝えすること
- PostgreSQLとDockerの基本的な概要
- PostgreSQLとDockerの連携方法とその応用
- PostgreSQLとDockerを活用した具体的な例
当記事では、PostgreSQLとDockerの基本的な概要に加え、それらの連携方法や応用事例まで、具体的な手順を用いて詳しく解説しています。
ぜひ最後までご覧いただき、PostgreSQLとDockerを活用した開発がスムーズに進むようサポートいたします。
DockerでPostgreSQLを扱うための前提知識
ここでは、PostgreSQLとDockerの概要についてお伝えしていきます。
基本的なことをおさえたうえで次へ進みましょう。
- PostgreSQLとは?
- Dockerとは?
PostgreSQLとは?
PostgreSQLは、オープンソースのリレーショナルデータベース管理システム(RDBMS)のひとつです。
企業から学術研究まで、さまざまな用途に使用され、その機能の豊富さと柔軟性から、非常に人気のあるデータベースシステムとなっています。
PostgreSQLは、SQL標準に準拠した高度な機能を備えています。
- トランザクション
- ACID(原子性、一貫性、独立性、永続性)コンプライアンス
- ビュー
- 外部キー
- ストアドプロシージャ
- トリガー
- ユーザー定義型
- ルール
- サブクエリ
- トランザクション内での複数のバージョン同時実行(MVCC)
PostgreSQLはその機能性、拡張性、オープンソースの自由さから、多くのWebアプリケーション開発者やデータベース管理者にとって重要なツールとなっています。
Dockerとは?
Dockerは、ソフトウェアの開発、配布、運用を効率化するためのオープンソースのプラットフォームです。
Dockerを使うことで、アプリケーションを「コンテナ」という形でパッケージ化できます。
そのコンテナ内には以下のようなものをすべて含めることが可能。
- アプリケーションのコード
- 実行に必要なライブラリやツール
- そのほか依存関係全て
開発の環境をパッケージ化することで、環境ごと持ち運びができるのが特徴です。
Dockerの利点とPostgreSQLへの適用
こちらでは、DockerのメリットとそのPostgreSQLへの適用について詳しく説明します。
- Dockerのメリット
- PostgreSQLでDockerを使用する利点
Dockerのメリット
Dockerによるコンテナ化により、開発環境と本番環境の違いによる問題を回避しやすくなります。
なぜならコンテナに含まれるアプリケーションは、どのような環境でも同じように動作するからです。
それぞれのコンテナは独立して動作し、他のコンテナやホストシステムと隔離されているため、セキュリティ面でも利点があります。
また、Dockerは軽量であるため、1台のマシン上で複数のコンテナを動かすことも可能です。
これによりリソースをより効率的に利用することが可能となります。
さらに、Dockerのイメージ(コンテナを作成するための設計図)は、Docker Hubという中央リポジトリで共有することができ、このイメージをベースに独自のアプリケーションを開発したり、他の人が作成したイメージを利用したりすることも可能です。
これらの特徴により、Dockerは開発からテスト、本番環境へのデプロイ、さらにはマイクロサービスアーキテクチャの実現など、さまざまなシーンで活用されています。
PostgreSQLでDockerを使用する利点
PostgreSQLをDockerで運用することは多くの利点をもたらします。
- DockerはPostgreSQLのインストールと設定プロセスを簡素化できる
- 複数のPostgreSQLインスタンスを同じマシン上で分離して実行可能
- 様々なバージョンのPostgreSQLを試せる
- Dockerを使うことでデータの永続性を管理しやすくなる
- バックアップとリストアが容易になる
覚えておけば必ず役に立つでしょう。
DockerとDocker Composeのインストール
DockerとDocker Composeのインストール手順とその動作確認について詳しく解説します。
- インストール手順
- 動作確認
インストール手順
DockerとDocker Composeのインストールは簡単です。
まず、公式のDockerウェブサイトからDocker Desktopをダウンロードしてインストールします。
Docker DesktopはMacとWindowsで利用可能で、Linuxユーザーは個別にDocker EngineとDocker Composeをインストールする必要があります。
インストールが終わったら、コマンドプロンプトまたはターミナルを開きます。
$ docker --version
Docker version 24.0.2, build cb74dfc
$ docker-compose --version
Docker Compose version v2.17.3
それぞれのインストールが成功したか確認します。
動作確認
インストールが無事に完了したら、DockerとDocker Composeが正しく動作するか確認しましょう。
docker run hello-world
このコマンドでは以下がおこなわれます。
- Docker Hubからhello-worldイメージをダウンロード
- 新しいコンテナを作成して実行
- コマンドの出力に “Hello from Docker!” のメッセージが表示される
以上がおこなわれれば、Dockerは正しく動作しています。
次に、適当なディレクトリに移動し、docker-compose.ymlファイルを作成します。
version: '3.8'
services:
backend:
image: mybackendimage
ports:
- 8000:8000
environment:
- DB_HOST=db
- DB_PORT=5432
depends_on:
- db
frontend:
image: myfrontendimage
ports:
- 80:80
environment:
- API_URL=http://backend:8000
db:
image: postgres
environment:
- POSTGRES_USER=myuser
- POSTGRES_PASSWORD=mypassword
- POSTGRES_DB=mydatabase
そのファイルにはversionとservicesという2つのキーが含まれていることを確認します。
docker-compose up
これにより、docker-compose.ymlファイルに記述されたサービスが起動します。
公式のPostgreSQL Dockerイメージを使う
こちらでは、Docker Hubから公式のPostgreSQL Dockerイメージをダウンロードし、使用する方法について説明します。
- Dockerイメージとは?
- ダウンロード手順
Dockerイメージとは?
Dockerイメージは、Dockerコンテナを実行するためのテンプレートです。
アプリケーションを実行するために、必要なすべてのソフトウェアやライブラリを含んでいるもの。
PostgreSQL Dockerイメージは、PostgreSQLデータベースサーバーを含んでいます。
これを使用することで、PostgreSQLサーバーを簡単に立ち上げられるのです。
またバージョンによってタグが分けられており、自身の環境に最適なバージョンを選択できます。
ダウンロード手順
PostgreSQL Dockerイメージは、Docker Hubから無料でダウンロードできます。
ターミナルまたはコマンドプロンプトを開き、コマンドを実行します。
docker pull postgres
最新版のPostgreSQL Dockerイメージがダウンロードされます。
特定のバージョンをダウンロードする場合は、こちら。
docker pull postgres:バージョン番号
ダウンロードが完了したら、「docker images」コマンドを実行して、ダウンロードしたイメージが表示されることを確認します。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f9c14fe76d50 3 weeks ago 143MB
wordpress latest c220bf5535cd 6 weeks ago 616MB
python 3 815c8c75dfc0 6 weeks ago 920MB
postgres latest bf700010ce28 6 weeks ago 379MB
PostgreSQLコンテナの実行と初期設定
こちらでは、ダウンロードしたPostgreSQLのDockerイメージを使用します。
PostgreSQLのコンテナを実行する方法と初期設定をご覧ください。
- 起動方法
- 初期データと永続化設定
- データボリュームの利用
起動方法
PostgreSQLのコンテナを起動するには、docker run
コマンドを使用します。
この際、必要な環境変数を指定するために-e
オプションを利用します。
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
- 名前:some-postgres
- パスワード:mysecretpassword
-d
オプションはバックグラウンドで実行することを指定します。
初期データと永続化設定
PostgreSQLコンテナは、デフォルトで新しいデータベースとして起動します。
初期データをロードするには、PostgreSQLの初期化スクリプトを以下に配置します。
/docker-entrypoint-initdb.d/ディレクトリ
データの永続化を行うには、ホストのディレクトリをコンテナの/var/lib/postgresql/data
ディレクトリにマウントします。
docker run --name some-postgres -v /my/own/datadir:/var/lib/postgresql/data -e POSTGRES_PASSWORD=mysecretpassword -d postgres
ホストの/my/own/datadir
ディレクトリをコンテナ内にマウントします。
データボリュームの利用
Dockerは、データボリュームという仕組みを提供しており、データの永続化を簡単におこなえます。
コンテナが削除されてもボリュームデータが保持されて、新しいコンテナでもそのデータを使用できるのです。
データボリュームを使用するには、docker run
コマンドで-v
オプションを指定します。
docker run --name some-postgres -v postgresql-data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=mysecretpassword -d postgres
postgresql-data
という名前のデータボリュームを使用します。
Docker ComposeでPostgreSQL環境の構築
こちらでは、Docker Composeを利用してPostgreSQL環境を構築する方法を詳しく解説します。
Docker Composeを使用すると、複数のコンテナをまとめて管理することができます。
- docker-compose.ymlの作成
- コマンド操作
- 停止と再起動
docker-compose.ymlの作成
Docker Composeを使用するには、まずdocker-compose.yml
という設定ファイルを作成します。
以下に、PostgreSQLサーバーのコンテナを作成するためのdocker-compose.yml
の基本的な例を示します。
version: '3'
services:
db:
image: postgres
restart: always
environment:
POSTGRES_PASSWORD: example
この設定ファイルでは、PostgreSQLのDockerイメージを使用して、名前がdb
のコンテナを作成します。
また、POSTGRES_PASSWORD
環境変数により、データベースのパスワードが設定されます。
コマンド操作
docker-compose.yml
ファイルを作成したら、docker-compose up
コマンドを使用してコンテナを起動します。
デフォルトでは、このコマンドは前景で実行され、すべてのログがコンソールに出力されます。
バックグラウンドで実行するには、-d
オプションを追加します。
docker-compose up -d
停止と再起動
Docker Composeを使うと、すべてのサービスを一度に停止したり再起動したりすることが容易になります。
- docker-compose stop:すべてのサービスを停止
- docker-compose start:再起動
- docker-compose down:サービスを停止し、ネットワークと作成されたコンテナを削除
PostgreSQLクライアントを使ってコンテナに接続
PostgreSQLクライアントを使って作成したDockerコンテナに接続する方法について詳しく見ていきます。
2つの主要な接続方法について説明します。
- コマンドラインからの接続
- GUIツールを使った接続例
コマンドラインからの接続
コマンドラインからPostgreSQLコンテナに接続するには、動作しているコンテナのIDを確認する必要があります。
これはdocker ps
コマンドでおこないましょう。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
取得したIDを使って以下のように、Dockerコンテナのシェルに入ります。
docker exec -it [container_id] bash
最後にPostgreSQLサーバーにアクセスします。
psql -U postgres
GUIツールを使った接続例
GUIツールを使うと、データベースの操作が直感的でわかりやすくなります。
pgAdminやDataGripなどのツールがありますが、以下はpgAdminの例です。
- pgAdminをインストールし、アプリケーションを起動
- 「サーバー」を右クリックし、「新規サーバー」を選択
- 表示されたウィンドウに必要な情報(サーバー名、ホスト名、ポート、ユーザ名、パスワードなど)を入力
入力する情報は、docker-compose.ymlファイルで設定したものと一致していなければなりません。
設定が完了したら、「保存」ボタンをクリックして接続を完了します。
DockerfileでカスタマイズされたPostgreSQLイメージを作成
ここでは、Dockerfileを使用してカスタマイズされたPostgreSQLイメージを作成する方法を紹介します。
Dockerfileは、Dockerコンテナのビルド過程を定義するテキストドキュメントであり、Dockerイメージをカスタマイズする最も一般的な方法です。
- Dockerfileの記述
- イメージビルドと実行
- 動作確認
Dockerfileの記述
Dockerfileを作成するには、まず新しいテキストファイルを作成し、それを’Dockerfile’という名前で保存します。
次に、基になるイメージを指定する’FROM’命令でファイルを開始します。
この場合、公式のPostgreSQLイメージを基にします。
# ベースイメージの指定
FROM postgres:latest
# 環境変数の設定(任意)
ENV POSTGRES_USER myuser
ENV POSTGRES_PASSWORD mypassword
ENV POSTGRES_DB mydatabase
# ポートの公開(任意)
EXPOSE 5432
# 初期化用のSQLファイルをコンテナ内にコピー
COPY init.sql /docker-entrypoint-initdb.d/
# コンテナ起動時のコマンド
CMD ["postgres"]
RUN命令を使用して必要なパッケージをインストールしたり、COPY命令を使用してローカルシステムからイメージ内部にファイルをコピーしたりできます。
最後に、CMDまたはENTRYPOINT命令を使用してコンテナが実行するコマンドを指定します。
イメージビルドと実行
Dockerfileを記述したら、docker build
コマンドを使用して新しいDockerイメージをビルドします。
このコマンドは、Dockerfileが存在するディレクトリで実行しましょう。
イメージがビルドされたら、docker run
コマンドを使用して新しいコンテナを起動します。
動作確認
コンテナが正常に動作していることを確認するためには、docker ps
コマンドを使用してコンテナの状態をチェックします。
また、PostgreSQLクライアントを使用してデータベースに接続し、新たに追加されたカスタム要素が正しく動作していることも確認します。
まとめ
当記事でご説明した内容はこちら。
- Dockerにより、PostgreSQLの環境構築が短時間で可能になる
- Dockerを使うことで、再現性と移植性が保証される
- Dockerfileを用いたイメージのカスタマイズができる
今回は基本的な環境構築に焦点を当てましたが、セキュリティ設定や高度なパフォーマンスチューニングなど、学ぶべきトピックはまだまだあります。
他のデータベースシステムや開発ツールとの連携についても学んでいくと、より一層効率的な開発が可能になるでしょう。
ぜひ当サイトのさまざまな記事をご覧になって、勉強してみてください。