PHP+MariaDB+Nginxのローカル環境をDockerで構築 事前準備編【Docker】
公開日:
最終更新日:
ローカルにPHPの開発環境構築といえば、MacであればMAMPがありWindowsであればXAMPPというのがまず候補として上がると思います。
インストールするだけで手軽に環境を構築できるのは便利なのですが、プログラムのバージョンアップや指定したバージョンでの検証環境を用意することは難しいのではないでしょうか。(複数のバージョンを保持しておくか、バージョン違いのプログラムを入れておいてパスを書き換えれば不可能ではないですが・・・。)
開発環境の構築はDockerを使うと便利とのことだったので、今回はDockerを使ってPHP+MariaDB+Nginxのローカル環境を構築するお話です。
あとはおまけで、バーチャルホストを設定して「〜.test」の形式できたURLはローカルの「〜.test」ディレクトリとリンクさせて、ドキュメントルートとして機能させるようにします。
※全ての内容はMacOSの前提で進めていきます。
全て書ききるとかなり長くなりそうなので今回はコンテナをbuildする事前準備まで書こうと思います。
Dockerをインストールする
参考サイトにはhomebrewを使ってくださいだのなんだのツール名が色々と出てきますが、私はそういう小難しいものはわからないので公式のページから「Docker for Mac」をダウンロードして普通にインストールします。
この辺りは特につまづく部分もないので支持された通りにぽちぽちしていけば終了です。
正常にインストールが完了していればメニューバーのところにDockerのクジラのアイコンが表示されています。
Kitematicをインストールする
こちらは現在起動しているコンテナをGUIで監視でき、なおかつ起動や停止もできるのであると非常に便利です。
こちらも公式のページからダウンロードしてインストールします。
コンソールで全てできるから問題ないって人には特に必要ないので飛ばして大丈夫です。(コンソール画面に慣れている人がこのページにたどり着くのかは疑問ですが。)
これでツールに関しては揃ったので、ファイルの作成などを行っていきます。
docker-compose.ymlを作成する
docker-compose.ymlとは環境構築時のサーバーやアプリケーションの設定をするためのファイルです。
これを元にDockerがコンテナをbuildしていきます。
ひとまず私がローカルに作成した時点のディレクトリやファイル構成はこんな感じでした。
うまくディレクトリごとにまとめようと思っていましたが、理解がいたらないところもあったので多少とっちらかった印象になってしまいました。
ユーザー名
┗docker-devdir
┗docker-config
┗docker-compose.yml
┗php(php-fpmのbuildファイルや設定ファイルを格納)
┗Dockerfile
┗php.ini
┗html(localhostにあたるルートディレクトリ)
┗phpmyadmin.test
┗phpmyadminに同梱されているファイル群
┗index.html
┗mariadb
┗_datas
┗MySQLのテーブル情報などが格納される
┗nginx
┗default.conf
とりあえず最終形はこんな感じとして進めていきたいと思います。
Nginxの設定を書く
まずはNginxの設定から書いていきます。
色々調べた結果行き着いた設定なので、ほとんどはコピペみたいなものです。
サービス名やコンテナ名はわかりやすければなんでもいいので、自分がわかりやすい名前を適当につけてもらって大丈夫です。
version: '3'
services:
nginx-server:
container_name: nginx.sv
image: nginx
ports:
- '80:80'
volumes:
- ../nginx/default.conf:/etc/nginx/conf.d/default.conf
- ../html:/var/www/html
imageはDockerHubの公式イメージから拝借しています。
portsに関してはlocalhostでポート設定なしで機能させるために80で設定します。
volumesでリモートとローカルをリンクさせて、default.confをローカルにおいて独自の設定を反映させるようにします。
HTMLファイルなどの格納先はhtmlディレクトリになります。
ここがlocalhostとしてのルートディレクトリにあたります。
PHPの設定を書く
次にPHPの設定を書いていきます。
Nginxの場合は通常のPHPイメージではうまくいかなかったので、PHP-FPMというイメージを使用して構築します。
また、他にもモジュールを色々と導入するので今回は別途でDockerfileというファイルを作成してbuildを行います。
volumesにはNginxで指定したルートディレクトリと同じ場所に設定し、buildの部分はDockerfileを格納している場所のパスを記述します。
先ほどNginxの設定を記述したdocker-compose.ymlに書き足していきます。
phpfpm73-nginx:
build: ./php
container_name: phpfpm73.nginx
volumes:
- ../html:/var/www/html
ではbuildの元になるDockerfileを作成していきます。
正直ここも色々調べてコピペで完成させたようなものなので、詳しい説明はあまりできません。
FROM php:7.3-fpm
COPY php.ini /usr/local/etc/php
RUN apt-get update && apt-get install -y \
vim \
zip \
unzip \
iputils-ping \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
git
RUN docker-php-ext-install pdo pdo_mysql mysqli
RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
RUN docker-php-ext-install -j$(nproc) gd
FROMにはDockerHubにある公式イメージから拝借して、7.3-fpmのタグがついたバージョンを取得しています。
COPYはリモートの設定をローカルの設定で上書きするためにphp.iniをコピーして配置しておきます。
あとはRUNで必要なモジュールをインストールしていきます。
この環境を作り終えた後の話ではありますが、lib〜やdocker-php-ext-configureから下のあたりはWordPressをインストールした際にGDライブラリがない状態で画像のアップロードなどが機能しなかったので、調べた結果この記述をしておくと無事インストールできて画像のアップロードも機能しました。
PDO関連は言わずもがなですが、データベースを扱うのであれば必須なのでインストールしておきましょう。
MariaDBの設定を書く
PHPの時と同じようにymlファイルに追記していきます。
こちらも公式イメージから拝借してMariaDBの最新バージョンを使用します。
mariadb-nginx:
container_name: mariadb.nginx
image: mariadb
ports:
- '3306:3306'
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- ../mariadb/_datas:/var/lib/mysql
特に説明するほどのこともないですが、ほぼ公式イメージの記載通りと言ったところです。
volumesで指定しているディレクトリにはデータベースに関するファイルが格納されるので、コンテナを削除してしまう以外は永続的にデータベースを維持できると言った感じです。
まとめ
色々と調べたもののページによってばらつきがあり、ツギハギでやっていくとなかなかうまくいかない部分もあったりで割と苦労しました。
確かにファイルを作成してコンソールで少しコマンドを打つだけで環境が作れるのは便利ですが、何事も少しは理解してやってみないとわからないものですね。
ひとまずこれでコンテナをbuildするファイル群は揃ったので、次回はコンソールを開いてコンテナを作成・起動するまでの手順と、バーチャルホストを設定して各仮想ドメイン毎にドキュメントルートを持たせれるような設定について書きたいと思います。