Hello, I am Kosuke.

Docker (Laradock) を使って Laravel の開発環境を構築する方法

どうも、こうすけ(@kosuke_upd)です。

今回は、PHPフレームワーク「Laravel」の開発環境を、Docker(Laradock)を用いて構築する方法を解説します。

Laradockとは

Laradockとは、DockerでLaravelの開発環境を簡単に構築できるDockerイメージです。プロジェクトに合わせて、PHPのバージョンやWEBサーバやデータベースなどの切り替えも簡単に行えます。

Laradock 公式

では、Dockerを用いたLaravelの開発環境構築手順を解説していくので、順番に見ていきましょう。

実施環境
  • macOS 10.14 Mojave
  • Docker for Mac Version 18.06.1

手順1. Docker for Mac をインストール

まずは、Docker for Macをダウンロードし、インストールしましょう。

Docker for Mac ダウンロードページ

補足

Docker for Macの詳しいインストール方法はこちらで説明しているので、もしやり方がわからない場合は参考にしてみてください。

DockerをMacにインストールする方法

手順2. Laradockのclone

まずは、Laradockをcloneするのですが、その前に任意のプロジェクト用ディレクトリを作成しましょう。

ターミナルで下記コマンドを実行し、任意のプロジェクト用ディレクトリを作成し、そのディレクトリに移動しましょう。

$ mkdir MyProject
$ cd MyProject

プロジェクト用ディレクトリに移動したら、下記コマンドを実行してLaradockをcloneしましょう。

$ git clone https://github.com/Laradock/laradock.git

手順3. 環境設定ファイルの作成

Laradockのcloneが完了すると、プロジェクト用ディレクトリ配下に「laradock」というディレクトリが作成されています。

「laradock」ディレクトリ内に環境設定サンプルファイル「env-example」ファイルがあるので、下記コマンドを実行して「laradock」ディレクトリに移動し、「laradock」ディレクトリ内の「env-example」ファイルを「.env」という名前でコピーし、環境設定ファイルとしましょう。

$ cd laradock
$ cp env-example .env

手順4. コンテナを起動

では、下記コマンドを実行してコンテナを起動しましょう。※初回はimageを落としてきたりするのでかなり時間がかかります。

$ docker-compose up -d nginx mysql phpmyadmin redis workspace

コンテナを起動したら、下記コマンドでコンテナのステータスを確認できます。

$ docker-compose ps

ステータスはこのように表示されると思います。

           Name                          Command               State                    Ports                  
---------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1   dockerd-entrypoint.sh            Up      2375/tcp                                
laradock_mysql_1              docker-entrypoint.sh mysqld      Up      0.0.0.0:3306->3306/tcp, 33060/tcp       
laradock_nginx_1              nginx                            Up      0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
laradock_php-fpm_1            docker-php-entrypoint php-fpm    Up      9000/tcp                                
laradock_phpmyadmin_1         /run.sh supervisord -n           Up      0.0.0.0:8080->80/tcp, 9000/tcp          
laradock_redis_1              docker-entrypoint.sh redis ...   Up      0.0.0.0:6379->6379/tcp                  
laradock_workspace_1          /sbin/my_init                    Up      0.0.0.0:2222->22/tcp

手順5. 「.env」ファイルに情報を追加

「laradock」ディレクトリ配下にある「.env」を開き、下記の情報を追加して保存しましょう。

.env
DB_HOST=mysql
REDIS_HOST=redis
QUEUE_HOST=beanstalkd
補足

MacのFinderから「.env」ファイルを開きたい場合、デフォルトではファイル名が「.(ドット)」から始まるファイルはFinder上に表示されないため、「⌘(command) + ⇧(shift) + .(ドット)」で「.(ドット)」から始まるファイルを表示させてから開きましょう。

「.(ドット)」から始まるファイルを非表示に戻す場合は、再度「⌘(command) + ⇧(shift) + .(ドット)」で戻すことができます。


公式では、「これで完了したので「http://localhost」にアクセスしよう。」と記載されています。

しかし、この時点で開いてもまだ404ページが開かれてしまいます。

まだ少し必要な作業が残っているので、引き続き見ていきましょう。

手順6. Laravel プロジェクトの作成

Laravelプロジェクトを作成するために、まずは下記コマンドを実行してworkspaceコンテナに入ります。

$ docker-compose exec --user=laradock workspace bash
注意

composerrootユーザーで実行すると警告が表示されてしまうため、--userオプションをlaradockと指定してログインしています。

すると、カレントディレクトリが「/var/www」になっているはずなので、下記コマンドを実行してLaravelプロジェクトを作成しましょう。

下記コマンドの「test-app」はプロジェクト名なので、自由に変更して構いません。

# composer create-project laravel/laravel test-app

Laravelプロジェクトの作成が完了したら、下記コマンドを実行して一旦コンテナから抜けます。

# exit

手順7. アプリケーションのパスを変更

デフォルトの環境設定ファイル「.env」では、アプリケーションのパスが../となっています。

.env(デフォルト)
APP_CODE_PATH_HOST=../

先程「test-app」という名前のプロジェクトを作成したため、アプリケーションのパスを../test-appと変更して保存しましょう。

.env(変更後)
APP_CODE_PATH_HOST=../test-app

手順8. 再度コンテナを起動

では、下記コマンドを実行して再度コンテナを起動させましょう。

$ docker-compose up -d nginx mysql phpmyadmin redis workspace

手順9. 構成の確認

以上の手順で作業していくと、下記のようなディレクトリ構成になっているはずなので確認してみてください。

ディレクトリ構成
./MyProject
├── laradock
└── test-app

手順10. ブラウザで確認

では、ブラウザで「http://localhost」にアクセスしてみましょう。

Laravelの初期画面が表示されたら成功です。

また、「http://localhost:8080」にアクセスすると、phpMyAdminを開くことができます。

最後に

今回は、Docker(Laradock)を用いたLaravelの開発環境構築方法を解説しました。実際にやってみるとわかりますが、あっという間に完成してしまいます。

また、Laradockで複数のLaravel開発環境を構築し、管理する場合は、こちらの記事で紹介している方法を使用したほうが汎用性の高い環境を構築できます。こちらも合わせて見ていきましょう。

Laradock で複数の Laravel 開発環境を構築し管理する方法

コメントを残す

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