CakePHPのDockerfileを作った話

はじめに

数年前に作った CakePHP の Dockerfile が動作しなくなっていたので修正してみました。

修正結果

最低限、必要なものは入っているはず。

#
#--------------------------------------------------------------------------
# Image Setup
#--------------------------------------------------------------------------
#

FROM php:7.3.3-apache

LABEL maintainer="shimomo <yuichi@shimomo.net>"

WORKDIR /var/www/cakephp

#
#--------------------------------------------------------------------------
# PHP Setup
#--------------------------------------------------------------------------
#

# Install the tools
RUN apt-get update
RUN apt-get install -y libicu-dev libpq-dev libzip-dev zlib1g-dev zip unzip

# Install the PHP intl extension
RUN docker-php-ext-install intl

# Install the PHP pcntl extension
RUN docker-php-ext-install pcntl

# Install the PHP zip extension
RUN docker-php-ext-install zip

# Install the PHP mbstring extension
RUN docker-php-ext-install mbstring

# Install the PHP pdo_mysql extension
RUN docker-php-ext-install pdo_mysql

# Install the PHP pdo_pgsql extension
RUN docker-php-ext-install pdo_pgsql

# Install the PHP composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

#
#--------------------------------------------------------------------------
# Apache Setup
#--------------------------------------------------------------------------
#

COPY ./000-default.conf /etc/apache2/sites-available/000-default.conf
COPY ./001-default-ssl.conf /etc/apache2/sites-available/001-default-ssl.conf

RUN usermod -u 1000 www-data
RUN groupmod -g 1000 www-data

RUN apt-get install -y ssl-cert
RUN make-ssl-cert generate-default-snakeoil

RUN a2enmod ssl
RUN a2enmod rewrite

RUN a2ensite 001-default-ssl.conf

#
#--------------------------------------------------------------------------
# Port Setup
#--------------------------------------------------------------------------
#

EXPOSE 80
EXPOSE 443

ビルドしたイメージは こちら です。

hub.docker.com

動作検証

CakePHPテンプレート で動作検証してみます。

$ git clone git@github.com:cakephp/app.git cakephp
$ cd cakephp
$ docker run -d -p 80:80 -p 443:443 -v ${PWD}:/var/www/cakephp --name cakephp shimomo/cakephp
$ docker exec -it cakephp composer install

ここで http://127.0.0.1/ にアクセスしてみる。

Could not load configuration file: /var/www/cakephp/config/app.php

何やらファイルが読み込めないらしい。 調べた感じだと config/app.php は composer install で自動生成されるファイルらしい。 それが生成されていないのが原因なので、もう一度 composer install を実行してみる。

$ docker exec -it cakephp composer install

すると、以下のように無事 config/app.php が生成された。

Created `config/app.php` file
Created `/var/www/cakephp/tmp/cache/views` directory
Set Folder Permissions ? (Default to Y) [Y,n]? Y
Updated Security.salt value in config/app.php

再び http://127.0.0.1/ にアクセスしてみると CakePHP のデフォルトページが表示されましたとさ。 しかし、最初の composer install で config/app.php が生成されなかった理由は何だろうか? 気が向いたら調べてみよう。

github.com

おわりに

最近は Laravel を使うことが多いので、役に立つ日が来るかは分からない。