dockerで開発環境を構築する(PHP+PostgeSQL+PgAdmin)
dockerでPHP+PostgeSQL+PgAdminの開発環境を構築する手順です。
まだdocker環境がない人は、Windowsでdockerで開発環境を構築する(PHP+MySQL+PHPMyAdmin)の1,2を参照してdocker環境を構築してください。
1. 環境(コンテナ)構築用ファイルの作成(PHP+PostgeSQL+PgAdmin)
手順としてはWindowsでdockerで開発環境を構築する(PHP+MySQL+PHPMyAdmin)の3以降と同じですが、環境が異なる(MySQL→PostgeSQL、PHPMyAdmin→PgAdmin)のでそれに対応する構成ファイルを用意します。
C:\Users\{ユーザー名}\DEV\{Project名} ← PCの保存先なのでわかりやすい場所でOK
├ src/ ← PHP/JS/HTMLなど
├ docker/
│ ├ docker-compose.yml
│ └ php/
│ └ Dockerfile
└ db_init/
└ init.sql ← DB初期化(必要に応じて)Dockerfileの位置が違うとかphp.iniがないとか若干異なりますがそこはスルー(汗)
1.1 Dockerfileの作成
以下のような内容でdocker/php/Dockerfileを作成。
今回はPHP8.2とMySQLをインストールする
FROM php:8.2-apache
# PostgreSQL 拡張インストール
RUN apt-get update && \
apt-get install -y libpq-dev && \
docker-php-ext-install pdo pdo_pgsql pgsql
# Apache mod_rewrite
RUN a2enmod rewrite 1.2 docker-compose.ymlの作成
以下のような内容でdocker/docker-compose.ymlを作成。
container_nameやID、パスワードなどは必要に応じて変更。
webとPgAdminのポートは、PHP+MySQL+PHPMyAdminの環境と被らないように8082と8086に変更している(同時に起動しないなら変更する必要はない)
今回はpostgresのバージョンを運用環境と同じ17.5に指定している。
version: '3.8'
services:
web:
build: ./php
container_name: dev_php
volumes:
- ../src:/var/www/html
ports:
- "8082:80"
depends_on:
- db
db:
image: postgres:17.5
container_name: dev_postgres
environment:
POSTGRES_DB: appdb
POSTGRES_USER: postgres
POSTGRES_PASSWORD: apppass
volumes:
- postgres_data:/var/lib/postgresql/data
- ../db_init:/docker-entrypoint-initdb.d
ports:
- "5432:5432"
pgadmin:
image: dpage/pgadmin4
container_name: dev_pgadmin
environment:
PGADMIN_DEFAULT_EMAIL: admin@example.com
PGADMIN_DEFAULT_PASSWORD: adminpass
ports:
- "8086:80"
depends_on:
- db
volumes:
postgres_data:
3.3 init.sqlの作成
既存のDBデータを持ってきて使う場合は、ダンプしたデータをinit.sqlとして置いておくが、ダンプ時は以下のように不要なオプションを付けずにダンプを実行する
pg_dump -U postgres -d 対象DB名 > init.sql4 環境構築
PowerShellでdockerフォルダに移動し、docker composeで環境を起動する(PHP+MySQL+PHPMyAdminと同じ)
cd C:\Users\{ユーザー名}\DEV\project名\docker
docker-compose up -d初回は必要なコンポーネントをダウンロードするので時間が掛かる

