やりたいこと
できるだけ自分の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
今後もっと便利にすることができればこちらの記事も更新します。