Laravel使った開発にLaradockを使うというのはどうだろう

  • 91
    Like
  • 4
    Comment
More than 1 year has passed since last update.

こんにちは皆さん

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を見ればわかります

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にアクセスしてみます

スクリーンショット 2016-06-30 9.08.55.png

とりあえず、起動まで確認できました

まとめ

単純にdocker好きなんで、laravel開発するのもdockerでやりたいなぁとか思っていたのですが、作業環境の容易に結構気を使う必要があったので、このlaradockの存在は有りがたかったです
docker-composeの設定のやり方とか、開発自体以外でも参考になる所も多いので、いいもん見つけたなぁ、ってな感じでした

参考

公式