こんにちは皆さん
dockercon やばかったですね
docker swarm モードの導入が個人的に一番衝撃的でした。
kubernetesみたいな外部ツール使わなければならなかったことが、docker engineでできてしまうという便利感がやばすぎです
そんなわけで、最近Docker使った開発に染まりきってきたところで、Dockerを使用したLaravel開発環境があるというので、早速導入してみたわけです。
Laravel
最近やたらと人気の出てきたフレームワークです。
私はcodeigniterとかphalconとかは使っていたのですが、あまりlaravelを業務で使うことはありませんでした。
しかし、composerやオートローダを使用した自由な開発ができるフレームワークだし、人気もあるのでさわってみたいなぁとは思っていたのです。
Homestead?
Homesteadはlaravel開発用の公式なvagrant用のboxです。
php, php-fpm, nginxの標準的なWEBアプリのセットだけでなく、mysql, mariaDB, mongoDBのようなDBから、redisのようなキャッシュ、nodejsまで兼ね備えた、All in Oneの仮想マシンです。
おそらく開発をするだけなら、なんの文句も出ない素晴らしい開発環境なのですが。。。実運用を考えてみた時、おそらくこんなに多機能なサーバを用意することはまず無いです。
AWSやgcpといったモダンなクラウドサービスを使っているのであれば、WEBサーバはWEBサーバの機能だけを持ち、DBもキャッシュもそれ専用のマシンを用意するのが定石です。
つまり、クラウドでの運用環境と開発環境との間に大きな差異が生まれてしまうということです。
この問題は意外に深刻で、開発環境での検証にそれほど信頼性が持てないということになり、「開発環境とは何だったのか」状態になっていました。
Laradock!!
LaradockはこのHomesteadが抱える問題を解決するために、登場したようです。
LaradockはHomesteadの持っていた機能を、役割ごとに細かく分割し、本番での運用状況に近づけることができます。
今回は、こいつを使ってLaravelの開発環境を構築してしまいましょう
Laradockを準備する
動作環境
本検証はMac OS X 10.11.15 でdocker toolboxを使用しています
docker toolboxにはdocker と docker-composeが同梱されていますので、以降はこれらがあることを前提に述べていきま
コードを入手する
homesteadはboxイメージまるごとですが、laradockはいくつかのDockerfileとcomposeの設定ファイルだけです。
なので、取得だけなら以下のように瞬時に終わります
mkdir laraveltest
cd laraveltest
git clone https://github.com/LaraDock/laradock.git
cd laradock
では、laradockディレクトリに入って早速使ってみましょう
workspaceの起動
laravelのプロジェクトを始めるためにはなにはともあれ初期設定などをこなす必要があります
laravelでの開発を行うためにはどうしてもcomposerやnodeなどのツール類が必要になってきますが、これら必要なツールを一式用意してくれるコンテナイメージがworkspaceです。
早速workspaceを立ち上げてみましょう
docker-compose up -d workspace
初回起動は非常に時間がかかります
既存のイメージを使用しているわけではなく、その場でDockerfileを使用して生成しているからです
一回作ってしまえば、次からの立ち上げは直ぐなので、我慢しましょう
立ち上がったら、まずコンテナ名を取得します
$ docker-compose ps
WARNING: The INSTALL_PRESTISSIMO variable is not set. Defaulting to a blank string.
Name Command State Ports
-------------------------------------------------------
laradock_application_1 true Exit 0
laradock_workspace_1 /sbin/my_init Up
現在立ち上がっているコンテナはlaradock_workspace_1
であることがわかるので、
$ docker exec -it laradock_workspace_1 /bin/bash
これでworkspaceに入れます
workspaceが共有しているディレクトリはdocker-compose.yml
を見ればわかります
### Laravel Application Code Container ######################
application:
build: ./application
volumes:
- ../:/var/www/laravel
(中略)
### Workspace Utilities Container ###########################
workspace:
build:
context: ./workspace
args:
INSTALL_PRESTISSIMO: ${INSTALL_PRESTISSIMO}
volumes_from:
- application
tty: true
これによると、laradockのルートディレクトリの直上のディレクトリが/workspaceの/var/www/laravelとリンクしているようです
気を取り直してworkspace上でlaravelプロジェクトを立ち上げてみましょう
workspaceコンテナ上には、既にcomposerが搭載されているので、/var/www/laravel で
composer create-project laravel/laravel testapp
これで、laravelのプロジェクトスケルトンが生成されます
動作を確認してみる
とりあえず、スケルトンの状態で動かしてみましょう
workspace上ではこんな感じのディレクトリ構成になっています
$ ls /var/www/laravel
laradock testapp
testappが先ほど作ったlaravelプロジェクトのスケルトンになります
次に、とりあえずの動作確認をしてみましょう
$ exit # workspaceから出る
$ docker-compose stop # 今動いているworkspaceを止める
$ ls ../
laradock testapp
こんな感じでホストPCにもtestappができているので、アプリケーションのデータボリュームを変更します
# docker-composer.yml
### Laravel Application Code Container ######################
application:
build: ./application
volumes:
- - ../:/var/www/laravel
+ - ../testapp:/var/www/laravel
### Databases Data Container ################################
次にwebアプリを起動します
webアプリだけであれば、php-fpmとnginxを起動するだけでよいでしょう
$ docker-compose up -d php-fpm nginx
。。。初回はやはりdocker buildがはしるので、ちょっと我慢して待ちましょう
起動完了したら、ブラウザで192.168.99.100にアクセスしてみます
とりあえず、起動まで確認できました
まとめ
単純にdocker好きなんで、laravel開発するのもdockerでやりたいなぁとか思っていたのですが、作業環境の容易に結構気を使う必要があったので、このlaradockの存在は有りがたかったです
docker-composeの設定のやり方とか、開発自体以外でも参考になる所も多いので、いいもん見つけたなぁ、ってな感じでした