CakePHP 5 の開発環境を Docker で構築
はじめに
本記事では CakePHP 5 の開発環境を Docker を使って構築する方法をご紹介します。
ファイル構成は下記のようになります。
/path/to/your-project/
├ .github/
├ bin/
├ config/
│ ├ docker/
│ │ ├ web/
│ │ │ └ Dockerfile
│ │ ├ docker-compose.yml
│ │ └ install-cake5.sh
/path/to/your-project の中に CakePHP 5 のスケルトン(cakephp/app)をインストールし、その config フォルダの中に Docker の設定ファイルを格納します。
- OS
- Windows 11 Home
- Docker
- Docker Desktop 4.23.0
1. Docker 環境を構築
下記内容で Dockerfile と docker-compose.yml を作成します。
Dockerfile の RUN では CakePHP 5 のインストールに必要最低限なものだけインストールしています。
また docker-compose.yml の MySQL のユーザー情報などは適宜変更してください。
FROM php:8.2-apache
COPY --from=composer /usr/bin/composer /usr/bin/composer
RUN apt update \
# Zip
&& apt install -y vim unzip \
# MySQL
&& docker-php-ext-install pdo_mysql \
# intl
&& apt install -y libicu-dev \
&& docker-php-ext-install intl \
# Apache mod_rewrite 有効化
&& a2enmod rewrite
version: "3"
# WSL などファイル同期に時間がかかる環境用
# (cake5-web の volumes のコメントアウトも外す)
#volumes:
#dummy-tmp:
#dummy-vendor:
services:
# PHP-Apache
cake5-web:
container_name: cake5-web
build:
context: ./web
dockerfile: Dockerfile
depends_on:
- cake5-db
ports:
- 80:80
volumes:
- ../../:/var/www/html
#- dummy-tmp:/var/www/html/tmp
#- dummy-vendor:/var/www/html/vendor
# MySQL
cake5-db:
container_name: cake5-db
image: mysql:8.1
environment:
MYSQL_DATABASE: cake5
MYSQL_USER: cake5_user
MYSQL_PASSWORD: hi2mi4i6
MYSQL_ROOT_PASSWORD: mu7ya9to
# phpMyAdmin
cake5-pma:
container_name: cake5-pma
image: phpmyadmin/phpmyadmin:5.2
depends_on:
- cake5-db
ports:
- 8080:80
environment:
PMA_HOST: cake5-db
PMA_USER: root
PMA_PASSWORD: mu7ya9to
ホスト OS 上で、下記のように docker-compose コマンドを使ってコンテナを作成、起動します。
cd /path/to/your-project/config/docker
docker-compose -p cake5 up -d
- Docker Compose の -p オプションで VS Code でのコンテナ管理を便利にする / Twin Turbo Computing
- https://tt-computing.com/docker-project-vscode
動作を確認するには cake5-web に入って(アタッチして)、下記コマンドのように config フォルダ内にファイルがあれば OK だと思います。
root@0123456789ab:/var/www/html# ls config/docker
docker-compose.yml web
もしここで下記のようなエラーになったり、ファイルが表示されない場合は、
コンテナとホスト OS とのファイル同期がうまくいっていないか、
フォルダ構成が間違っている可能性があります。
ls: cannot access 'config/docker': No such file or directory
2. CakePHP 5 のインストール
CakePHP インストール用のシェルスクリプトを作成します。
#!/bin/bash
mkdir /var/www/cake5
cd /var/www/cake5
composer create-project --prefer-dist cakephp/app . "5.*"
cd /var/www/html
cp -prT /var/www/cake5 /var/www/html
rm -rf /var/www/cake5
コンテナの中で下記コマンドで CakePHP 5 をインストールできます。
root@0123456789ab:/var/www/html# config/docker/install-cake5.sh
(省略)
Set Folder Permissions ? (Default to Y) [Y,n]? Y ← Y と入力して enter キー押下
(省略)
Permissions set on /var/www/cake5/logs
Updated Security.salt value in config/app_local.php
上記のようにならず途中で止まる場合で、Windows の WSL で Docker Desktop をお使いの場合は、上記 docker-compose.yml の dummy-tmp と dummy-vendor が有効になっているかご確認ください。
インストールが完了したら config/app_local.php のデータベース接続情報を docker-compose.yml で設定した内容に変更します。
特にホスト名を localhost から cake5-db に変更し忘れないようにご注意ください。
成功していれば http://localhost などにアクセスすると CakePHP 5 のウェルカムページが表示されます。
3. おわりに
今回 CakePHP 5 のインストールにシェルスクリプトを使ったのは、
composer create-project 実行時に対象フォルダが空でないとエラーになるためです。
この処理をもう少しスマートにできないかと思うのですが、良いアイディアが出なかったので、とりあえずこんな形にしています。
config/app_local.php のデータベース接続情報を変更する箇所も自動化したいところですね。