DockerでLaravelの開発環境を速攻で作る

概要

Dockerにて、Laravel開発用ツールが1イメージに詰まったlaraedit-dockerイメージをpullして、速攻でLaravelの開発環境を作る。docker-composerは使わず、最短手順で構築する。

前提

ホストOSは以下の通り

CentOS 6.9
docker 1.7.1

構築するイメージ(Laravel開発環境)は以下の通り

php 7.0.1
Laravel 5.5.23
mySQL 14.14
nginx 1.10.1
node 5.12.0
npm 3.8.6

また、DockerがインストールされたCentOSを用意できていること

laraedit-dockerとは

laraedit-dockerはLaravelのHomeSteadと同じようなことをDockerで出来るようにしたDockerイメージ

HomeSteadとは

HomeSteadは、Laravelの開発環境(PHP/MySQL/Nginx/Node…)をオールインワンパッケージとしたVagrantのbox。DockerじゃなくてVagrantでLaravelの開発環境を構築した場合は普通にこちらを使う。

何故Dockerを使うのか

VagrantのHomeSteadはLaravel本家から出ているので安心感もあるし、関連情報も多い。
が、本記事では以下の理由からDockerを採用する

  • 起動/停止が高速
  • 複数の環境を容易に立ち上げ、使い捨てられる
  • 容量をあまり食わない

Dockerイメージを取得

早速Dockerイメージを取得しよう。以下のコマンドだけでイメージは取得できる。

$ docker pull laraedit/laraedit

Dockerコンテナの作成

Laravel開発環境となるコンテナを立ち会が得る

$ docker run -p 8000:80 --name myapp -v /path/to/your/app:/var/www/html/app laraedit/laraedit

何となく80番は本番以外で使いたくないので8000番を80番にポートフォワーディング。
ホストの/path/to/your/appを/var/www/html/appに共有ディレクトリ設定することで、GUIで作業する際に捗る。vimmerの方は不要。
コンテナを識別しやすいようにmyappと名前をつける。

Laravelのインストール

まずは作成したコンテナにbashでアクセスする。

$ docker exec -it myapp bash
root@b780875cb411:/$

デフォルトだと、/var/www/html/appがアプリケーションディレクトリになるので、本記事ではデフォルトのまま、ここを使用する。変更する場合はnginxの設定も弄る必要があるので注意。

root@b780875cb411:~$ cd /var/www/html/
root@b780875cb411:/var/www/html/$

composerも既にインストール済みなので、laravelのプロジェクトを作る。appディレクトリを上書きしてほしいのでプロジェクト名をappにする。何かオプション上手く使えばもっとスマートに出来る気がする。

$ root@b780875cb411:/var/www/html/$ composer create-project --prefer-dist laravel/laravel app
Installing laravel/laravel (v5.5.22)
  - Installing laravel/laravel (v5.5.22)
    Downloading: 100%
(以下略)

appディレクトリにLaravelの構成ファイルが配置される。
忘れがちだけどenvファイルを生成してAppキーもセットする。

root@b780875cb411:/var/www/html$ cd app
root@b780875cb411:/var/www/html/app$ cp .env.example .env
root@b780875cb411:/var/www/html/app$ php artisan key:generate
Application key [base64:cPt6tNOTSaqakthBXTtra0sZTIXPFZ9DRoMdKIX0934=] set successfully.

動作確認

Dockerのホストがlocalhostの場合、localhost:8000にアクセスすると

やったぜ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です