docker-composeを使ってec-cube3環境を構築

#概要
今更ながら、Docker環境にec-cube3をインストールしてみた。
[Docker pull commit push Dockerfile EC-CUBE3環境をつくる](http://qiita.com/cyberblack28/items/df5abcdcb7097de1017f)
を参考にし、CentOS７上に乗せてみた。
昔と比べて色々ディストリビューションもUpgradeされていて、Dockerと関係ない箇所で躓いたりしていたので
備忘録的に記載します。

#環境
まずは１コンテナに以下をインストールする。
Apache 及び MySQLは現時点でのDefaultで、Version指定はしていない。
 -  HostOS:CentOS7(Vagrantを使用）
 -  GuestOS:CentOS7
 -  Mysql:5.7.13
 -  PHP:5.6
 -  Apache:2.4.6
 -  EC-CUBE:３.10

#ファイル構成

root/
　└ centos7-default/
　　　└ Dockerfile
　└ centos7/
　　　└ Dockerfile
　└ eccube/
　　　└ boot.sh
　└ docker-compose.yml


   
#インストール方法

### docker-composeをHost OSにインストール
省略


###CentOS７周りの設定
DefaultではSystemdでは動かないので

 - [Official Image](https://hub.docker.com/_/centos/)
 - [CentOS 7のDockerコンテナ内でsystemdを使ってサービスを起動する](http://qiita.com/yunano/items/9637ee21a71eba197345)
 
を参考に

```shell-session:centos7-default/Dockerfile

FROM centos:centos7

MAINTAINER hiabe
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; \
for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*; \
yum update -y; \
# 後でMySQLをインストールするためここでWGET,EPEL,Remiを追加
yum install -y wget epel-release; \ 
cd /etc/yum.repos.d; \
wget http://rpms.famillecollet.com/enterprise/remi.repo; 

VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]

```
でとりあえずこれを

```
docker build --rm -t hiabe/centos7-systemd
```

として一旦保存し、

```shell-session:centos7/Dockerfile
FROM hiabe/centos7-systemd

MAINTAINER hiabe
RUN yum -y install httpd mod_ssl \
&&  yum localinstall -y http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm \
&&  yum -y install mysql-community-server
#RUN /bin/cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

#Install php5.6
RUN yum install -y --enablerepo=remi --enablerepo=remi-php56 php php-common php-mbstring php-gd php-xml php-xmlrpc php-devel php-cli php-pdo php-pgsql php-mysql php-odbc php-pear php-mcrypt php-pecl-apc

#Install composer
#RUN curl -sS https://getcomposer.org/installer | php \
#&& mv composer.phar /usr/local/bin/composer

#set the files for EC-CUBE
WORKDIR /tmp/
RUN yum -y install unzip \
&& wget http://downloads.ec-cube.net/src/eccube-3.0.10.zip \
&& unzip eccube-3.0.10.zip \
&& rm -f eccube-3.0.10.zip \
&& mv eccube-3.0.10 /var/www/html/ec-cube \
&& chown -R apache:apache /var/www/html/ec-cube

#httpd.conf
RUN sed -i -e 's#DocumentRoot "/var/www/html"#DocumentRoot "/var/www/html/ec-cube/html"#g' -e 's#<Directory "/var/www/html">#<Directory /var/www/html/ec-cube/html">#g' -e 's#Options Indexes FollowSymLinks#Options -Indexes +FollowSymLinks#g' -e 's#AllowOverride None#AllowOverride All#g' /etc/httpd/conf/httpd.conf

#mysqld
RUN systemctl enable mysqld.service \
&& systemctl enable httpd.service

EXPOSE 80 443

#mysqld,httpdの起動スクリプトの実行
CMD ["/usr/sbin/init"]
```

そしてこれを起動する。私はdocker-composeを使って起動、Installについては省略

```yaml:docker-compose.yml
centos7:
  build: centos7/
  ports:
    - 8080:80
  container_name: centos7d
  privileged: true
```

```
docker-compose up -d
```
MySQLは現時点ではdefault install であるため、root passwordをログより取得する。

```
docker exec -it centos7d /bin/bash

[root@946674c53ed1 tmp]# cat /var/log/mysqld.log|grep 'password is generated'
2016-07-08T02:54:35.453152Z 1 [Note] A temporary password is generated for root@localhost: /H%_)2o+LkU(
exit
```
こんな感じなので、以下のようなshellを用意する。
[こちら](http://qiita.com/liubin/items/3722ab10a73154863bd4)にあるようにPasswordのPolicyが変更されているようなので注意が必要

```bash:eccube/boot.sh
#!/bin/bash
localectl set-locale LANG=ja_JP.UTF-8
echo 'run /usr/sbin/init'
/usr/sbin/init
echo `ls -l /var/log/mysqld.log`
echo `cat /var/log/mysqld.log |grep 'A temporary password is generated' `
MYSQLPASS=`cat /var/log/mysqld.log |grep 'A temporary password is generated '|sed 's/\(.*\)localhost\: //g'`
MYSQLNEWPASS='rootP@ss01'
ECCUBEPASS='eccubeP@ss01'
#changed root password
/usr/bin/mysql -u root -p$MYSQLPASS --connect-expired-password -e "ALTER USER root@localhost IDENTIFIED BY \"$MYSQLNEWPASS\""
echo "Changed root password"
#create user for EC-CUBE
/usr/bin/mysql -u root -p$MYSQLNEWPASS --connect-expired-password -e "CREATE DATABASE IF NOT EXISTS eccube_db; GRANT ALL PRIVILEGES ON eccube_db.* TO 'eccube'@'localhost' IDENTIFIED BY \"$ECCUBEPASS\"; FLUSH PRIVILEGES;"
```

###docker-compose.ymlの修正(command を overwrite)

```yaml:docker-compose.yml
centos7:
  build: centos7/
  ports:
    - 8080:80
  volume:
    - ./eccube:/tmp/eccube
  container_name: centos7d
  privileged: true
  command: /bin/bash /tmp/eccube/boot.sh
```

###エラー発生

```bash
docker-compose up
.....
centos7d | Couldn't find an alternative telinit implementation to spawn.
.....
```
###問題回避
現時点では解決方法がわからないので、仕方なく起動後にshellを実行する。
commandをコメントアウト。

```yaml:docker-compose.yml
centos7:
  build: centos7/
  ports:
    - 8080:80
  volume:
    - ./eccube:/tmp/eccube
  container_name: centos7d
  privileged: true
# docker run 後に以下のshellを実行
# command: /bin/bash /tmp/eccube/boot.sh 
```

###boot.sh起動によるDB周りの設定

```bash
docker-compose stop
docker-compose build
docker-compose up -d
docker exec -it centos7d /bin/bash

[root@946674c53ed1 tmp]# sh /tmp/ec-cube/boot.sh

#新rootpasswordでログイン

ｍｙｓｑｌ>exit

#今度はeccube用のDBへ接続、同じくログインできればOK
/usr/bin/mysql -u eccube -peccubeP@ss01 eccube_db

ｍｙｓｑｌ>exit
```


###動作確認
http://192.168.33.10:8080/install.php
にて問題なく画面が表示されればOK