Laravel環境を3分で構築する【ついでにDocker入門】

うわあああああ！Laravelが使いたいよおおおお！
だけどサーバー構築面倒くさいよおおおお！！！！

生きてるとそんなときもありますよね。
大丈夫、3分あればできます。

実はもう別の方がQiitaに投稿されているのですが、Docker入門にもちょうどいいので少しだけ多めに解説した記事になります。
[Docker で Laravel 環境 を ３分くらいで作る](https://qiita.com/pinevillage/items/57f63f9242cf00d103cb)

# 対象読者
- Dockerなんて(ほとんど)わかんない人
- でもとにかく一刻も早くLaravelを使いたい人

# 上記記事より

> これだけです。

> DBMSは MariaDB となっているようです。

https://github.com/bitnami/bitnami-docker-laravel

```
$ mkdir ~/myapp && cd ~/myapp
$ curl -LO https://raw.githubusercontent.com/bitnami/bitnami-docker-laravel/master/docker-compose.yml
$ docker-compose up
```

# 解説するよ
何をしているのかを堅苦しくいうと、
**「WordPressのローカル構築用ソフトを開発しているBitnamiが公式に提供しているDockerイメージをdocker-composeで一気に準備して起動している」**
といったところでしょうか。

素晴らしいことに、この3行だけで本当に仮想Docker環境を手元に用意することができてしまいます。
こちらを少しだけ詳細に解説してみましょう。
※Dockerのインストールだけは先に済ませておいてください

1行目はいいですよね。
適当なフォルダを作って移動するだけです。
次にcurlコマンドで**docker-compose.yml**ファイルを入手します。

なんだそれは、と思われた方もいるかもしれません。
中身を見てみましょう。

```docker-compose.yml
version: '2'

services:
  mariadb:
    image: 'bitnami/mariadb:10.1'
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
      - MARIADB_USER=my_user
      - MARIADB_DATABASE=my_database
      - MARIADB_PASSWORD=my_password

  myapp:
    tty: true
    image: bitnami/laravel:5-debian-9
    environment:
      - DB_HOST=mariadb
      - DB_USERNAME=my_user
      - DB_DATABASE=my_database
      - DB_PASSWORD=my_password
    depends_on:
      - mariadb
    ports:
      - 3000:3000
    volumes:
      - ./:/app
    # privileged: true # Privileged mode could be required to run this container under Windows

```
docker-composeは複数のコンテナを一元管理するためのツールです。
詳しくはこちら。
[DockerComposeの基本](https://qiita.com/tfrcm/items/970f6b22e11145478ab1)

簡単に言うと、こちらのymlファイルでは"mariadb" と "myapp" 、それぞれの仮想環境(=Dockerコンテナ)を2つ手元に起動しますよ！ という起点が定義されています。
"mariadb" がDBサーバ、"myapp" がwebサーバ兼APサーバですね。Laravelに触れてるとこの言葉自体もなかなか聞かなくなりますが……

さて、3行目の

```
$ docker-compose up
```
を入力するとお察しの通り念願のDockerコンテナが起動するわけですが、少しお待ちを。
先にこの超便利ツールをインストールしちゃいましょう。
(すでに3分超えてると思いますが、そこは触れないでください)

[DockerとDocker ComposeのTerminal UI「lazydocker」のご紹介](https://qiita.com/ryuichi1208/items/7e6daceecc660f097726)

これはDockerにあまり触れる機会がない方でもパッと使える素晴らしいツールです。

起動したらこんな感じの画面になります。
![スクリーンショット 2019-08-16 20.23.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247157/eb3742e0-cbc1-ca21-60bc-b74ea42e5bdc.png)

さて、この状態で例の

```
$ docker-compose up
```
を実行してみましょう。
実行！

こうなります。
![スクリーンショット 2019-08-16 20.32.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247157/3624d4fb-c598-ab9b-3539-6bbe4ceb3b6f.png)

なんか2つrunningの状態になっていますね。
これが先程docker-compose.ymlファイルで確認した2つのコンテナです。
もうこの状態で2つのサーバがローカルで動いているような状態になっています。

このサーバを停止、再起動したりするのもlazydocker上から簡単にできるので、先の記事を参考にしながらぜひやってみてください。

また、「本当にサーバとして起動している」のを実際に中に入って確認してみたい場合、
```
$ docker exec -it myapp_myapp_1 /bin/bash
```
で入ってみることができます。
この操作もlazydocker上からできるのですが、macで利用する場合上下ボタンが効かなくなるんですよね……

閑話休題。

さて、いよいよ [http://localhost:3000/](http://localhost:3000/) にアクセスしてみましょう。
![スクリーンショット 2019-08-16 20.36.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247157/97e97f5d-c945-cf22-3874-907818021fcd.png)

Hello, Laravel!
簡単ですね。

実際のソースコードは先程作った"myapp"ディレクトリに展開されています。
ローカルのコードを仮想環境が共有して使っているイメージですね。なので、ローカルのコードをちゃちゃっといじればブラウザ側のLaravelの動作に即座に反映されます。

この方法で構築すれば、デバッグも可能です。
こちらの記事で完璧にまとめてくださっているので、ぜひお読みください！
[Dockerで構築したPHP環境をxdebugでデバッグ（vscode）](https://qiita.com/gigosa/items/90431be7a6a79db78480)

今回はこのあたりで。