はじめに
docker-composeを使用してLaravelの環境を構築し、PostgreSQLに接続するためにやったことを備忘録としてまとめておきます。
なお、docker-composeを使用したLaravelの環境は、下記の記事を参考に構築しました。
Dockerを使ってLaravelのローカル開発環境を作る(Apache版)
ファイルパスなどは少し変更している箇所がありますので、ご自分の環境に合わせて読み換えてください。
環境
- OS: MacOS Big Sur
- Docker: 20.10.11
- docker-compose: v2.2.1
やったこと
下記の二つを行いました。
- 環境変数
DB_CONNECTION
の値を変更 - コンテナ内に、PHPの拡張機能
pdo_pgsql
をインストール
以下で詳しく説明していきます。
環境変数 DB_CONNECTION
の値を変更
Laravelで使用するDBを設定しているのは、config/database.php
ファイル内の下記の箇所になります。
'default' => env('DB_CONNECTION', 'mysql'),
Laravelの env()
関数は、第一引数で取得する環境変数の値を指定し、第二引数にデフォルト値(環境変数に第一引数で指定した値がない場合の値)を指定することができます。(参考)
そのため、MySQL以外のDBを使用したい場合は、環境変数 DB_CONNECTION
に何かしらの値を設定する必要があります。(参考)
今回はPostgreSQLを使用したいので、pgsql
を設定します。
コンテナ内の環境変数の設定は、docker-compose.yml
ファイル内で行っているので、そこに追記します。
version: "3.8"
services:
web:
build:
context: .
dockerfile: ./docker/app/Dockerfile
ports:
- ${WEB_PORT:-80}:80
volumes:
- ./src:/work/src
environment:
- DB_CONNECTION=pgsql # ここを追記
コンテナ内に、PHPの拡張機能 pdo_pgsql
をインストール
Laravelでは、PHPの拡張機能であるPDOを使用してDBを操作していますが、PDOは使用するデータベースのドライバをインストールしなければ動きません。
そのため、コンテナ起動時に docker-php-ext-install
コマンドを使用して pdo_pgsql
をインストールします。(pdo_pgsqlについてはこちら)
加えて、pdo_pgsql
は、libpq-dev
パッケージが必要なので、こちらもインストールします。(参考)
上記処理を Dockerfile
に記述します。
FROM php:7.4-apache
SHELL ["/bin/bash", "-oeux", "pipefail", "-c"]
ENV COMPOSER_ALLOW_SUPERUSER=1 \
COMPOSER_HOME=/composer
COPY --from=composer:2.0 /usr/bin/composer /usr/bin/composer
RUN apt-get update && \
apt-get -y install git unzip libzip-dev libicu-dev libonig-dev postgresql libpq-dev && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
a2enmod rewrite && \
docker-php-ext-install intl pdo_pgsql zip bcmath
COPY ./docker/app/php.ini /usr/local/etc/php/php.ini
COPY ./docker/app/httpd.conf /etc/apache2/sites-available/000-default.conf
WORKDIR /work/src