Docker
Docker は開発環境を構築するのにとても便利で、新しいプロジェクトを立ち上げる時はなるべく Docker で環境構築しています。それだけでは物足りず、最近は過去の開発環境も Docker への移行を進めています。開発環境
今回、 次のようなサーバを Docker で用意したので、紹介させて頂きます。- Ubuntu20.04
- Apache2
- PHP7.2
- CakePHP 3.8
- MySQL (RDSを直接利用のため Docker には含まない)
そのため今回のプロジェクトフォルダは次のようになっています。

Docker の準備・起動
それでは Docker に必要なファイルを確認しましょう。 docker フォルダの内部はシンプルです。
web フォルダは CakePHP を動作させるための Web サーバに必要なファイルが格納されています。また docker composer を利用してサーバを起動するので、 docker-composer.yml ファイルがあります。
docker-composer.yml の内容は次のようになっています。
docker-composer.yml
version: '3'
services:
web:
image: ubuntu:20.04
container_name: web
build: ./web
ports:
- 8080:80
volumes:
- ../:/var/www/html/***
command: >
sh -c "
composer install --no-interaction &&
service apache2 restart &&
tail -f /dev/null
"
tty: true
重要なのは、次の3点です。1. build に web フォルダを指定します。
先述の通り、web フォルダにはサーバを構築するためのファイル群が揃っています。
2. volume にマウントするフォルダとして、本ファイルの親フォルダを指定します。マウントする先は、/var/www/html/*** としています。適宜修正してください。
3. 起動時に composer install を実行し、CakePHP プロジェクトの実行に必要なプラグインをインストールします。その後サーバを再起動し、準備完了です。
それでは web フォルダの中身を確認しましょう。

web フォルダには 3 つのファイルがあります。最も重要なのは Dockerfile です。
Dockerfile
FROM ubuntu:20.04
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Tokyo
#リポジトリ追加
RUN apt update \
&& apt -y install software-properties-common \
&& add-apt-repository ppa:ondrej/php
#各種インストール
RUN apt update \
&& apt -y install tzdata apache2 php7.2 php7.2-dev php7.2-xml php7.2-mysql php7.2-intl php7.2-mbstring php7.2-zip php7.2-gd \
&& mkdir -p /var/www/html/***
#設定ファイルコピー
COPY 000-default.conf /etc/apache2/sites-enabled
COPY apache2.conf /etc/apache2
#composerインストール
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
&& php composer-setup.php \
&& php -r "unlink('composer-setup.php');" \
&& mv composer.phar /usr/local/bin/composer \
&& a2enmod rewrite
#Apache起動
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
EXPOSE 80
CMD ["apachectl", "-D", "FOREGROUND"]
特筆すべき内容は次のとおりです。1. 今回 PHP7.2 を利用するため、リポジトリを追加しています。
2. Apacheの設定のため、ファイルを2つコピーします。
3. CakePHP を利用するため、 composer をインストールします。このタイミングでは compose install できないので、それは docker-compser.yml において処理します。
サーバにコピーする Apache用の設定ファイル2つは次のとおりです。
000-default.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/***
ServerName ***.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
主に DocumentRoot の設定です。適宜変更してください。
apache2.conf
DefaultRuntimeDir ${APACHE_RUN_DIR}
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include ports.conf
<Directory />
Options FollowSymLinks
AllowOverride All
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
AccessFileName .htaccess
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
サーバの設定ファイルでは、主に /var/www の設定です。上記でdocker-compose を起動しましょう。
docker-compose build docker-compose up -d
これでCakePHP のプロジェクトを起動することができます。





