Docker で PostgreSQL を実行する方法: ステップバイステップ ガイド
このチュートリアルでは、Docker Compose を使用して Docker コンテナーで PostgreSQL と pgAdmin 管理ツールをすばやく実行する方法を示します。
PostgreSQL は、無料のオープンソースのオブジェクト リレーショナル データベース管理システムです。 30 年以上前から存在しており、「世界で最も先進的なオープンソース リレーショナル データベース」であると宣伝しています。
同時に、Docker は分散アプリケーションのパッケージ化、展開、実行を容易にするための IT 業界標準になりました。これは、データベースをコンテナ化し、ローカル パッケージのインストールによる依存関係によるシステムの混乱を防ぐ優れた機会を提供します。
次に進む前に、いくつかの重要な質問に答えてみましょう。
Docker で PostgreSQL を使用する理由
Docker 上で PostgreSQL を使用することが有利である理由はいくつかあります。
- 移植性: Docker は、さまざまなシステムやプラットフォーム間で PostgreSQL を実行するための一貫した環境を提供します。これは、基盤となるインフラストラクチャに関係なく、アプリケーションを同じ方法で実行できることを意味します。さらに、さまざまな環境でアプリのテストとデバッグが容易になり、実稼働環境で一貫して実行されることが保証されます。
- 分離: Docker コンテナは PostgreSQL インスタンスを実行するための分離環境を提供するため、競合や依存関係を気にせずに同じホスト上で複数のインスタンスを実行できます。
- スケーラビリティ: Docker を使用すると、PostgreSQL インスタンスをあらゆるプラットフォームに簡単にデプロイし、必要に応じてスケーリングできます。これにより、いつでも新しいインスタンスを簡単に起動したり、実行中のコンテナの数を調整したりできるため、データベース リソースの管理がより柔軟になります。
Docker Compose を使用する理由
Docker Compose は、複数コンテナーの Docker アプリケーションを実行できるツールです。これは、YAML ファイルを使用してアプリケーションのサービス、ネットワーク、およびボリュームを定義することにより、Docker コンテナーをオーケストレーションするプロセスを簡素化するコマンドライン ユーティリティです。
つまり、Docker Compose を使用すると、アプリケーションを構成するすべてのサービスを 1 つのファイルで定義し、docker-compose
コマンドを使用してそれらのサービスを開始、停止、管理できます。これにより、複数のコンテナに依存する複雑なアプリケーションのセットアップと管理が簡単になります。
これは、PostgreSQL と、PostgreSQL データベース用の最も人気のあるオープンソース管理ツールである pgAdmin を並行してデプロイするときに、このガイドで行うことです。これにより、PostgreSQL インスタンスを管理するための追加ツールを探して時間を無駄にすることなく、すぐに PostgreSQL インスタンスの管理を開始できるようになります。
ステップ 1: Docker Compose をインストールする
おそらく、システムにはすでに Docker がインストールされていると思われます。まだお持ちでない場合は、次のリンクで、Ubuntu、Debian、AlmaLinux、Rocky Linux など、使用しているディストリビューションにすばやく簡単にインストールする方法が示されています。
もう 1 つの重要なコンポーネントは Docker Compose です。 Docker とは別に提供されることに注意してください。したがって、Docker Compose を追加する前に Docker をインストールする必要があります。そうしないと、Compose が機能しません。
Linux システムにまだインストールされていない場合でも、インストールは非常に簡単です。次のコマンドを入力します。
sudo curl -L "https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
執筆時点では、Docker Compose 2.16.0 を使用していました。新しいコマンドがあるかどうかを確認するには、このリンクをクリックし、上記の最初のコマンドの「2.16.0」の部分を目的のコマンドに置き換えます。
次に、以下のコマンドを実行して、Docker Compose がインストールされ、正しく機能していることを確認します。表示されているような応答が返されるはずです。
docker-compose version
すべて問題ないようですので、実際の部分に進みましょう。
ステップ 2: Docker Compose ファイルを作成する
ガイドの冒頭で述べたように、Docker Compose を使用すると、複数のコンテナーのスタックを構築して実行できます。これを使用するには、まずアプリケーションのコンテナを構成する「docker-compose.yaml」ファイルを作成する必要があります。次に、「docker-compose up
」などの 1 つのコマンドを使用して、すべてのコンテナーを起動し、それらを相互にリンクできます。
それでは、コンテナ化されたスタックの PostgreSQL サービスと pgAdmin サービスを記述するマスター ファイルを作成しましょう。まず、「pg」などの任意の名前でディレクトリを作成し、次に任意のテキスト エディタを使用して「docker-compose.yaml」という名前のファイルを作成します。 」その中に:
mkdir pg && cd pg
vim docker-compose.yaml
次に、次のコンテンツを追加します。
version: "3.8"
services:
postgres:
image: postgres
restart: always
ports:
- "5432:5432"
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: mypgdbpass
volumes:
- postgres_data:/var/lib/postgresql/data
pgadmin:
image: dpage/pgadmin4
restart: always
ports:
- "5050:80"
environment:
PGADMIN_DEFAULT_EMAIL: [email
PGADMIN_DEFAULT_PASSWORD: mypgadminpass
volumes:
- pgadmin_data:/var/lib/pgadmin
depends_on:
- postgres
volumes:
postgres_data:
pgadmin_data:
ファイルを保存して閉じます。内容に不明な点があっても心配する必要はありません。これから説明するので、この構文を詳しく見てみましょう。
- サービス: Docker が実行する必要がある 2 つのサービス、「postgres」と「pgadmin」を定義します。
- イメージ: ダウンロードしてサービスに使用する Docker Hub イメージを指定します。最新バージョンを使用したいため、タグは適用しません。ただし、特定のものが必要な場合は、PostgreSQL と pgAdmin で使用可能なものを確認し、たとえば「postgres:15.2-alpine」のように指定して使用できます。
- 再起動: Docker コンテナが予期せず停止した場合に常に再起動するように構成します。
- ポート: ホスト マシンの TCP ポートをコンテナ ポートにマッピングします。このようにして、コンテナ化されたサービスがコンテナの外部に公開され、リモートからアクセスできるようになります。
- 環境: アプリケーションの認証とセットアップ用の環境変数を設定します。 PostgreSQL の「postgres」管理者ユーザーおよび pgAdmin (「PGADMIN_DEFAULT_EMAIL」および「<PGADMIN_DEFAULT_PASSWORD”)を必要なものに変更します。
- ボリューム: データを永続化するために、アプリケーション ファイル用の名前付き Docker ボリュームをマウントします。そうしないと、コンテナーの再起動時にデータが失われます。
- depends_on: サービスを順番に実行できます。この例の場合、「pgadmin」サービスは、「postgres」が起動して実行されなくなるまで開始されません。
ステップ 3: PostgreSQL と pgAdmin を Docker コンテナとして実行する
最後に、Docker Compose を使用して PostgreSQL と pgAdmin を実行する準備が整いました。これを行うには、「docker-compose.yaml」ファイルが存在する「pg」ディレクトリから以下のコマンドを実行します。
バックグラウンドでコンテナをデプロイして実行します。
docker-compose up -d
画像のダウンロードが開始されます。インターネット接続速度によっては、プロセス全体に数分かかる場合があります。最後に、以下のような画面が表示され、すべてのコンテナが正常に作成され、開始されたことが通知されます。
もちろん、Docker Compose を使用して PostgreSQL コンテナと pgAdmin コンテナが実際に開始されるまでの遅延は、インターネットからイメージをダウンロードする必要があるため、初回のみです。 Docker イメージは Linux システム上でローカルに利用できるため、後続の実行には数秒かかります。
ステップ 4: pgAdmin を PostgreSQL コンテナに接続する
ブラウザを開いて、PostgreSQL を実行したサーバー上の「http://localhost:5050」または「http://ip-address:5050」を指定します。および pgAdmin Docker コンテナー。
pgAdmin ログイン ページが表示されます。 「docker-compose.yaml」ファイルの「PGADMIN_DEFAULT_EMAIL」変数と「PGADMIN_DEFAULT_PASSWORD」変数の値として指定したユーザー名とパスワードを入力します。 。
次に、「新しいサーバーを追加」をクリックします。
新しいモーダル ウィンドウが開き、PostgreSQL サーバーの接続設定を構成できます。まず、「名前」フィールドに希望の接続名を入力します。
次に、「接続」タブを選択します。 「ホスト名/アドレス」フィールドに、「docker-compose.yaml」ファイルで定義されている Docker の PostgreSQL コンテナのサービスの名前を入力します。この場合、それは「postgres」です。最後に、「POSTGRES_PASSWORD」の値として指定されたパスワードを入力し、「保存」ボタンをクリックして変更を保存します。
アプリケーションは PostgreSQL Docker コンテナに接続し、pgAdmin の機能豊富な Web インターフェイスを使用してデータベース サーバーを監視および管理できます。
あるいは、インタラクティブな PostgreSQL シェルをコンテナにアタッチし、psql
コマンドを実行して PostgreSQL データベースと直接対話することによって、そのシェルを取得することもできます。これを行うには、まずコンテナに入る必要があります。ただし、その名前を知っておく必要があります。それを見つけるには、次のように入力します。
docker ps
示されている例では、PostgreSQL コンテナーの名前は「pg-postgres-1」です。名前の代わりにコンテナ ID を使用することもできます。この例では「37c52cf79923」です。直接接続するには、次のコマンドを実行する必要があります。
docker exec -it pg-postgres-1 psql -U postgres
これにより、使い慣れたコマンドとフラグをすべて使用できる完全な PostgreSQL コマンドライン インターフェイスが提供されます。
最後に、コンテナ化された PostgreSQL/pgAdmin スタックを管理するために不可欠な Docker Compose コマンドについて説明します。
重要な Docker Compose コマンド
実際に使用できる重要な Docker Compose コマンドを例とともに以下に示します。忘れずに、「docker-compose.yaml」が存在する「pg」ディレクトリから実行してください。
すべての Docker コンテナをリストする
デプロイメント内で現在実行されているすべてのコンテナーのリストを表示するには、次のように入力します。
docker-compose ps
すべての Docker コンテナを停止する
バックグラウンドで実行されているすべての Docker コンテナーを停止するには、以下に示すコマンドを使用します。
docker-compose stop
もちろん、すべてのコンテナではなく、1 つのコンテナのみを停止できます。 「docker-compose stop
」を実行し、その後に「docker-compose.yaml」ファイルで定義されているサービス名を入力します。コンテナ名ではなくサービス名に注目してください。
たとえば、「postgres」サービス名で定義された PostgreSQL コンテナを停止するには、次のように入力します。
docker-compose stop postgres
同様に、「docker-compose start postgres
」を実行すると、後で再度開始できます。
すべての Docker コンテナを開始する
プロジェクト ディレクトリ(「pg」)から、以下に示すコマンドを実行してアプリケーションを起動します。
docker-compose start
コンテナのログを表示する
「docker-compose logs
」コマンドは、サービスからのログ出力を表示します。たとえば、コマンドの後にサービス名を指定して実行すると、PostgreSQL コンテナのログが表示されます。
docker-compose logs postgres
さらに、スタック内のすべてのコンテナーのログを集約し、コンテナー内で何が起こっているかをリアルタイムで追跡する場合は、次のように入力します。
docker-compose logs -f
すべてのコンテナを停止して削除する
次のコマンドは、「docker-compose up
」コマンドによって以前に作成されたコンテナーとネットワークを停止して削除します。
docker-compose down
さらに、コンテナとそれに関連付けられた Docker イメージを停止して削除する場合は、次のコマンドを使用します。
docker-compose down --rmi all
コンテナーの停止と削除に加えて、Docker ボリュームに永続的に保存されているデータも削除する場合は、次の手順を実行します。
docker-compose down -v
注意!この方法ではすべてのデータが失われることに注意してください。この場合、PostgreSQL データベースの内容全体 (「pgadmin_data」ボリューム)。したがって、このコマンドを実行する前によく考えてください。
結論
Docker は、開発者がアプリケーションをデプロイおよび管理する方法に革命をもたらしました。これを使用する最も重要なユースケースの 1 つは、依存関係やインストールを気にせずに、コンテナー内に構築されたアプリケーションのデプロイとアクセスが容易になることです。一貫した環境を提供し、展開プロセスを簡素化できる機能により、Docker は開発者やシステム管理者にとって頼りになるソリューションとなっています。
このチュートリアルでは、Docker Compose を使用して Docker コンテナーで PostgreSQL と pgAdmin 管理ツールをすばやく実行する方法を説明しました。このガイドで説明されている段階的な手順に従うと、PostgreSQL および pgAdmin 環境を数分で立ち上げて実行できます。
ご質問やご提案がございましたら、以下のコメント欄でお知らせください。喜んでフォローアップさせていただきます。