cakePHP3をdockerで簡単に生成してみる

この記事ではDebian GNU/Linux 8にインストールしたPHP 7.0.2を使っています。

ずっとこれまでロムってましたが、初めて記事を投稿させていただきますborder___(ボーダー)と申します。
記事の内容に入る前に簡単な自己紹介をさせていただきます。

---

普段は、HTML５, js(React.jsやNode.js), php, swift(objective-c)で開発しているフロント寄りデベロッパーでございます。
稀に、dockerファイルやvagrant環境を構築したり、SQLを書いたり便利屋としてこき使われる毎日を過ごしております。

- たわいもないつぶやき（若干毒成分あり）やトゥートをしています。

> twitter：@[border___](https://twitter.com/border___)
mastodon: @[border___](https://mastodon.cloud/@border___) @[border___jp](https://mstdn.jp/@border___)

- 音楽もやってたりやってなかったりしてます。 [https://soundcloud.com/quelle-2](https://soundcloud.com/quelle-2)

- アート的な活動もたまにやってます。 [http://yoin-callback.info/](http://yoin-callback.info/)

あとは、アイスランドが大好きっ子です。（※現在、旅の記録の動画編集中ですので、出来たらようつべさんにアップしようと思います。）

---

さてと、前置きが長くなり申し訳ありません。本題に移ります。
これまでは、phpなどを開発する際に、毎回、ローカル環境にApache立ててという形で構築してましたが、時代はとっくにインフラをコードで書いてリビジョン管理だったり、チーム内で配布するというスタイルになっております。

しかし、私の所属しているチームにまだdockerなどを利用する文化がなく、皆のローカル環境がえらいことになってるという事態を知って今回改めてdocker導入にあたり作成したものを共有する流れとなりました。

環境構築時の工数なんて、dockerfileを作成する人が苦労するだけとなり、チームはその苦労にあやかる形（まあ、ご苦労様という気持ちで優しく接してあげたらいいと思います）になりつつあると思ってます。

今回は、phpのプロジェクトでよく使われてるcakePHP(ここでは３)の環境を作成するdockerファイルの紹介となります。

jsではgulpやwebpack, javaならgradle等ビルドツールがある中で、phpならcomposerですよね。
cakephpやLaravelなどのフレームワークなどでおなじみですが、composerの環境パスなど以外に面倒な事があったり、自分のPCの環境がどんどん汚染されるので、dockerなどで利用するときだけ、コンテナ立てて使わなくなったら破棄すればいいじゃんという考えのもと、composerの環境変数などはコンテナ内に設定して、phpファイルは、ホスト側（自PC）に配置すればすぐ使えるし、環境変数とかも関係ないし、例えばデザイナー等の環境にもdockerさえあればローカル環境で開発も可能になります。

## イメージ

|初期画面(localhost:8765/app/)|
|---|
|<img width="992" alt="cake_php_mysql_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/177529/d70733ee-3f19-488e-2065-96e8df17dacf.png">
|

## 導入の手順

## Please prepare in advance / 導入前に

> install docker ->
 [https://www.docker.com/](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

[http://localhost:8765/app/](http://localhost:8765/app/)

## 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](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を細かなタスク単位で活用できるように勉強していきたいと思います。