dinghyでPHP-FPM環境をDocker上に構築してみたdinghyでPHP-FPM環境をDocker上に構築してみたsuin2016年7月24日Dockerを開発に取り入れる場面が増えてきていると感じますが、それでもmacOS上に開発環境をDockerで作るとなると、Linux仮想マシンを自作したり、コンテナの名前解決のためにDNSサーバを立てたり、macOSとコンテナの間でファイル共有の仕組みを工夫したりと、導入までの準備が少なくありません。した問題を一挙に解決してくれるのがdinghyです。dinghyはdocker-machineをラップする方法で、macOS向けに開発環境をDockerで素早く構築することを目的としたオープンソースプロダクトで、docker-machineには無かった次の機能を提供してくれます。macOS側とコンテナ側のファイルを双方向に同期する。VmwareやVirtualBoxのファイル共有より高速。ファイル更新を検知して動作するプログラム、例えば、webpackやglupが問題なく動く。macOS側にDNSを立ててくれ、名前.dockerでDockerホストにアクセスできる。Nginxベースのリバースプロキシを内部で使っていて、バーチャルホストやSSL(オレオレ証明書だが)も簡単に実現できるdinghyのインストールと起動dinghyが依存するパッケージをインストールします。docker-machine次にdinghyをインストールします。dinghyまた、仮想マシンのハイパーバイザとしては、virtualboxやvmware・xhyve・parallelsが使えますが、ここではvirtualboxを例にするのでvirtualboxもインストールされている必要があります。dinghyで仮想マシンを作成・起動します。APIをmacOSから使えるようにするために、環境変数を読み込みます。env)PHP-FPM環境をdinghyを使って実現する今回PHP-FPM化するアプリのファイル構成は次のようになります。htmlディレクトリはドキュメントルートです。nginx-config/default.conはNginxをPHP-FPMのリバースプロキシとして起動するための最低限の設定を記述したファイルです。docker-compose.ymlはnginxやphp-fpmのコンテナの起動方法を記述するファイルです。default.confまず、ドキュメントルートに設置するファイルを作ります。今回は話をシンプルにするために、phpinfo()するだけのファイルと、静的ファイルの例としてstyle.cssの2つのファイルを用意します。*/次に、Nginxの設定ファイルを作ります。PHP-FPMのためのリバースプロキシとしての一般的な設定でOKですが、fastcgi_passの部分はサービス名:ポートを指定するようにします。サービス名は後述するdocker-compose.ymlで自分が定義するものになります。}}最後にdocker-compose.ymlの中身です。Linuxを使いたいと思います。Debianがいい人は、Alpineにしなくても良いです。.:/var/wwwDinghy固有の設定はenvironmentのVIRTUAL_HOSTとVIRTUAL_PORTです1。VIRTUAL_HOSTにはmacOS側からどんなホスト名でアクセスしたいかを決めてその名前にします。ホスト名は.dockerで終わる必要があります。今回はhttp://php-app.dockerでアクセスできるよう、"php-app.docker"をホスト名とします。VIRTUAL_PORTはEXPOSEがひとつしかないDockerコンテナなら特に指定する必要はありませんが、公式のnginxイメージは80と443ポートが開いているので、nginx-proxyに443が代表ポートと誤解されないよう80を宣言します。ここまでできたら、docker-composeでアプリを起動します。-d最後に、http://php-app.dockerするとindex.phpが実行され、http://php-app.docker/style.cssにアクセスするとstyle.cssの中身が表示されるのが分かるかと思います。おわりにmacOS上で簡単にDocker開発環境が構築できるdinghyを使い、PHP-FPM環境を作ってみました。これまでのVagrant等2では面倒だった構築のステップがかなり省力化されたと感じたのではないでしょうか。細かく言うとdinghyが内包するnginx-proxy向けの設定です。nginx-proxyはDockerでバーチャルホストを実現するためのリバースプロキシコンテナです。dinghyとは別にこれ単体で使うことも可能。Macはオープンソースになっておらず、ファイルシステムの共有・DNS・バーチャルホスト名などの情報もまだまだ少ない段階と思います。MacをDinghyの代替手段として検討する話題も上がっていますが、結論は今日現在出ておりません。Macが決定版になるまではdinghyを使うほうが良いのではと考えております。1.5suintwitter2016年7月24日dinghyのインストールと起動PHP-FPM環境をdinghyを使って実現するおわりに。