始めに
最近ウェブ開発でローカル環境を使って欲しいなぁ、とすごく思うようになりました。
慣れてしまえば開発効率が上がると思うんですけど、その導入が大変なんですよね。
仕事で一緒になった方々に手作業で構築していましたが、もっと簡単にできないかなということで作りました。
Mac用です。名前はDAMP(Docker Apache MySQL PHP。 XAMPP, MAMPから取りました。)です。
Apache、MySQL、PHPが動きます。
(2018年11月8日)PHP7.2に対応しました
1.7.2でPHP7.2に対応しました。
https://github.com/yousan/damp/releases/tag/1.7.2
サンプルのdocker-compose.yml
はこちらです。
https://github.com/yousan/damp/blob/master/docker-compose-public_html.yml
Mac本体の買い替え+PHP7.2化するとかなり早くなりました。
WordPressやCakePHPの開発に使っています。
(2018年4月18日追記) *.test
が動かない問題への対処その2
現状の確認 -> パッチ -> 確認 を行うことで *.test
で動くようになります。
# 確認
$ docker exec -it php.test cat /etc/apache2/sites-available/000-default.conf
(中略)
<VirtualHost *:80>
ServerAlias *.dev
UseCanonicalName Off
(中略)
パッチを当てる
$ curl -L https://raw.githubusercontent.com/yousan/damp/develop/bin/dev_to_test.sh\?"`date`" | bash
# 確認
$ docker exec -it php.test cat /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
ServerAlias *.test
UseCanonicalName Off
(中略)
damp自体のdocker-composeをバージョン1.6.1としていて、そちらではdnsmasqを*.test
に対応しました。
ただPHP5.6のイメージがaptでコケてしまうため、こちらを修正するためのスクリプトです。
(2017年12月22日追記) *.test
が動かない問題への対処
Google Chromeのバージョン63より、 *.dev
というドメインが必ずHTTPSにリダイレクトされるようになりました。
ここで紹介しているDAMPでは *.dev
を使っていたため、Chromeではうまく動かないです。*.test
に統一しました。
(2017年12月22日追記)
MacOSのドメイン解決の変更
*.test
のドメイン解決(名前解決)をDockerのDnsmasqで行うため、/etc/resolver/dev
を/etc/resolver/test
に変更します。
$ cd /etc/resolver/
$ sudo mv dev test
docker-compose.ymlの編集
DAMPのdocker-compose.ymlのうち、*.dev
となっているものを*.test
に直します。
コンテナ名とかの箇所の変更ですね。
PHPサーバの受け付けを変える
PHPサーバ(Apache+mod_php)では*.dev
でのみ待ち受けているので、そちらを*.test
で待ち受けるように変更します。
$ docker exec -it php.test sed -i 's/ServerAlias *.dev/ServerAlias *.test *.dev/' /etc/apache2/sites-available/000-default.conf
下記のコマンドで確認できます。
$ docker exec -it php.test sed -i 's/ServerAlias *.dev/ServerAlias *.test *.dev/' /etc/apache2/sites-available/000-default.conf
ServerAliasの項目が変更されていればOKです。
新しいバージョンに
思えばDAMPを作ったのは一年ほど前ですね。
PHPも5.6で作りましたが、今となっては7が欲しいなぁと思っています。
このPHPサーバの機能はUbuntuをベースにしていますが、そこから追加しているパッケージが見つからなくなっているため、リビルドが出来ない状態です。
是非Alpineあたりで新しいバージョンにしていきたいと思います。
なにができるの?
フォルダを作るとブラウザでアクセスできるローカル環境ができます。
例えば ~/public_html/test.test
というフォルダを作ると http://test.test でアクセスすることができます。
便利じゃないですか?
案件がたくさんあっても切り替え簡単なんです。
VirtualHost
ってたくさん書かなくても良いんです。
Hostsの編集もいらないんです。
中身
ローカルマシンで下記を起動します。
- ウェブサーバ (Apache httpd)
- PHP (mod_php)
- データベースサーバ (MySQL (MariaDB))
- DNSサーバ
基本的な機能はMAMPやVagrantと一緒です。
事前準備
Docker for Macのインストール
ここからダウンロードしてインストールします。
ページ中央あたりにある「Get Docker for Mac(stable)」です。
インストールが完了したら起動します。
初回起動中です。
常駐トレイにくじらのアイコンが出たら起動完了です。
DAMPダウンロード
DAMP本体をダウンロードします。
https://github.com/yousan/damp/archive/master.zip
解凍します。
中身は
ファイル名 | 説明 |
---|---|
resolver_ja.command | *.testを有効化します。一回だけ使います。 |
damp_ja.command | DAMP本体です。 |
stop_all_docker_ja | 強制終了します。 |
となっています。
リゾルバの変更
example.test
やtest1.test
といったドメインにアクセスできる初期設定をします。
resolver_ja.commandを開きます。
環境によっては「開発元が不明のため」というエラーがでる場合があります。
この場合には「システム環境設定>セキュリティ&プライバシー」から実行を許可してください。
パスワードを求められるので現在macOSにログインしているユーザのパスワードを入力します。
終わったら閉じます。
ここまでで事前準備は終わりです。
DAMPの初回起動
DAMPを起動するにはdamp_ja.command
を開きます。
初回はダウンロードがあるので時間が掛かります。回線環境の良いところで実行してください。
ダウンロードをまっている間にテスト用のドメインを作成しましょう。
ドキュメントルートの設定
テスト用のドキュメントルートを作成します。
ホームディレクトリにpublic_html
というフォルダを作成します。
その中にexample.test
というフォルダを作成します。
例:) /Users/yousan/public_html/example.test
ここに index.html
を作成し、中に適当なことを書いておきます。
<html><body>
Hello World!!
</body></html>
このフォルダ設定は変更することもできます。
この辺りでDAMPのダウンロードは終わっているでしょうか。ログが落ち着いたら準備完了です。
起動、終了、強制終了
DAMPの起動
初回起動で流れるログが落ち着いたら準備完了です。
ブラウザで http://example.dev にアクセスしてみてください。
Hello World! が表示されたでしょうか?
このように、 *.dev
という名前でフォルダを作成するとそのドメインでブラウザからアクセスする事ができます。
簡単ですね!
アクセスログ
DAMP (Apache)へのアクセスはDAMPを開いているウィンドウに流れます。エラーなどはそちらから追跡が可能です。
DAMPの終了
DAMPの終了はDAMPを開いているウィンドウで Ctrl+C (コントロールキーとC) を押します。
終了したらウィンドウは閉じてください。
もしCtrl+Cを押す前にウィンドウを閉じてしまった場合、内部的にDAMPが起動したままになります。
その場合には stop_all_docker.command
を開いてください。
強制的に全てのDAMP (Dockerプロセス) を終了させます。
PHP
DAMPではPHPが利用できます。通常のPHPコードを書けば良いです。
<?php echo 'Hey YO!'; ?>
MySQL
DAMPではMySQLが利用できます。
名前 | 値 |
---|---|
接続先 | mysql.test |
ユーザ名 | root |
パスワード | example |
phpMyAdmin
phpMyAdminが利用できます。
http://pma.test
に接続します。
ユーザ名: root
パスワード: example
使えないドメイン名
コンテナ名として使っているため、下記のドメインは使うことができません。
mysql.test
, dnsmasq.test
, pma.test
, php.test
, php5.6-apache.test
は使えません。
その他
シンボリックリンクについて
Mac側のシンボリックリンクが使えます。
但し一部設定の変更が必要です。
DAMPのフォルダ内にあるdocker-compose.yml
ファイルを編集してください。
(中略)
volumes:
# Add symlink directories if you use symlinks at documents.
- ~/git:/Users/home/username/git
シンボリックリンク先となるディレクトリを同名で追記してください。
- /Users/home/username/git:/Users/home/username/git
例えばホームディレクトリにあるgit以下のファイルにアクセスさせたい場合にはこれを追記してください。
各種フレームワークでpublic
ディレクトリをドキュメントルートに設定する必要がある場合、シンボリックリンクを張るとうまく使えます。
Laravelでexampleというプロジェクトを作ってexample.test
でアクセスさせるようにするサンプルです。
$ cd ~/git; composer create-project --prefer-dist laravel/laravel example
$ cd ~/public_html
$ ln -s ~/git/example/public ./example.test
フォルダの場所について
標準ではホームディレクトリのpublic_html
がドメインのルートになります。
(中略)
volumes:
# Add symlink directories if you use symlinks at documents.
# - ~/git:/Users/home/username/git
∑
任意の場所に変える場合には- ~/public_html:/var/www/vhosts
を変更してください。
ホームディレクトリの「サイト」ディレクトリにする場合には
- ~/Sites:/var/www/vhosts
としてください。
MySQLのデータについて
MySQLのデータは消える場合があります。必要に応じてバックアップを取ってください。
なおMac側からMySQLへの接続が可能です。
接続先ホスト名 mysql.test
ユーザ名 root
パスワード example
Windows対応について
現在はWindowsでは動きませんが、DockerがWindowsでも動くと聞いたので環境が整ったりすれば是非とも作っていきたいです。
外部のサーバでの運用について
DAMPはMac以外の環境でも(たぶん)利用可能ですが、公開されているサーバなどでの利用は今のところ想定していません。
外部のサーバで使うとセキュリティリスクがありますのでご注意ください。
動かすために必要な条件
Docker for mac の必要要件です。
- Intelプロセッサ搭載の2010年より新しいモデル (EPTなどのMMU仮想化技術搭載必須)
- Yosemite (macOS 10.10.3)以上
- 4GB以上のメモリ
- Virtual Box 4.3.30未満がインストールされていないこと
Docker for Mac requirements
https://docs.docker.com/engine/installation/mac/#/docker-for-mac
その他DAMP側ではデフォルトで特定のポート番号を利用します。それらが競合すると動きません。
- 53/tcp,udp
- 80/tcp
- 3306/tcp
80, 3306についてはdocker-compose.ymlで変更可能です。
さらにその他
雑感
中身についてはなんの事は無く、DockerにApache httpd, MariaDB, dnsmasqを載せただけのものです。
MAMPやVagrantの配布されているイメージと大差ありません。
でもそれらの導入もやってみるとなかなか難しかったりして、もっと便利に使ってもらいたいな、という思いがありました。
またApacheのVirtualDocumentRoot
とdnsmasqを組み合わせた環境が非常に便利だなと思っていました。
周囲の開発者の人には環境を構築したりしていたのですが、もっと簡単にできないかな、ということをずっと考えていました。
最近になってDockerがMacでインストールできるようになり(知らなかった…)、VirtualBox経由ではなくなったためにセットアップが楽になったので「これ面白そう!」と思って作りました。
補注
文章を平易にするためにMySQLとMariaDB、ApacheとApache httpdなどが厳密ではありません。
修正箇所
「こここうした方がイイよ」といった修正箇所がありましたらプルリクエストをお願いします。(とくにセキュリティ系)
DAMP: https://github.com/yousan/damp
Dockerfile: https://github.com/yousan/damp_dockerfile
DAMPという名前について
まぁそうなるよね… (カブり的な意味で
https://www.google.co.jp/search?q=DAMP+docker+apache+mysql+php&hl=en