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

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/

c2250f7c232106b0c14f70b80cf81563

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

8d9a452ad579f1384b3e72bfa338a499

19825923fdd0ff5055ce5c602ed35679

62cf09b9aae985ed3c11c29ab226808f

3476cf0ebfbc897ef0c48a159585d29b

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

ef2bf8cc201e0eebeea0c191b39021f9

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

b39f29e31bfcccb5f4d5ec4cbd16af49

共有フォルダ設定

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

328924bd1eaca634d88b09e7e4c98426

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

326f7536425e517ce4613e547e1b56cf

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

bc46c987338a6a85943b41b0eaf5b842

これで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

39433d30590442c769187132de829867

コンテナが起動したら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でコンテナからログアウトしましょう。

c61202d8acd80e0c0e62862af17398f0

次に作成した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です。

2cb4e293c20253c8d24bccaac3dafca6

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