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で確認してみましょう。
下図のようにLarabelのスタートページが表示されればOKです。
Docker for WindowsはMacとくらべてちょっと設定をしないといけないので忘れるとはまってしまう可能性がありますので気をつけましょう。