Docker for Macで最新版EC-CUBE ローカル環境構築

# はじめに
なかなかなかったのでEC-CUBEをDocker for Macを使ってローカル環境を試しに構築してみました。

**環境**

|MySQL|5.6.39|
|:-----------|:------------|
|PHP|7.1.14|
|WEBサーバー|Apache/2.4.10 (Debian)　|
|EC-CUBE|3.0.15 |

#ステップフロー
1. EC-CUBE最新版をローカルにダウンロード
2. Dockerインストール
3. MySQLのイメージ・コンテナの用意
4. DBの準備
5. PHP7.1-apacheの用意
6. PHPカスタマイズ（ライブラリ、モジュールなどをインストール）
7. カスタマイズしたPHPのイメージの作成
8. EC-CUBEコンテナの用意
9. htmlを外してEC-CUBEをインストール
10. phpMyadminコンテナの作成
11. まとめ

#1. EC-CUBE最新版をローカルにダウンロード
最新版のEC-CUBEを置きたいところまで移動する

```terminfo
$ cd ディレクトリ名
```

EC-CUBEを置きたいディレクトリ内で

```terminfo
$ curl -O http://downloads.ec-cube.net/src/eccube-3.0.15.zip
```

そのままzipファイルを展開します

```terminfo
$ unzip eccube-3.0.15.zip
```

※　展開したファイルはFinderまたはお使いのエディタなどで任意に移動してください。また、場合によってはここでオーナーやファイルのパーミッションの変更する必要があります

#2. Dockerインストール
[Install Docker for Mac](https://docs.docker.com/docker-for-mac/install/)
上記URLから「Stable channel（安定しているバージョン）」か「Edge channel（開発中のバージョン）」をインストールします
※インストール手順については割愛させていただきます

dockerが正常にインストールできたかを確認

```terminfo
$ docker --version
```

と入力して

```terminfo
Docker version 17.12.0-ce, build c97c6d6
```

などと表示されればOK

#3. MySQL5.6のイメージ・コンテナの用意

```terminfo
$ docker run --name mysqlのコンテナ名 -e MYSQL_ROOT_PASSWORD=rootのパスワード -d mysql:5.6
```

docker run はイメージを元にコンテナを作成します。今回は初期の状態を想定しているのでmysqlのイメージはありません。ない場合はDocker Hubよりイメージを取得し、コンテナを作成してくれます。
※tagの指定がない場合はlatestバージョンが使用されます。

mysql5.6が正常に作成できたか確認します

```terminfo
$ docker exec -it コンテナ名 bash
```

で「コンテナ名」のコンテナに入ります

```terminfo
mysql -u root -p
```

を入力し「rootのパスワード」を入力しmysqlを確認します


```terminfo
SHOW DATABASES;
```

などで現在あるDBを表示できればOKです

#4. DBの準備
##データベースの作成

```terminfo
CREATE DATABASE データベース名 CHARACTER SET utf8;
```

※新しいユーザーが必要な場合はroot権限と同じ条件のユーザーを作成しておきます

`exit`２回でMySQLとコンテナから出ます

##コンテナのIPアドレスを調べる

```terminfo
$ docker ps | awk 'NR>1&&$0=$1' | xargs -n 1 docker inspect -f "{{.Name}} {{.NetworkSettings.IPAddress }}"
```

起動中のコンテナのIPアドレス一覧が表示されます
※mysqlのコンテナIPはEC-CUBEをインストールする際に使用しますので、メモをしておいてください

#5. PHP7.1-apacheの用意
今度は`$ docker run`ではなく

```terminfo
$ docker pull php:7.1-apache
```

でphp:7.1-apacheのイメージを作成します

#6. PHPカスタマイズ（ライブラリ、モジュールなどをインストール）
作成したphp:7.1-apacheのイメージにはEC-CUBEに必要なライブラリやモジュールが無いので、ライブラリやモジュールが使えるようにカスタマイズします

Dockerfileの作成（7.1-apacheのイメージを使用して）
ローカルの任意の場所に`Dockerfile`を作成
dockerのphp:7.1-apacheには以下の記述でOK
詳細は割愛します

```Dockerfile
FROM php:7.1-apache
RUN apt-get update && \
    apt-get install -y \
    zlib1g-dev \
    && docker-php-ext-install pdo_mysql mysqli mbstring zip \
    && a2enmod rewrite
```
#7. カスタマイズしたPHPのイメージの作成

```terminfo
$ docker build -t カスタマイズしたイメージ名 Dockerfileのパス
```

#8. EC-CUBEコンテナの用意
カスタマイズしたイメージを使用して`$ docker run`します

```terminfo
$ docker run --name eccubeのコンテナ名 --link mysqlのコンテナ名:mysql -p 8080:80 -v eccubeのローカルディレクトリパス:/var/www/html -d カスタマイズしたイメージ名
```

ブラウザでアクセス
http://127.0.0.1:8080/html/

Forbidden（403）がでたら
ローカル環境のEC-CUBEディレクトリ内の
html > .htaccess

```apache
# Options +FollowSymLinks +SymLinksIfOwnerMatch
```

の「#（コメントアウト）」を外す

#9. htmlを外してEC-CUBEをインストール
[EC-CUBE開発ドキュメント](http://doc.ec-cube.net/quickstart_remove-html)を参照

指定のファイルを移動し変更したらブラウザで再度アクセスしインストールを開始
http://127.0.0.1:8080/
※インストール手順は割愛します
DBは以下の通りです

|項目名|内容|
|:-----------------|:------------------|
|データベースの種類|MySQL|
|データベースのホスト名|mysqlのコンテナIP|
|ポート番号|３３０６|
|データベース名|作成したDB名|
|ユーザ名|rootまたは、root権限と同じ権限で作成した新しいユーザー|
|パスワード|rootパスワードまたは、root権限と同じ権限で作成した新しいユーザーのパスワード|

#10. phpMyadminコンテナの作成
DBを閲覧したり、編集したい場合はphpMyadminを入れるかDB接続ツールを使用します
DB接続ツールの場合はコンテナのIPアドレスを利用して外部からの接続が可能になります
今回は`$docker run`でphpMyadminです

```terminfo
$ docker run --name phpmyadmin用のコンテナ名 -d --link mysqlのコンテナ名:db -p 8888:80 phpmyadmin/phpmyadmin
```

ブラウザでアクセスしてrootまたは、root権限と同じ権限で作成した新しいユーザーでログイン
http://127.0.0.1:8888/

#まとめ
Macのローカル環境を構築するのに、MAMPを入れたり、PHPを使えるように設定したりと様々な方法がありましたが、docker for Macを利用して高速かつ、簡単に本番と同じ環境が作れるので、とても便利です。

また、インストールやオプションの説明などは他のサイトの説明がわかりやすいので割愛させていただきましたが、コンテナの作成を間違えてもとりあえず削除して、簡単にやりなおすことができるので失敗しても一旦なかったこと（削除）して新しくチャレンジできます。

今回は新規の構築でしたが、本番と同じ物を作成する手順なんかもやってみたいです。