LaradockをWindows 10 Homeにインストール

  • URLをコピーしました!
侍エンジニア塾でLaravelの開発環境をローカルに作るという事になりました。 それでLaradockを構築していきます。 LaradockのインストールのためにはまずはDockerというのが必要です。 Docker for Windows → Windows 10 Pro Docker Toolbox → Windows 10 Home ということで、Windows 10 Homeを使ってる私はDocker Toolboxを最初インストールすることにしました。 Dockerの会員登録とかは前回の記事に書いております。 今回はDocker Toolboxでブラウザ表示、またLaradockのインストールや設定やらがメインです。 あれこれPCを弄りまわしたせいでゴミファイルが沢山できてしまったりして大変なことに。。 約6日かかってようやくLaradockのトップページが表示されたので、そこまでのメモを残しています。
目次

いったん全部削除

何度もインストールをやり直ししています。 ゴミファイルや残骸が残ってるとうまくいかないと思うので、いったん現時点でインストール済のものを削除しておきます。 コントロールパネルから Oracle VM VirtualBox Docker Toolbox Git これらをアンインストールして再起動しました。 以前インストール作業をしたときに作ったフォルダも削除 途中でVBoxHeadless.exeによってファイルは開かれているため操作を完了できません。 とか出てきたらタスクマネージャからこのプログラムを終了させてから、フォルダを削除。 あとはC:\Usersの配下に作成された隠しフォルダも削除。 C:\Users\muku\ .docker .laradock .VirtualBox を削除 ここでPCを再起動して、ここからインストール作業を開始します。

Docker Toolboxのインストール

LaradockをWindows 10 Homeにインストールの本文画像 1
Docker Toolboxをダウンロードしてインストールする Docker Quickstart Terminal、Kitematic(Alpha)、Oracle VM VirtualBoxのアイコンが出る Docker Quickstart Terminalを起動する ちょっと時間がかかるがくじらが出たらOK。 これでVirtualMachineの設定も同時にやってくれる様子。 画面を見れば自分のIPが192.168.99.100になってるのがわかる。 作業用ディレクトリを作成する C:\dockerWorkspace 場所はどこでもいいので今回はC直下に作成した。このフォルダをDockerで使うために共有の設定が必要になる。 c\Users以下ならデフォルトで共有されるので設定不要で早いかもしれない。 Oracle VM VirtualBoxで共有の設定をする 設定ボタン→共有フォルダー→画面右端の+ボタン パス:C:\dockerWorkspace フォルダ名:c/dockerWorkspace 自動マウントと永続化するにチェックを入れる Docker Quickstart Terminalでの設定 docker-machine ssh でdockerに接続 以下の2コマンドを入力。
echo 'sudo mkdir -p /c/dockerWorkspace' |sudo tee -a /var/lib/boot2docker/profile
echo 'sudo mount -t vboxsf -o uid=0,gid=0 c/dockerWorkspace /c/dockerWorkspace' |sudo tee -a /var/lib/boot2docker/profile
と入力。 dockerからexitで抜けて、 dockerを再起動 docker-machine restart これでC:\dockerWorkspaceが共有ディレクトリとして設定される。

Laradockをインストール(クローン)する

Docker Quickstart Terminalを起動して cd /c/dockerWorkspace に移動。 Laradockをクローンする。 git clone -b LaraDock-ToolBox https://github.com/LaraDock/laradock.git これで laradockフォルダが生成される。 Docker for Windows(Windows 10 Pro用のやつ)ならこっちのコマンドだけど、 git clone https://github.com/Laradock/laradock.git Windows 10 Home用のDocker Toolboxの場合はブランチの方を使うらしい。 クローンして出来たlaradockフォルダの中に.envファイルを作っていきます。 laradockフォルダに入る。 cd laradock .envファイルをコピーして生成。 cp env-example .env docker-machine restart でリスタートすること。(リスタートがどのタイミングで必要かは実はわかっていない、envとか設定関連をいじったらリスタートしようと思う) 公式サイトにならってコンテナを起動 docker-compose up -d nginx mysql phpmyadmin redis workspace ここは結構時間がかかる。 こんなエラーが出ることがある。 ERROR: The Compose file ‘.\docker-compose.yml’ is invalid because: これはlaradock直下に.envが無いことが原因。上のように.envファイルをコピーして生成しておくことを忘れない。 こんなエラーもある。
ERROR: Can’t find a suitable configuration file in this directory or any parent. Are you in the right directory? Supported filenames: docker-compose.yml, docker-compose.yaml
ちゃんとlaradockへcdで移動してからコマンドを入力すること。 おかしいなと思ったらDocker Quickstart Terminalを再起動したりdocker-machine restartしてからやる。 Terminalを閉じてまた起動しただけでは、中身のコンテナとか再起動しないっぽい。 実行中のコンテナを確認 $ docker ps 以下のような結果が出るはず。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9b6ee908ef6b laradock_nginx “nginx” About a minute ago Up About a minute 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp laradock_nginx_1 7818f673dd5c laradock_php-fpm “php-fpm” About a minute ago Up About a minute 9000/tcp laradock_php-fpm_1 b445e4232478 laradock_phpmyadmin “/run.sh supervisord…” About a minute ago Up About a minute 9000/tcp, 0.0.0.0:88->80/tcp laradock_phpmyadmin_1 2b4e2d739e50 laradock_workspace “/sbin/my_init” About a minute ago Up About a minute 0.0.0.0:2222->22/tcp laradock_workspace_1 f8c6af168158 laradock_redis “docker-entrypoint.s…” About a minute ago Up About a minute 0.0.0.0:6379->6379/tcp laradock_redis_1
見にくいので画像で。(クリック拡大) 色々出てくるはず。出てこないとしたらimagesのダウンロードやコンテナの生成に失敗している。 出てこなかったら docker images と打ち込んでみよう。結果が何もなければ前述の.envコピーをやっていない可能性がある。 IMAGEがlaradock_nginxというのがあれば、これがWEBサーバー。STATUSがUpになっていればWEBサーバーが起動してるということなので 念のためローカルPCを調べる docker-machine ip これで出てきたIPアドレスにブラウザでhttp://192.168.99.100/にアクセスしてみる。 コンテンツが無いので404のエラーが返るはず。これでnginxのWEBサーバーは起動してることが確認できた。 404が返らない(接続できませんとか)ならWEBサーバーが起動していない状態。 laradock_nginxのSTATUSがExit(2)とかになってたら起動できていない。 【補足】 手順を見直したり docker-machine restartして docker-compose up -d nginx mysql phpmyadmin redis workspace をやってみるとよいかも。 コンテナの起動は docker start CONTAINER ID か NAME で起動することができる。 例)docker start 9b6ee908ef6b コンテナの停止は docker stop CONTAINER ID か NAME で停止することができる。 例)docker stop 9b6ee908ef6b さて、nginxの設定ファイルを開いてみる。 C:\dockerWorkspace\laradoc\nginx\sites\default.conf
server {

    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    server_name locahost;
    root /var/www/public;
と書かれている。このrootのところがhttp://192.168.99.100/でアクセスしたときのトップページになるので、ここにindex.htmlとかを置けばそれが表示されるはず。 /var/www/というのはどこかというと 作成した作業フォルダ C:\dockerWorkspace\ この中にlaradockをクローンしたので C:\dockerWorkspace\laradock となっているはずだけど。 このdockerWorkspace階層が/var/www/とリンクされている。 なので C:\dockerWorkspace\public というフォルダを作り、この中にindex.htmlでも置けばこれが表示される。 ちなみに C:\dockerWorkspace\laradock\docker-compose.yml を見ると
### Applications Code Container #############################

    applications:
      image: tianon/true
      volumes:
        - ${APPLICATION}:/var/www
と書かれていて、volumesのところがホスト側と仮想側のリンク対応を表している。 APPLICATIONというのは C:\dockerWorkspace\laradock\.env に記載がある。
### Application
# Point to your application code, wish should be available at `/var/www`
APPLICATION=../
APPLICATION=のところが../と書かれているので.envの上の階層(つまりdockerWorkspace)=/var/www/としていることがわかる。 とりあえずここまででnginxが動いている事が確認できればOK。

Laravelプロジェクトの作成

LaradockをWindows 10 Homeにインストールの本文画像 2
実行中のコンテナにログイン(アタッチ)する。 ログインするコンテナはdocker psで調べたlaradock_workspace_1 docker exec -it laradock_workspace_1 /bin/bash -i コンテナの標準入力を開く -t ttyp(端末デバイス)を確保 /bin/bashなどでコンテナを操作する際に指定 こんな結果が出た。
muku@LAPTOP-LRJ8P6CR MINGW64 /c/dockerWorkspace/laradock (LaraDock-ToolBox)
$ docker exec -it laradock_workspace_1 /bin/bash
bash: $'\r': command not found
bash: $'\r': command not found
bash: $'\r': command not found
bash: $'\r': command not found
bash: $'\r': command not found
bash: $'\r': command not found
bash: $'\r': command not found
bash: $'\r': command not found
bash: $'\r': command not found
bash: $'\r': command not found
bash: $'\r': command not found
bash: /home/laradock/aliases.sh: line 61: syntax error near unexpected token `$'{\r''
'ash: /home/laradock/aliases.sh: line 61: `function mkd() {
root@2b4e2d739e50:/var/www#
エラーっぽいのがずらずら出たけどコンテナにログインできたようなプロンプトが出た。。なにこれ? Windowsで シェルを実行した場合、改行コードのせいでエラーが発生する場合がある でもWindowsでファイル編集してないよな・・?これは後で侍エンジニア塾の先生に聞いてみよう‥ ここに対策があった。 https://github.com/laradock/laradock/issues/563 以下コマンドでエラーが出た後、
docker exec -it laradock_workspace_1 /bin/bash
そのまま引き続き以下コマンドを入力してエラーが出ているaliases.shファイルを修正。
sed -i 's/\r//' /home/laradock/aliases.sh
sed -i 's/^#! \/bin\/sh/#! \/bin\/bash/' /home/laradock/aliases.sh
これでエラーがでなくなった。 コンポーザーを使ってLaravelプロジェクトを生成
composer create-project laravel/laravel laraveltest --prefer-dist
Do not run Composer as root/super user!って出た。 root/superユーザーで実行するなと怒られるが、処理は進む。 たぶん本来は–userを付けるのだと思う。やり方はわからないからこのまま進む。 Laravelプロジェクト配下に.envをコピーして作成 ls -aでlaraveltest配下の隠しファイル含めてリストを確認。 cp .env.example .env で.envファイルをコピーして作成。 公式サイトに従い.envの中身を編集。編集はWindowsのエディタでやった。文字コードUTF8、改行コードLFで保存するのを忘れない。 DB_HOST=127.0.0.1 REDIS_HOST=127.0.0.1 ↓ DB_HOST=mysql REDIS_HOST=redis QUEUE_HOST=beanstalkd

トップページでLaravelプロジェクトのpubilc配下を表示させる設定

今のところローカルホストにブラウザでアクセスすると、先ほどの /var/www/public に入ってるindex.htmlが表示されてしまう。 これを作成したLaravelプロジェクトの中のpublicフォルダに指定を切り替える必要がある。 やり方が3通りあると思う。 ①nginxの設定ファイル編集 C:\dockerWorkspace\laradoc\nginx\sites\default.conf
server {

    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    server_name locahost;
    root /var/www/public;
rootのところを作成したLaravelプロジェクトのpublicに指定。 root /var/www/laraveltest/public; ②もしくは C:\dockerWorkspace\laradock\docker-compose.yml の
### Applications Code Container #############################

    applications:
      image: tianon/true
      volumes:
        - ${APPLICATION}:/var/www
を編集してもよいのかも。 ${APPLICATION}のところをlaraveltest直打ちに変更。 ③それか C:\dockerWorkspace\laradock\.env の以下の部分を編集か。
APPLICATION=../
APPLICATION=../laraveltest
ていうかこれがいいんじゃないかと思う。 編集したら保存して終了。 laradockフォルダに移動して docker-machine restart で再起動。 docker-compose up -d nginx mysql phpmyadmin redis workspace でコンテナ立ち上げ。 (再起動は要らないかもしれない) これでブラウザでアクセスしてLaravelのトップページが表示されればOKだけど、自分はエラーが出た。 【補足】 ブラウザアクセスしたときに
Whoops, looks like something went wrong.
みたいなエラーが出たら、DEBUGモードをONにすると詳細なエラーがわかる。 C:\dockerWorkspace\laraveltest/config/app.php を開いて以下のように編集。
    'debug' => env('APP_DEBUG', true),
envの第2引数をtrueにする。 これでエラー詳細が出たりする。自分の場合は以下のエラーが出てた。 No application encryption key has been specified. ということで人によってはこのエラーに従って、KEYを生成する必要がある。 KEYはcomposerによって自動生成してくれる場合もある様子。だけど私の場合は自作しなければいけなかった。

LaravelプロジェクトにKEYを設定

LaradockをWindows 10 Homeにインストールの本文画像 3
ワークスペースコンテナにログインして docker exec -it laradock_workspace_1 /bin/bash これでログインすると、ログイン直後の位置が C:\dockerWorkspace\laradock\.env のAPPLICATION=で設定したフォルダになってることがわかる。 つまりプロジェクトのルートディレクトリにて、 以下のキー生成コマンドを入力(.envファイル編集中なら閉じておこう) php artisan key:generate これで Application key [base64:hogehogehogehogehogeho] set successfully. みたいに出ればOk。 結果 これでキーが生成された。 さらに.envファイルを試しに開いてみてにAPP_KEY=base64:なんちゃら というのが出来てることもわかる。 AWSのCloud9環境を使ってcomposerでLaravelをインストールしてたときはKEYなんて生成したことないんだけど。 composerのバージョンが古いのかなぁ? これでブラウザでhttp://192.168.99.100/にアクセスすると、Laravelのトップページが表示された!! 苦節5人日かけてようやくたどり着きました。。(´・ω・`)
参考文献 Laradock公式 http://laradock.io/ Laradockをwindows10で使う https://qiita.com/ProjectEuropa/items/29ced68928374e52544d


目次