PHP公式のDocker ImageでLaravelを動かす

  • 0
    いいね
  • 0
    コメント

    Docker HubにあるPHPのオフィシャルイメージをベースにして、
    Laravelを動かすことのできるDockerfileを記述してみました。

    なお、このDockerfileはLaravelのプロジェクトルートに置かれている想定です。

    FROM php:7.1-apache
    RUN apt-get update && apt-get -y install git unzip
    
    RUN DEFAULT_SITE_FILE=/etc/apache2/sites-enabled/000-default.conf && TMP=$(mktemp) && sed 's!/var/www/html!/var/www/html/public!' $DEFAULT_SITE_FILE > $TMP && mv $TMP $DEFAULT_SITE_FILE
    RUN curl -L https://raw.githubusercontent.com/php/php-src/master/php.ini-production | sed 's/expose_php = On/expose_php = Off/' > /usr/local/etc/php/php.ini
    RUN a2enmod rewrite
    
    COPY . /var/www/html
    
    WORKDIR /var/www/html
    RUN sh -c 'if [ ! -x /var/www/html/composer.phar ]; then curl https://getcomposer.org/installer | php; fi'
    RUN ./composer.phar install
    
    RUN chown -R www-data:www-data /var/www/html
    

    RUN の狙い

    • apt-get -y install git unzip はComposerを使った依存モジュールのインストールに必要。
    • RUN DEFAULT_SITE_FILE=... は、ドキュメントルートをプロジェクトルートではなくその下のpublicディレクトリにするため。
    • RUN curl -L ... は、PHPのリポジトリからphp.iniを取得して、expose_php を書き換えてPHPのバージョンがヘッダに出ないようにする。純粋に開発環境であれば不要かもしれない。
    • RUN a2enmod rewrite は mod_rewrite を有効にする。
    • RUN sh -c ... はプロジェクトにcomposerがなければ取得する。
    • RUN chown ... はWebサーバと実行権限を揃えるため。もしかするとstorageディレクトリだけでもいいのかもしれない。