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 のプロジェクトを起動することができます。