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

環境

  • 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の裏技的な導入手順が書いてあるのですが、一部足りないところがあるようだったので補足します。

-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コンテナ用イメージをビルドするようにします。

- 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するよう指定します。

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

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

DockerfileにWORKDIRを追記する

上記手順だとコンテナ起動時にGoのランタイムエラーが出てしまうといissueがあります。
ランタイムエラーを回避するため、Dockerfile-55にWORKDIRを追記します。


  FROM php:5.5-fpm 
+ WORKDIR /var/www

php55.iniを置く

デフォルトの設定ではphp71.iniを読むようになっているので、php55.iniをつくり読み込むようにします。

php.netから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を読み込むようにします。



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)
[紹介元] PHPタグが付けられた新着投稿 – Qiita LaradockでPHP5.5を使う(Docker + Larevel)

  • コメント

    1. 匿名希望
      2017/08/19(土) 03:09:01

      「CIは、CircleCIで行います。テストが始まると『CircleCI上でDockerイメージをビルドしそれをコンテナ化してそこで走らす』します」

      へー。Jenkinsでよく似たことしてるのだけど、CircleCIでもするんですねー。 #cm_osaka #eureka

    2. 匿名希望
      2017/08/19(土) 03:09:01

      AWS の EB はコンテナイメージも動作する Heroku で ECS はコンテナ特化で更にフレキシビリティがある感じか。

    記事に戻る

関連記事