LaradockでPHP5.5を使う(Docker + Laravel)

## 環境
* macOS Sierra
* Docker 17.06.0-ce-mac18
* Apache 2.4
* CentOS 7.0
* MySQL 5.5
* Laravel 5.0

## 前提条件
Lardockの基本的な導入手順を踏み、`docker-compose up -d`コマンドで**コンテナを起動する直前まで**の工程が終了していること

すでに起動してしまっている場合、Laradockで使用するphp-fpmのコンテナとイメージを一度削除してください。

コンテナを停止、ネットワークとともに削除するコマンドは下記のとおりです。

```
$ docker-compose down
```

イメージは削除されないので、

```
$ docker ls -a
```
で全てのイメージを表示し、laradockを導入してビルドしたイメージを削除します。

## 導入手順
LaradockPHP5.5用のDockerfileは同梱されていません。
公式に[PHP5.5の裏技的な導入手順](http://laradock.io/#b-switch-from-php-7-0-or-5-6-to-php-5-5)が書いてあるのですが、一部足りないところがあるようだったので補足します。

### php-fpmをcloneする

php-fpmコンテナ内のPHPのバージョンが、アプリケーションを開発するためのPHPのバージョンになります。

php-fpmは、Laradock本体のリポジトリとは別にベースイメージのためのリポジトリが存在します。
(本体: https://github.com/laradock/laradock)
(ベースイメージ用: https://github.com/laradock/php-fpm)

まず、最新のLaradockをクローンしたときにディレクトリ構成に含まれるphp-fpmではなく、ベースイメージ用のphp-fpmの方をクローンします。

```
$ cd { 好きなディレクトリ } 

$ git clone https://github.com/laradock/php-fpm
$ cd php-fpm
```

### Dockerfile-56をDockerfile-55にリネームする

先ほどクローンしたリポジトリの中のDockerfileをリネームします。

```
$ mv Dockerfile-56 Dockerfile-55
```
Dockerfile-56だったものを、Dockerfile-55として使います。

### Dockerfile-55を書き換える

DockerHubのphp-5.5-fmpのイメージを元に、Laradockのphp-fpmコンテナ用イメージをビルドするようにします。

```diff
- FROM php:5.6-fpm
+ FROM php:5.5-fpm
```
また、ここでつくったDockerfile-55はクローンしたLaravel本体のphp-fpm配下に移動しておくとdocker-composeでの管理が便利になります。

```
$ mv Dockerfile-55 {開発ディレクトリ}/laradock/php-fpm
```

### docker-compose.ymlを書き換える

serviceのphp-fpmのdockerfileの項目で、Dockerfile-55をもとにイメージをbuildするよう指定します。

```diff
- dockerfile: "Dockerfile-${PHP_VERSION}"
+ dockerfile: "Dockerfile-55"
```

公式の手順ではここまでになっています。ここからが補足情報です。

### DockerfileにWORKDIRを追記する

上記手順だと[コンテナ起動時にGoのランタイムエラーが出てしまう](https://github.com/laradock/php-fpm/issues/9)といissueがあります。
ランタイムエラーを回避するため、Dockerfile-55にWORKDIRを追記します。

```diff

  FROM php:5.5-fpm 
+ WORKDIR /var/www
```
### php55.iniを置く
デフォルトの設定ではphp71.iniを読むようになっているので、php55.iniをつくり読み込むようにします。

[php.net](http://php.net/get/php-5.5.38.tar.bz2/from/a/mirror)からPHP5.5をダウンロードし、php.iniをphp55.iniにリネームします。
php55.iniをlaradock/php-fpm配下におきます。

```
$ mv php.ini php55.ini

$ mv　php55.ini {開発ディレクトリ}/laradock/
```

docker-compose.ymlを編集してphp55.iniを読み込むようにします。

```diff


volumes:      
- - ./php-fpm/{$PHP_VERSION}.ini:/usr/local/etc/php/php.ini                                                                                                                         
+ - ./php-fpm/php55.ini:/usr/local/etc/php/php.ini
```

### イメージをbuildしてコンテナを起動する

`docker-compose up` コマンドで各Dockerfileからイメージをbuildし、コンテナを起動します。

オプションに`-d`をつけて実行すると、コンテナをバックグラウンドで起動し(デタッチドモード)、実行したままにできます。

また、開発環境で使うもののみイメージをビルドするように指定します。

```
$ docker-compose up -d workspace apache2 mysql php-fpm 
```

5.5-fpmのタグがついたphpのイメージと、それをもとにしたlaradock_php-fpmというイメージがビルドされていることを確認します。

```
$ docker image ls

laradock_php-fpm     latest              5f56d9fdfff8        31 hours ago        402MB

php                  5.5-fpm             4c52b9f20fae        11 months ago       362MB
```

laradock_php-fpm_1 コンテナ内のPHPのバージョンが5.5になっていることを確認します。

オプションで`--rm`をつけると、対象のコンテナを実行後に削除してくれます。停止しているコンテナに入ることなくバージョン確認などができるので便利です。

コンテナがデタッチドモードで起動されている場合は無視されるので、`--rm`オプションはなくても同じ挙動になります。

```
$ docker-compose run --rm php-fpm php -v

PHP 5.5.38 (cli) (built: Aug 10 2016 21:09:37)
```