Docker(Docker Compose)で作るPHPの開発用実行環境
php,nginx,mysqlのコンテナを動かして、PHPを実行させる環境です。
- Docker バージョン 1.5.0 以上
- Docker Compose
Windows環境の場合、仮想OSとしてCoreOSを起動し、そこから起動させます。 Docker,Docker ComposeはCoreOSに含まれているのでインストールの必要はありません。
-
Vagrantプラグイン
-
vagrant plugin install vagrant-hostmanager
-
git clone https://github.com/mistymagich/docker-php-env.git
cd docker-php-env
docker-compose up
hostsファイルに以下を追加します
127.0.0.1 sandbox.local
git clone https://github.com/mistymagich/docker-php-env.git
vagrant up
- Vagrant Host Managerによってhostsファイルの編集が行われるので、手動での編集は不要。
- hostsファイルがアンチウイルスソフトなどによって編集不可にされている場合があるので、あらかじめ解除しておく。
正常に起動できれば、ブラウザで http://sandbox.local でアクセスするとPHPInfoが表示されます。
公式Nginxコンテナをもとに、Set up Automatic Virtual Hosts with Nginx and Apacheの設定を用いて、任意のホスト名「hoge.local」に対して、ドキュメントルートはホストOSにある「www/hoge/public」を参照するようにしています。
ゲストOSのポートTCP80,443にアクセスすることでNginxコンテナにアクセスできます。
公式MySQLコンテナをそのまま利用しています。
データの永続化はしていません。
ゲストOSのポートTCP3306にアクセスすることでMySQLコンテナにアクセスできます。
ユーザー名はroot、パスワードはdocker-compose.ymlにある環境変数MYSQL_ROOT_PASSWORDの値です。
公式PHPコンテナのFPMをもとに、以下のモジュールを追加しています。
- pdo
- pdo_mysql
- gd
- mysqli
- mcrypt
- mbstring
- iconv
- xdebug
ホスト名mysqlでMySQLコンテナを参照します。
PHP(FPM)コンテナはホスト名mysqlでMySQLコンテナにアクセスできます。 Nginxコンテナはホスト名phpでPHP(FPM)コンテナを参照しています。
(Windowsの場合) Vagrantfileのconfig.hostmanager.aliasesにphpmyadmin.localを追加してvagrant up (それ以外) hostsファイルに以下を追加します
127.0.0.1 phpmyadmin.local
-
wwwフォルダにphpmyadminフォルダを作成し、さらにその中にpublicフォルダを作成する
-
PHPMyAdminをダウンロード
-
解凍して、中にあるPHPファイルを2.で作成したpublic以下にコピー
-
config.sample.incをconfig.incにリネーム
-
config.incを編集
ホスト名を変更
/* Authentication type */ $cfg['Servers'][$i]['auth_type'] = 'cookie'; /* Server parameters */ -$cfg['Servers'][$i]['host'] = 'localhost'; +$cfg['Servers'][$i]['host'] = 'mysql'; $cfg['Servers'][$i]['connect_type'] = 'tcp';
"?>"の直前に追加
$cfg['CheckConfigurationPermissions'] = false; ?>
-
http://phpmyadmin.local にアクセス
-
ID:root / PW:mysecretpw でログイン(docker-compose.ymlにある環境変数MYSQL_ROOT_PASSWORDの値)
docker-compose logs
Nginxコンテナ、MySQLコンテナ、PHP(FPM)コンテナのログ出力がまとめて表示されます。 windowsの場合は、ゲストOSにSSHログインしてコマンドを実行する