はじめに
「学生ひよこ界隈が送るGo/Javaで実現する「はじめてのバックエンド」Advent Calendar 2025」4日目の記事は、簡単にPostgreSQLを立ち上げる方法についてです。
バックエンド開発にデータベースの存在は欠かせません。
バックエンド開発をしよう!と思った時に、手元のPCにRDBMSを入れて...とすると、セットアップとかわからない設定をしなければいけないので、初心者にとても優しくありません。
しかし、Dockerを使えば、簡単にDB構築をすることができるので、思い立った時にすぐバックエンド開発に取り掛かれます!
- データベースのローカル環境構築に挫折した経験がある方
- 開発環境をきれいに保ちたいと考えている方
- バックエンド開発の環境構築を、もっと楽に、速くしたい方
この記事は、バックエンド開発に必要なデータベース(PostgreSQL)の環境を、コマンド一つで、簡単に立ち上げるためのハンズオン付きです。
開発にすぐに使える知識なので、手元でもぜひ試してみてください!
DB環境構築をDockerで行うメリット
ところで、ローカルマシンに直接データベースをインストールする方法もありますが、DB環境構築においてDockerを使う意味はどこにあるのでしょうか?
- 環境の再現性: Dockerイメージを使えば、誰のPCでも、どのOS上でも、全く同じバージョンのデータベースを同じ設定で動かせます。「私のPCでは動くのに相手のPCでは動かない!」といった環境差異によるバグがなくなります。
- セットアップが容易: 簡単なコマンド一つで、指定したDBサーバーが数秒で起動します。
-
クリーンな環境: DBコンテナはホストマシンから隔離されています。不要になったら
docker rmコマンドでコンテナを削除するだけで、PCに余計なファイルや設定が残らず、クリーンな状態を保てます。 - 複数バージョンの共存: 例えば、プロジェクトAではPostgreSQL 13、プロジェクトBではPostgreSQL 14、といったように、異なるバージョンのDBを簡単に使い分けることができます。
このように、Dockerは開発構築におけるいろいろな面倒なことを解決してくれます。
【実践】 DockerでPostgreSQLを起動しよう
今回は、例としてPostgreSQLを起動しますが、他のDBでも同じような方法で起動できます。
Dockerはとても便利なので、興味のある方はDockerの応用もぜひ調べてみてください!
Dockerの基本
Dockerの仕組みについて軽くおさらいします。
- イメージ (Image): アプリケーション(今回はPostgreSQL)とその実行環境をまとめた「設計図」や「テンプレート」のようなもの。
- コンテナ (Container): そのイメージから作成された、実際に動作している「実体」。一つのイメージから、複数のコンテナを起動できます。
このコンテナが、バックエンドと連携するDBの実体です。
ということは、PostgreSQLを使用したければ、PostgreSQLのコンテナを作れば良い、ということになります。
Dockerには、この2つの登場人物がいますが、大まかには以下のフローでコンテナを作ります。
- イメージを作る(またはプル)
- イメージビルドしてコンテナ作成
今回は、Docker Hubという公開レジストリで公式に配布されているpostgresイメージをプルして、PostgreSQLのコンテナを動かしていきます。
コンテナを動かす方法も幾つかあるため、基本から見ていきます。
方法1:docker runで動かす
前提として、Docker DesktopなどのDockerの開発環境が揃って、動いているか、確認してください。
まずは、作業ディレクトリを作ります。
mkdir -p ~/docker-dev/run-pgsql
cd ~/docker-dev/run-pgsql
確認できたら、ターミナルを開いて、以下のコマンドを実行してください。
docker run --name my-pgsql -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d postgres
なんと、これだけでPostgreSQLのダウンロードと起動が実行されます。
コマンドの各オプションを分解して見ていきましょう。
-
docker run: 新しいコンテナを起動するコマンドです。 -
--name my-pgsql: コンテナにmy-pgsqlという名前を付けます。名前を付けておくと、後から操作(停止や削除)するのが楽になります。 -
-e POSTGRES_PASSWORD=mysecretpassword:-eは環境変数を設定するオプションです。postgresイメージでは、POSTGRES_PASSWORDという環境変数でスーパーユーザーのパスワードを設定することが必須となっています。ここではパスワードをmysecretpasswordに設定しました。 -
-p 5432:5432:-pはポートフォワーディングのオプションです。ホストOSのポート:コンテナのポートの形式で指定します。これにより、自分のPC(ホストOS)の5432番ポートへのアクセスが、コンテナ内のPostgreSQLが待ち受けている5432番ポートに転送されます。 -
-d:-dはデタッチモード(Detached mode)の略で、コンテナをバックグラウンドで実行します。これを付けないと、ターミナルがコンテナのログ出力に占有されてしまいます。 -
postgres: 起動するイメージの名前です。postgres:14のようにバージョンを指定することもできます。
それでは、コンテナが正しく起動しているか確認してみましょう。
docker ps
CONTAINER IDやIMAGE、STATUSなどが表示され、NAMESの列にmy-pgsqlがあれば、無事にDB起動されています!
方法2:docker composeで動かす
docker runコマンドは便利ですが、オプションが長くなりがちで、ターミナルに毎回入力するのは少し大変です。
将来的に、複数のコンテナ(例えばAPIサーバーとDB)を連携させる場合は、設定もさらに複雑になります。
そこで登場するのがdocker-composeです。
docker-compose.ymlというYAML形式のファイルに、起動したいコンテナの構成をまとめて記述することで、コマンド一つで環境全体を起動・停止できるようになります。
先ほどと同じように、作業ディレクトリを作ります。
mkdir -p ~/docker-dev/run-pgsql
cd ~/docker-dev/run-pgsql
次に、VS Codeなどを開き、先ほどのディレクトリにdocker-compose.ymlというファイルを作成します。
version: '3.8'
services:
db:
image: postgres:14-alpine
restart: always
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
POSTGRES_DB: mydb
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
上記の例は、PostgreSQL 14を起動した時の設定ファイルです。
このファイルでは、docker runで指定したオプションに加えて、いくつか設定をしています。
-
environment: ユーザー名(POSTGRES_USER)や初期データベース名(POSTGRES_DB)も設定できます。 -
volumes:postgres_data:/var/lib/postgresql/dataの部分は、データの永続化設定です。コンテナを削除してもデータが消えないように、コンテナ内のDBデータディレクトリをpostgres_dataという名前付きボリュームに紐付けています。
詳しいDockerのオプションについては、ここでは詳細に解説しませんが、ポート番号5432で、environmentの情報を使えば良いんだなくらいが理解できれば大丈夫です!
次に、このファイルがあるディレクトリで、以下のDB起動コマンドを実行します。
# 起動 (バックグラウンド)
docker-compose up -d
# 停止
docker-compose down
たったこれだけで、DBの起動が簡単に行えます!
バックエンドからDB接続する
バックエンドなど外部との連携は、environmentの情報を用いて、接続文字列などを使えばサクッと連携できます。
次回、GoのバックエンドにおけるDB接続の方法について解説した記事を執筆予定なので、詳しくはそちらをご参照ください!
おわりに
この記事では、Dockerの基本であるdocker runコマンドから、実践向きなdocker-composeを使った管理方法まで、順を追って解説しました。
以前は、「環境構築」が苦手で、丸一日かけて環境構築をしても何も成果を生み出さず、そもそもバックエンドのコードを書くまでに至らなかった自分がいましたが...
Dockerを使うことで、フルスタックな本格的なアプリケーションを作る第一歩が踏み出しやすくなったと感じています。
開発環境のDB周りで困っている方は、ぜひ試してみてください!
最後までお読みいただき、ありがとうございました!
この「学生ひよこ界隈が送るGo/Javaで実現する「はじめてのバックエンド」Advent Calendar 2025」では、GoやJavaを使い、APIの作り方、データベースとの接続、テストやDockerといった気になったバックエンド技術の基本を振り返った学びを共有しています。
ぜひ他の記事もチェックして、筆者がこのひとりアドカレを完遂することができるか、確認してみてください(^^)
学生ひよこ界隈が送るGo/Javaで実現する「はじめてのバックエンド」Advent Calendar 2025
それでは、明日の「学生ひよこ界隈が送るGo/Javaで実現する「はじめてのバックエンド」Advent Calendar 2025」の記事もお楽しみに!
参考文献