はじめに
こんにちは、新卒2年目の岡崎です。今回は、DockerでPostgreSQLを起動する方法を紹介します。
環境
$ docker version Client: Cloud integration: v1.0.31 Version: 23.0.5 API version: 1.42 Built: Wed Apr 26 16:12:52 2023 OS/Arch: darwin/arm64 Context: default Server: Docker Desktop 4.19.0 (106363) Engine: Version: 23.0.5 API version: 1.42 (minimum version 1.12) Built: Wed Apr 26 16:17:14 2023 OS/Arch: linux/arm64 Experimental: false containerd: Version: 1.6.20 GitCommit: × × × × × × × × × × × runc: Version: 1.1.5 GitCommit: v1.1.5-0-gf19387a docker-init: Version: 0.19.0 GitCommit: de40ad0
ディレクトリ構成
. |-- docker-compose-postgres.yml `-- postgres ``-- postgres-init ``|-- init.sql
ファイルごとの実装例を示します。
docker-compose-postgres.yml
name: "demo" services: postgres: image: postgres:15.4 container_name: demo-postgres environment: POSTGRES_PASSWORD: local_root_password POSTGRES_HOST_AUTH_METHOD: scram-sha-256 POSTGRES_INITDB_ARGS: "--auth-host=scram-sha-256" TZ: Asia/Tokyo ports: - "5433:5432" volumes: - "./postgres/postgres-init:/docker-entrypoint-initdb.d" - "./postgres/data:/var/lib/postgresql/data"
name
コンテナの名前を定義します。
service
起動するサービス群を定義します。今回の場合は、PostgreSQLを起動するための設定を定義しています。
image
イメージ名を定義します。
container_name
コンテナ名を定義します。
environment
環境変数名を定義します。
今回はPOSTGRES_PASSWORD(PostgreSQLのパスワード)、POSTGRES_HOST_AUTH_METHOD(PostgreSQLの認証方法)、POSTGRES_INITDB_ARGS(PostgreSQLのロケール)、TZ(タイムゾーン)を設定しています。
ports
ポートを定義します。
volumes
名前付きボリュームをコンテナ上のフォルダに割り当てます。フォーマットは以下の通りです。
ボリューム名:コンテナの絶対パス
今回の場合、/docker-entrypoint-initdb.dを、コンテナ上の./postgres/postgres-initに割り当てています。(./postgres/data:/var/lib/postgresql/dataも同様です。)
init.sql
CREATE ROLE demo_user WITH LOGIN PASSWORD 'demo_password'; CREATE DATABASE demo OWNER demo_user ENCODING 'UTF8' LOCALE 'C' TEMPLATE template0;
初期設定として、ロール・データベースの作成の作成を行っています。
コマンド
$ docker-compose -f docker-compose-postgres.yml up
実際にこのような起動画面になったら準備完了です。
今回は、TablePlusというGUIツールを使って接続できるか確認しました。
Port、User、Password、Databaseを指定します。
無事に接続することができました。
最後に
今回は、DockerでPostgreSQLを起動する方法を紹介しました。
最後に、エキサイトではデザイナー、フロントエンジニア、バックエンドエンジニア、アプリエンジニアを絶賛募集しております!
興味があればぜひぜひ連絡ください!