PHP未経験者が勉強用にDockerで開発環境作ってみた


やりたいこと

できるだけ自分のPCを汚さずにいわゆるLAMP環境
(Linux, Apache, MySQL, PHP)の開発環境を手軽に構築したい。

Macの場合はMAMPやVirtualBoxがあるけど汚れちゃうし・・・

そうだ、Dockerの勉強も兼ねてDockerを使おう!!!

成果物

Dockerを使用してApache, PHP, MySQL, phpMyAdminを連携し、
PHPとMySQLの勉強に注力するための開発環境を作成しました。

開発環境

ツール名 バージョン
OS macOS Mojava 10.14.3
Docker Docker for Mac 18.06.1-ce
Docker Compose 1.22.0
PHP 7.2.7-apache (Apacheと連携されているコンテナ)
MySQL 8
phpMyAdmin 4.7

プロジェクト構成

[PHP]

Dockerコンテナの80番ポートと、ホストOSの80番ポートを紐付け。

MySQLとの接続にはmysqliを使用。
Docker ComposeだけではPHPの拡張機能をインストール出来ないため、Dockerfileで対応。

[MySQL]

Version8からデフォルトの認証方式がcaching_sha2_passwordとなっているため、
mysql_native_passwordに変更する。

この設定を行わないとMySQLに接続出来ない。

使用手順

[前提条件]

  • Dockerがインストールされていること、起動されていること
  • Docker Composeがインストールされていること

Dockerを導入していない場合、Macの場合は以下のコマンドで導入してください。

# Homebrewがインストールされていること
$ brew install docker
$ brew cask install docker
$ brew install docker-compose
# Clone
$ git clone https://github.com/MasanoriIwakura/php_study.git

# フォルダ移動
$ cd php_study

# コンテナ実行
$ docker-compose up -d

# 全てのコンテナが立ち上がっていることを確認
$ docker-compose ps
         Name                       Command               State               Ports
------------------------------------------------------------------------------------------------
php_study_mysql_1        docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp
php_study_php_1          docker-php-entrypoint apac ...   Up      0.0.0.0:80->80/tcp
php_study_phpmyadmin_1   /run.sh phpmyadmin               Up      0.0.0.0:8080->80/tcp, 9000/tcp

[接続確認]

PHPの表示確認は
http://localhost
にアクセス

phpMyAdminの表示は
http://localhost:8080
にアクセス

[ソース編集方法]

php/html直下にフォルダやphpファイルを作成・編集するだけ。

例えば、php/html/index.phpを編集した場合はhttp://localhostにアクセス、
php/html/sample/sample.phpを編集した場合はhttp://localhost/sample/sample.phpにアクセスすることで動作確認が行えます。

また、ソースを修正して保存し、ブラウザをリロードするだけで反映できるので
Dockerでイメージのリビルドや再展開は不要です。

その他

[MySQLの初期化]

起動時にmysql/sql内に実行したSQLを配置することで自動的にMySQL内にテーブルを作成したり、初期データを投入することができます。

[今回作成したDockerコンテナの再構築]

実は今回のリポジトリ直下にShellを配置しています。
実行することで永続化したファイルの削除、コンテナ削除、コンテナ再構築をいっぺんに行います。
永続化したファイルを削除したくない場合は手動でコンテナを削除してください。

# リポジトリ直下で使用
./docker-clean.sh

# 永続化したファイルを削除したくない場合(コンテナだけ削除)
docker-compose stop
docker-compose rm

今後もっと便利にすることができればこちらの記事も更新します。