随分前のことですが、ローカルでの開発環境構築でアホみたいに時間をかけてしまったことがありました。
これじゃ何も始まらんとぼやいていたとき先輩が、Dockerだったらこんなことないよね、超便利なんですよ、というお話をしてくださったので気になって調べてみました。
Dockerという言葉を聞いたそのときは何のことやらサッパリでしたが、ローカルでの開発環境の構築や共同編集者さんとの共有を超簡単にしてくれるものみたいでした(もっと色々な機能があるようですし、こんな簡単な言葉で終わらせたら誰かに殴られそうですが…)。
そしてこの度ようやくDockerを使ってCakePHP2の開発環境を作ることが出来たので、忘れないうちにまとめておきます。
DockerとDocker Composeのインストールについては既に多くの方がまとめて下さっておりますので、この記事では割愛します。事前にこの2つを使える状態にしてから記事の内容に臨んで下さい。
なお、この記事は「Setup CakePHP 2.x Application with Docker from Scratch」に掲載されている内容を元に、私にとって都合よくアレンジしたもの加えた内容となっております。
フォルダ・ファイルの保存場所
これから作成するファイルは、以下のような形式になるようにデータを保存していって下さい。
CakePHP
├ docker
│ ├ Dockerfile
│ └ apache
│ └ site.conf
├ docker-compose.yml
└ CakePHP2.xのプロジェクトファイルに含まれるファイルたち…
1.CakePHP2.xのプロジェクトファイルを用意する
CakePHP公式GitリポジトリからプロジェクトファイルをDLして任意のフォルダに解凍します。
今回は、このプロジェクトフォルダの名前を「CakePHP」とします。
2.Dockerfileの作成
1で解凍したフォルダの中に「docker」というフォルダを作り、その中に「Dockerfile」を作ります。
Dockerfileは次のように入力します。
FROM php:5.6-apache RUN apt-get update -yqq \ && apt-get install -yqq --no-install-recommends \ git \ zip \ unzip \ && rm -rf /var/lib/apt/lists # Enable PHP extensions RUN docker-php-ext-install pdo_mysql mysqli # Install composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer # Add cake and composer command to system path ENV PATH="${PATH}:/var/www/html/lib/Cake/Console" ENV PATH="${PATH}:/var/www/html/app/Vendor/bin" # COPY apache site.conf file COPY ./docker/apache/site.conf /etc/apache2/sites-available/000-default.conf # Copy the source code into /var/www/html/ inside the image COPY . . # Set default working directory WORKDIR ./app # Create tmp directory and make it writable by the web server RUN mkdir -p \ tmp/cache/models \ tmp/cache/persistent \ && chown -R :www-data \ tmp \ && chmod -R 770 \ tmp # Enable Apache modules and restart RUN a2enmod rewrite \ && service apache2 restart EXPOSE 80
3.Apache Site Confの作成
dockerフォルダの中に「apache」というフォルダを作り、「site.conf」を作ります。
site.confには次のように入力します。
<VirtualHost *:80> DocumentRoot /var/www/html/app/webroot/ <Directory /var/www/html/app/webroot/> Options FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>
4.docker-compose.ymlの作成
cakephpフォルダの中に「docker-compose.yml」を作ります。
docker-compose.ymlには次のように入力します。
version: "3" services: app: build: context: . dockerfile: docker/Dockerfile volumes: - .:/var/www/html ports: - 8000:80 environment: TZ: "Asia/Tokyo" depends_on: - db db: image: mysql:5 volumes: - db-data:/var/lib/mysql ports: - "3309:3306" # 3306ポートにするとローカルのMySQLと被るのでポートをずらす。 environment: MYSQL_DATABASE: cakephp_db MYSQL_ROOT_PASSWORD: root_password mailhog: image: mailhog/mailhog ports: - "8025:8025" - "1025:1025" volumes: db-data: external: false
5.CakePHP configの設定
core.phpのSecurity.saltの変更などについては割愛しますが、いつも通り行ってください。
DB接続設定は次のようにします。
app/Config/database.phpを次のように修正します。
public $default = array( 'datasource' => 'Database/Mysql', 'persistent' => false, 'host' => 'db', 'login' => 'root', 'password' => 'root_password', 'database' => 'cakephp_db', 'prefix' => '', 'encoding' => 'utf8', );
6.開発環境の立ち上げ
コマンドラインでcakephpフォルダに移動し、次のコマンドを順番に叩きます。
$ docker-compose build $ docker-compose up -d
これでhttp://localhost:8000にアクセスするとcakePHPの画面が表示されるはずです。
7.CakePHP configの設定その2
このままではアプリケーションからメールを送信ができないので、MailHogを使ってローカル環境で作られたメールをローカル環境上で確認できるようにします。
次のコマンドを叩きます。
$ docker ps
そうすると今立ち上がっているdockerコンテナの一覧が確認できます。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 178f5655d82d mailhog/mailhog "MailHog" 20 minutes ago Up 7 seconds 0.0.0.0:1025->1025/tcp, 0.0.0.0:8025->8025/tcp cakephp_mailhog_1 6bfa1bfeb299 cakephp_app "docker-php-entrypoi…" 4 hours ago Up 6 seconds 0.0.0.0:8000->80/tcp cakephp_app_1 52864d4d34cc mysql:5 "docker-entrypoint.s…" 4 hours ago Up 7 seconds 33060/tcp, 0.0.0.0:3309->3306/tcp cakephp_db_1
この一覧の中からIMAGE「mailhog/mailhog」となっている行を探し、この中のNAMESの値をコピーします(ここでは「cakephp_mailhog_1」)。
app/Config/email.phpを次のように修正します。
public $smtp = array( 'transport' => 'Smtp', 'from' => array('site@localhost' => 'My Site'), 'host' => 'cakephp_mailhog_1', //docker psで確認したmailhugのコンテナ名を入力 'port' => 1025, 'timeout' => 30, 'username' => 'user', 'password' => 'secret', 'client' => null, 'log' => false, //'charset' => 'utf-8', //'headerCharset' => 'utf-8', );
この設定をした上で、http://localhost:8025(MailHogの画面)で送信したメールを読むことができます。
8.開発環境の削除・停止
コマンドラインでcakephpフォルダに移動してコマンドを叩きます。
停止
$ docker-compose stop
削除
$ docker-compose down
9.開発環境の共有
共同開発者にも、これと同じ環境を作って欲しいよ〜というときは、手順1〜4までに作ったファイルを共有して、その後の手順を共同開発者の方にやってもらえばOK…のはずです。というのもやったことがないので何とも言えないという状況です。
まだまだ不勉強で、今回紹介したものも、何をしているかよくわかっていない部分が大半です。
1つ1つを嚙み砕いて、楽々な開発ライフを送りたいと思っています。
Docker日頃から使ってるよ!という方がいたらアドバイスを頂けると嬉しいです!
金子風月
最新記事 by 金子風月 (全て見る)
- vue.jsに触ってみた話 - 2019年3月26日
- DockerでCakePHP2の開発環境を作ってみた(Mac版) - 2019年3月15日
- CakePHP3+Authコンポーネントで任意のタイミングでログインさせる処理をつくる - 2019年3月14日
ありがとうございます!Dockerは私もまだ使ったことなくて、でもぜひうちの開発チームでも取り入れたいです!!!教えてください〜〜〜!!!
というかとりあえず、これ読んでやってみます!!!
柳田さん、さっそくコメント下さってありがとうございます!
テキストファイルを作ってコマンドを叩くだけで簡単に新しい環境が作れるので、ちょっと試してみたいことがあるときにも便利です。
Docker勉強に進展があったら続編を投稿させて頂きます!