【コマンド例付】DockerでPostgreSQLを使う方法

※本サイトにはプロモーション・広告が含まれています。

(最終更新日:2023年6月)

✔このような方へ向けて書かれた記事となります

「PostgreSQLとDockerの組み合わせってどんなメリットがあるのだろうか?」
「PostgreSQLとDockerを連携させる方法を知りたい」
「PostgreSQLとDockerの実際の使い方が見たい」

✔当記事を通じてお伝えすること

  • PostgreSQLとDockerの基本的な概要
  • PostgreSQLとDockerの連携方法とその応用
  • PostgreSQLとDockerを活用した具体的な例

当記事では、PostgreSQLとDockerの基本的な概要に加え、それらの連携方法や応用事例まで、具体的な手順を用いて詳しく解説しています。

ぜひ最後までご覧いただき、PostgreSQLとDockerを活用した開発がスムーズに進むようサポートいたします。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

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

このコマンドでは以下がおこなわれます。

  1. Docker Hubからhello-worldイメージをダウンロード
  2. 新しいコンテナを作成して実行
  3. コマンドの出力に “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の例です。

  1. pgAdminをインストールし、アプリケーションを起動
  2. 「サーバー」を右クリックし、「新規サーバー」を選択
  3. 表示されたウィンドウに必要な情報(サーバー名、ホスト名、ポート、ユーザ名、パスワードなど)を入力

入力する情報は、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を用いたイメージのカスタマイズができる

今回は基本的な環境構築に焦点を当てましたが、セキュリティ設定や高度なパフォーマンスチューニングなど、学ぶべきトピックはまだまだあります。

他のデータベースシステムや開発ツールとの連携についても学んでいくと、より一層効率的な開発が可能になるでしょう。

ぜひ当サイトのさまざまな記事をご覧になって、勉強してみてください。

タイトルとURLをコピーしました