cakePHP3をdockerで簡単に生成してみる
この記事ではDebian GNU/Linux 8にインストールしたPHP 7.0.2を使っています。
これまでは、phpなどを開発する際に、毎回、ローカル環境にApache立ててという形で構築してましたが、時代はとっくにインフラをコードで書いてリビジョン管理だったり、チーム内で配布するというスタイルになっております。
しかし、私の所属しているチームにまだdockerなどを利用する文化がなく、皆のローカル環境がえらいことになってるという事態を知って今回改めてdocker導入にあたり作成したものを共有する流れとなりました。
環境構築時の工数なんて、dockerfileを作成する人が苦労するだけとなり、チームはその苦労にあやかる形(まあ、ご苦労様という気持ちで優しく接してあげたらいいと思います)になりつつあると思ってます。
今回は、phpのプロジェクトでよく使われてるcakePHP(ここでは3)の環境を作成するdockerファイルの紹介となります。
jsではgulpやwebpack, javaならgradle等ビルドツールがある中で、phpならcomposerですよね。
cakephpやLaravelなどのフレームワークなどでおなじみですが、composerの環境パスなど以外に面倒な事があったり、自分のPCの環境がどんどん汚染されるので、dockerなどで利用するときだけ、コンテナ立てて使わなくなったら破棄すればいいじゃんという考えのもと、composerの環境変数などはコンテナ内に設定して、phpファイルは、ホスト側(自PC)に配置すればすぐ使えるし、環境変数とかも関係ないし、例えばデザイナー等の環境にもdockerさえあればローカル環境で開発も可能になります。
イメージ
初期画面(localhost:8765/app/) |
---|
導入の手順
Please prepare in advance / 導入前に
install docker ->
https://www.docker.com/
1 clone
$ git clone https://github.com/borderhub/docker-php-mysql
2 run
$ docker-compose up -d
3 Create cakePHP
$ docker-compose run --rm php composer create-project --prefer-dist -n cakephp/app app
4 edit config
1. edit working directry
.env L15
WORK_DIRPATH=/yourDirectoryPath/docker-php-mysql
2. change default setting (for connect to the database)
cd webapps/app/config/app.php
app.php L225
before
'host' => 'localhost',
after
'host' => 'my_mysql',
※今回の環境では
5 check
docker コマンド
コンテナ内へ移動
- my_phpコンテナに接続
$ docker exec -it my_php bash
コンテナの削除
- コンテナの削除
$ docker rm コンテナID
- 全コンテナの削除
$ docker rm `docker ps -a -q`
イメージの削除
- imageを削除する場合
$ docker rmi コンテナID
- 全imageを削除する場合
$ docker rmi $(docker images | awk '{print $3}')
注意
・単純にcakeビルドを行った際の初期ファイル群が生成されるだけですので、
細かな使用法などは、下記を参照ください。
https://book.cakephp.org/3.0/ja/index.html
・実際のプロジェクトで利用する際には、コンテナ名など適宜変更お願いします。
今回は単純にcomposerを簡単に作成する意図ですので、細かなカスタマイズは各自で対応をお願いします。
環境
- OS : Ubuntu Debian GNU/Linux 8
- DB : MySql5.6
- php: 7.0.2
最後に
まだまだ、dockerにしろvagrant,ansibleなど現在学習中の身ですが、このような技術によりフロントエンダーな私でもAPIサーバーを立てて、画面の実装などを行えるようになりましたので、まだ、導入されていないチームに属している方は騙されたと思って試していただけたらと思います。
vagrantとdockerどちらも状況に応じて利用する形になると思いますが、
個人的には、dockerを細かなタスク単位で活用できるように勉強していきたいと思います。