docker
docker-compose
EC-CUBE3

Docker-ComposeでEC-CUBE

前回Docker-Composeで構成を作ったのですが
EC-CUBE用に設定を色々入れていたので、改めてまとめ直し

オフィシャルコンテナに追加で組み込み/有効にしなければいけなかったもの

Apache2

  • mod_rewrite

PHP

  • PDO
  • PDO_MySQL
  • ZIP

MariaDB

+ bind-addressとskip-networkingをコメントアウト
現行のイメージでは上記設定は必要なくなっているようです

設定

PHP+Apacheコンテナ

Dockerfile-PHP
FROM php:7.1-apache
RUN apt-get update && apt-get install -y \
       apt-utils \
       zlib1g-dev \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

RUN docker-php-source extract \
    && docker-php-ext-install pdo pdo_mysql \
    && docker-php-ext-install zip \
    && docker-php-ext-install opcache
RUN pecl install apcu
RUN echo "extension=apcu.so" > /usr/local/etc/php/conf.d/apcu.ini
RUN a2enmod rewrite

MariaDBコンテナ

Dockerfile-DB
FROM mariadb:10
RUN  sed -Ei 's/^(bind-address|skip)/#&/' /etc/mysql/my.cnf

現在は別途BUILDする必要なし

Docker-Compose

docker-compose.yml
    php:
        build:
            context: ./php
            dockerfile: Dockerfile-PHP
        depends_on:
            - db
        volumes:
            - type: bind
              source: /var/vm/eccube-3.0.15
              target: /var/www
        ports:
            - target: 80
              published: 80
              protocol: tcp
              mode: host
        logging:
            driver: "json-file"
            options:
                max-size: "10M"
                max-file: "10"
    db:
        build:
            context: ./db
            dockerfile: Dockerfile-DB
        volumes:
            - type: bind
              source: /var/vm/db
              target: /var/lib/mysql
        environment:
            MYSQL_ROOT_PASSWORD: ROOTPW
            MYSQL_USER: test
            MYSQL_PASSWORD: TESTPW
            MYSQL_DATABASE: eccube_test
        ports:
            - target: 3306
              published: 3306
              protocol: tcp
              mode: host
        logging:
            driver: "json-file"
            options:
                max-size: "10M"
                max-file: "10"

まとめ

mod_rewrite

http://example.jp/hoge/ と来たアクセスを書き換えて、http://example.jp/index に渡している為、モジュールを有効にしていないと動かない

他のモジュール

PHPのコンテナは、組み込むモジュールを全部列挙ではなく、オフィシャルの状態から追加したいモジュールを追加で入れる

DB

bind-addressが効いているので、他のコンテナからTCP/IPで接続しようとすると弾かれてしまう、共通のボリューム追加してUNIXドメインソケット接続に…とも思いましたが、今回はこれで

インストーラ

WEBインストーラー経由でDB名などのセットアップを行います
http://localhost/install.php

environmentは.envに持っていくほうがよさげ