Docker for Windowsを使ってさくっとPHP + Laravel5の環境を構築

Windows環境でDockerを使ってLaravel環境を構築する方法を紹介します。
Macの場合はこちらをご覧ください。

Windows環境にDockerを導入

まずWindowsにDocker環境を導入するのですが、前提としてWindowsのバージョンによってインストールできるものが変わってきます。
Windows 10ならDocker for Windows、それ以外のWindowsならDocker toolboxになります。
今回はWindows 10環境なのでDocker for Windowsをインストールします。

条件 インストールできるDockerソフトウェア
Windows 10 Pro、Enterprise、EducationでHyper-Vパッケージを有効にしている Docker for Mac
上記以外 Docker toolbox

下記のURLにアクセスしてDocker for Windowsをダウンロードします。

https://docs.docker.com/docker-for-windows/

ダウンロードしたものを実行してインストールしましょう。

Hyper-V feature is not enabled.のエラーが出る場合はHyper-Vが有効になっていない場合ですのでYesを押して有効にしましょう。PCが一度再起動します。

無事インストールされたら下記の画面が表示されます。Got it!をクリックして閉じましょう。

共有フォルダ設定

私はここで結構時間かかりました。Windowsの場合はローカルとコンテナのデータを共有する場合にはShared Drivesの設定が必要です。
画面右下のDockerアイコンを右クリックしてSettings...をクリックします。

Shared Drivesを選択してCの箇所のチェックボックスをチェックしてApplyボタンをクリックします。

あと、ここも大事なのですがShared Drivesの設定を変更した際はDockerを再起動しないといけません。
Resetの箇所のRestart Docker...をクリックしてDockerを再起動してください。

これでDockerコンテナ内のvolumeとローカルのディレクトリが共有できるようになりました。

Laradocの導入

Dockerを使ってLaravel環境を構築するならLaradockがとても便利です。Laravel環境を構築するための下記の環境がdocker-composeを使ってコマンド一発で構築できます。

  • Nginx
  • PHP(7.0, 5.6, 5.5に切り替え可能)
  • Memcached、HHVM、Beanstalkd、PHP-FPM
  • composer
  • MySQL(Postgres, MariaDBに変更可能)
  • Redis
  • Laravel

それでは任意のLaravelのワークフォルダを作成してそこにターミナルで移動し、Laradocのソース一式をGithubでダウンロードします。

とりあえずマイドキュメントに移動してプロジェクトを作ってみます。

コマンドプロンプトで実行

cd Documents
mkdir laravelwork
cd laravelwork
git clone https://github.com/LaraDock/laradock.git
cd laradock

Laradocワークスペースの起動

まずはワークスペース(workspace)のコンテナを起動します。このworkspaceはcomposerやnodeのツールを用意しているコンテナになります。workspaceを起動してLaravelプロジェクトを作成しておきます。

ターミナルで実行

docker-compose up -d workspace

コンテナが起動したらdocker-compose psコマンドで起動したworkspaceのコンテナ名を取得します。

コマンドプロンプトで実行

$ 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

workspaceのコンテナ名がlaradock_workspace_1である事がわかったので、そのコンテナ名を指定してbashでログインします。

コマンドプロンプトで実行

docker exec -it laradock_workspace_1 /bin/bash

workspaceのコンテナは/var/www/public内のファイルがnginxのドキュメントルートになっています。なので、そこに移動してcomposerでLaravelプロジェクトを作成します。

コマンドプロンプトで実行

midir /var/www/public
cd /var/www/public
composer create-project laravel/laravel laraveltest --prefer-dist

Laravelプロジェクトは作成に多少時間がかかりますので気長に待ちましょう。
作成が完了したらexitでコンテナからログアウトしましょう。

次に作成したLaravelプロジェクトをワークスペースのルートに変更しておきます。
これでLarabelプロジェクトフォルダがドキュメントルートになり動作確認できるようになります。

docker-composer.yml

### Laravel Application Code Container ######################
volumes_source:
image: tianon/true
volumes:
//////////////// ▼▼ 修正 ▼▼ ////////////////
- ../laraveltest:/var/www/public/laraveltest
//////////////// ▲▲ 修正 ▲▲ ////////////////

また、nginxのポートもデフォルトで80になっているので、バッティングしないように任意にポートを変更しておきましょう。

docker-composer.yml

### Nginx Server Container ##################################
nginx:
build:
context: ./nginx
args:
- PHP_UPSTREAM=php-fpm
volumes_from:
- volumes_source
volumes:
- ./logs/nginx/:/var/log/nginx
ports:
//////////////// ▼▼ 修正 ▼▼ ////////////////
- "8080:80" # 8080ポートでアクセスするよう変更
//////////////// ▲▲ 修正 ▲▲ ////////////////
- "443:443"
links:
- php-fpm

次にWebサーバであるNginxとphp-fpm、Mysqlのコンテナを起動しましょう。

ターミナルで実行

docker-compose up -d php-fpm nginx mysql

初回のコンテナ起動はコンテナイメージをダウンロードしてくるので少々時間がかかります。
しかし、一度コンテナイメージをダウンロードしたら起動がとても早いです。
Vagrantとは比べ物にならないと思います。

これでLarabelがブラウザで起動していると思います。下記URLで確認してみましょう。

http://localhost:8080/public

下図のようにLarabelのスタートページが表示されればOKです。

Docker for WindowsはMacとくらべてちょっと設定をしないといけないので忘れるとはまってしまう可能性がありますので気をつけましょう。