Laradockを使ってLaravelを動かすまで

## PHPフレームワーク市場

PHPフレームワークは2014年からLaravelへの人気が集まっています。
以前symfonyで開発していたのですが、人気は横ばい。Cake、Zendに関しては下火です。
いつの間にかLaravelの一人勝ち状態です。
![1489651875_image2.png](https://qiita-image-store.s3.amazonaws.com/0/272635/55fd0e44-d0bc-819e-25be-bc8fbf88c1ad.png)

## 仮想化市場

VMwareやVirtualboxの仮想化は広く使われいますが、起動が遅かったりと課題もあります。
Dockerの登場でコンテナ型の仮想化が容易になりました。
ホスト型とコンテナ型の違いはこちらの記事がとてもわかりやすいです。
https://qiita.com/akinko/items/8fb50feb6d60eb975dba
カーネルをホストと共有していてその上に複数のコンテナが動くイメージです。

![docker_eyecatch.png](https://qiita-image-store.s3.amazonaws.com/0/272635/55c0f7d8-3ee6-6f47-14e7-f3ea2903c8e1.png)

[docker導入のメリットをこちらがよく説明してくれています](https://www.publickey1.jp/blog/14/dockerdockerfiledocker_meetup_tokyo_2.html)

## 人気の２つを合わせたLaradock触っとけば間違いない

今回はLaravel+Nginx+phpMyAdminの環境を構築します。

あらかじめ以下をインストールしておく必要があります。

* Docker  
* Git

### windowsの場合

windows for dockerを以下の手順でインストールします。
https://qiita.com/Ogaaaan/items/99fe54f052ca450889f7

## 環境構築

### Laradockインストール

ワークディレクトリ作成し、githubからclone

```
$ mkdir Work
$ cd Work
$ git clone https://github.com/LaraDock/laradock.git
```

コンテナ内のアプリケーションの設定ファイルを作成します。
laradock内のenv-exampleファイルを.envファイルへコピーします。

```
$ cd laradock
$ cp env-example .env
```

# コンテナの環境設定変更

今回は下記のようなフォルダ構成にしたいと思います。

```
フォルダ構成
work
  ┗ laradock
  ┗ develop
```
Laradockディレクトリ配下の.envファイルのAPP_CODE_PATH_HOSTを変更してアプリケーションディレクトリを指定することができます。
APP_CODE_PATH_HOSTを../developに、MYSQLのバージョンをlatestから5.7にデータベス名、User、passwordも変更します。
最新版の8.0系はLaravelのmigrateコマンドでこける可能性あります。

```
$ vi .env

# Point to the path of your applications code on your host
APP_CODE_PATH_HOST=../develop

### MYSQL #################################################

MYSQL_VERSION=5.7
MYSQL_DATABASE=laradock
MYSQL_USER=laradock
MYSQL_PASSWORD=laradock
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=laradock
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d

### PHP MY ADMIN ##########################################

# Accepted values: mariadb - mysql

PMA_DB_ENGINE=mysql

# Credentials/Port:

PMA_USER=laradock
PMA_PASSWORD=laradock
PMA_ROOT_PASSWORD=laradock
PMA_PORT=8080
```

### コンテナ起動

docker-composeコマンドでnginx、mysql、workspace、phpmyadminを起動します。
-dオプションでコンテナがバックグラウンドで起動し実行し続けます。

docker-composeは、複数のコンテナで構成されるアプリケーションについて、Dockerイメージのビルドや各コンテナの起動・停止などをより簡単に行えるようにするツールです。

dockerは1コンテナ＝1プロセスなので、
ホストOSからpsコマンドを叩くとDocker上で動いているプロセスがそのまま確認できます。

```
$ docker-compose up -d nginx mysql workspace phpmyadmin
$ docker-compose ps
```

[その他docker-composeコマンドはこちら](https://qiita.com/wasanx25/items/d47caf37b79e855af95f)

### Laravelプロジェクトの作成

workspace(作業領域)に入ります。
--prefer-distでLaravelのバージョン指定できます。
最新は5.7ですが、今回は5.5を指定します。
プロジェクト作成には少し時間がかかります。

```
$ docker-compose exec --user=laradock workspace bash
laradock@5cf89da63592:/var/www$
laradock@5cf89da63592:/var/www$ composer create-project laravel/laravel develop --prefer-dist "5.5"
```

## Laravelの環境設定変更

作成されたLaravelプロジェクト配下の.envを更新します。

```
laradock@5cf89da63592:/var/www$ cd develop/
laradock@5cf89da63592:/var/www/develop$ vi .env

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laradock
DB_USERNAME=laradock
DB_PASSWORD=laradock
laradock@5cf89da63592:　exit
```

## nginxのroot変更

```
cd laradock
vi nginx/sites/default.conf
root /var/www/develop/public;
```
## コンテナ再起動
docker-compose restartだとlaravelのルートの設定が変わらないので、
コンテナ自体を作り直します。

```
docker-compose down
docker-compose build --no-cache mysql
docker-compose up -d nginx mysql workspace phpmyadmin
docker-compose ps
```

## 確認

全てのコンテナがupになっていればOKです。

```
          Name                          Command              State                    Ports
--------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1   dockerd-entrypoint.sh           Up      2375/tcp
laradock_mysql_1              docker-entrypoint.sh mysqld     Up      0.0.0.0:3306->3306/tcp, 33060/tcp
laradock_nginx_1              /bin/bash /opt/startup.sh       Up      0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
laradock_php-fpm_1            docker-php-entrypoint php-fpm   Up      9000/tcp
laradock_phpmyadmin_1         /run.sh supervisord -n          Up      0.0.0.0:8080->80/tcp, 9000/tcp
laradock_workspace_1          /sbin/my_init                   Up      0.0.0.0:2222->22/tcp
```

mysqlが起動していない場合は~/.laradock/data/mysqlが壊れてしまっている可能性があります。その場合は下記の[こちら](https://qiita.com/lara_bell/items/d4bd1340a5cc7dfcfcb4
)サイトを参考にしてください。

http://localhostにアクセスしてLaravelのトップ画面が表示されればOKです。

![スクリーンショット 2019-01-28 23.55.35.png](https://qiita-image-store.s3.amazonaws.com/0/272635/b5a7416c-5692-b2a0-8493-65b8c767f289.png)

http://localhost:8080でphpmyadminにアクセスできることを確認します。

![スクリーンショット 2019-01-28 23.55.56.png](https://qiita-image-store.s3.amazonaws.com/0/272635/7c69287f-eee5-b576-c08e-02892e6b7d28.png)

phpmyadminで.envに指定したユーザー、パスワードでログインできればOKです。

[コンテナ間でどうやって通信しているのか？疑問に思うと思った方はこちら](https://qiita.com/tsukapah/items/54f5c97ab77d3e409732)

これで、Laravelの開発をスタートする準備完了です。

[早速、認証機能を作っていきしょう。](https://qiita.com/ichimura/items/66764a54b9a455124c91)