はじめての Laradock

## 更新履歴
- 2018-06-12: 記事の内容をv7系に対応
- 2018-06-12: アップグレード方法を記載

## Laradock のインストール

```:インストール
$ git clone https://github.com/Laradock/laradock.git
```

```:laradockディレクトリへ移動
$ cd laradock
```

```:テンプレから.envファイルを作成
$ cp env-example .env
```

> **Tips**
>
> デフォルトの設定ではホスト側のポート番号 `3306` はコンテナ側の MySQL ポート `3306` へフォワーディングされる。ホスト側ですでに `3306` を使用していたりする場合は `.env` ファイルの `MYSQL_PORT=3306` を適宜修正する。
>
> ```ini:.env
> MYSQL_PORT=3306
> ```
>
> ```yaml:docker-compose.yml
> ports:
>   - "${MYSQL_PORT}:3306"
> ```
>
> 上記のように、`docker-compose.yml` は `.env` の変数定義を参照している。調整が必要な場合は基本的に .env ファイルの方を修正する。

## コンテナの起動方法

```:コンテナの起動
$ docker-compose up -d nginx mysql
```

> **Tips**
>
> docker-compose.yml に記述されている `depends_on` ディレクティブの指定により、依存関係にあるサービス（`php-fpm` / `workspace` など）も自動で起動する。

## コンテナへの入り方

`docker ps` コマンドでコンテナのステータスを調べる。STATUS が `Up` になっていれば起動中の証。

```:起動しているコンテナを表示
$ docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                      NAMES
bf5c3d89920e        laradock_nginx       "nginx"                  25 minutes ago      Up 25 minutes       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   laradock_nginx_1
5a14d8d967ff        laradock_php-fpm     "docker-php-entrypoi…"   25 minutes ago      Up 25 minutes       9000/tcp                                   laradock_php-fpm_1
5acec9238740        laradock_workspace   "/sbin/my_init"          25 minutes ago      Up 25 minutes       0.0.0.0:2222->22/tcp                       laradock_workspace_1
3415a979e523        laradock_mysql       "docker-entrypoint.s…"   3 hours ago         Up 25 minutes       0.0.0.0:3307->3306/tcp                     laradock_mysql_1
```

> **Tips**
>
> `--format` オプションを利用すると、表示項目を必要な情報のみに絞ることができる。
>
> ```
> $ docker ps --format "table {{.Status}}\t{{.Names}}"
> STATUS              NAMES
> Up 34 minutes       laradock_nginx_1
> Up 34 minutes       laradock_php-fpm_1
> Up 34 minutes       laradock_workspace_1
> Up 34 minutes       laradock_mysql_1
> ```

サービス `{SERVICE}` を指定してコンテナの中に入る

```:コンテナに入る
$ docker-compose exec {SERVICE} bash
```

> **Tips**
>
> サービス `{SERVICE}` には、`docker-compose.yml` の `services` ディレクティブに記述されているサービス名を指定する。
>
> ```yaml
> version: '2'
>
> services:
>
>   workspace: ...
>   php-fpm: ...
>   nginx: ...
>   mysql: ...
>
>   :
>   :
>   :
>```
>
> Laradock においては、`workspace`, `php-fpm`, `nginx`, `mysql` などそれぞれが**サービス**にあたる。
>
> ```:workspace
> $ docker-compose exec workspace bash
> ```
>
> ```:php-fpm
> $ docker-compose exec php-fpm bash
> ```
>
> ```:nginx
> $ docker-compose exec nginx bash
> ```
>
> ```:mysql
> $ docker-compose exec mysql bash
> ```

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

作業はホスト側ではなく `workspace` コンテナの中に入って行う。パッケージ管理システムの `composer` など、必要なものがあらかじめ用意されているので自分で準備する手間が要らない。

デフォルトではコンテナの中に入ると **`root`** ユーザーになるが、`composer` を **`root`** ユーザーで実行しようとすると警告が表示されてしまうため、`--user` オプションを **`laradock`** で指定してログインする。

```:ログイン
$ docker-compose exec --user=laradock workspace bash
```

```:whoamiでログインユーザーを確認
$ whoami
laradock
```

コンテナの中に入ったら `composer create-project` でプロジェクトを作成する。例として **`foo`** という名前のプロジェクトを作成する。

```:プロジェクトの作成
$ composer create-project --prefer-dist laravel/laravel foo
```

> **Tips**
>
> Laradock では、Laravel 公式の **Laravel Installer** （`laravel new` コマンド）ではなく、`composer create-project` によるプロジェクトの作成を推奨しています。

## アプリケーションのパスを変更

デフォルトの環境設定ファイル `.env` ではアプリケーションのパスが `../` となっています。

```ini:.env（デフォルト）
APP_CODE_PATH_HOST=../
```

先の例では **`foo`** という名前でプロジェクトを作成したため、これを `../foo` に変更する必要があります。

```ini:.env（変更後）
APP_CODE_PATH_HOST=../foo
```

## .env の変更をコンテナに反映させる

```:コンテナの再起動
$ docker-compose stop
$ docker-compose up -d nginx mysql
```

## 構成の確認

ここまで作業を終えると、以下のようなディレクトリ構成になっています。

```:ディレクトリ構成
$ tree -L 1 ./laradock_sample
./laradock_sample
├── laradock
└── foo

2 directories, 0 files
```

参考までに。

## アプリケーションの確認

ホスト側のポート設定（`NGINX_HOST_HTTP_PORT=80`）を `.env` でとくに変更していなければ、ブラウザで http://localhost にアクセスすることができます。80 番ポートを使われると困る場合は適宜変更してください。

![Screen Shot 2018-02-05 at 18.36.30.png](https://qiita-image-store.s3.amazonaws.com/0/13842/b2bd9497-05bb-77f1-10f3-e2450fc02d13.png)

## Laradock のアップグレード方法

```:アップグレード
$ docker-compose down
$ git pull origin master
```