コンテナを2つ作成し、

一つはPHP7の環境にSOY CMSを入れたコンテナで、

もうひとつはMySQLのコンテナ

Dockerで構築したPHP7の環境でSOY CMSを動かしてみる

Dockerで作ったMySQLのコンテナにホストからアクセスしてみる


docker-composeでコンテナを作成して、

SOY CMSのコンテナからMySQLのコンテナのデータベースを利用する。

Docker Compose


いろいろと苦戦したが、成功した方法だけ残す。




docker-compose用にHOMEディレクトリにdockerディレクトリを作成し、

下記のようにファイルを配置した


docker/
├── docker-compose.yml
├── mysql
│   ├── Dockerfile
│   └── charset.cnf
└── php
├── Dockerfile
└── php.ini

docker-compose.ymlの記述は一旦置いといて、

mysqlのDockerfileから見てみると、


mysql/Dockerfile

FROM mysql

COPY charset.cnf /etc/mysql/conf.d/

こんな感じで以前と変わらず。

charset.cnfの記述を少し変えた。


mysql/charset.cnf

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8

bind-address=172.19.0.2

公式のMySQLのイメージでは、bind-addressがコメントアウトになっているので、bind-addressを追加して指定した。

ここで決めたアドレスは、一度、コンテナを作成してみた時に振られたアドレスを指定してみた。


コンテナ作成後、コンテナにログインして、


cat /etc/hosts

をしてみると、コンテナのアドレスを確認できる。


続いて、PHPの方を見てみる。


php/Dockerfile

#ubuntu 最新版
FROM php:apache

RUN apt-get update
RUN docker-php-ext-install mbstring pdo pdo_mysql

COPY php.ini /usr/local/etc/php/php.ini

こんな感じ。

PHPの設定でかなりはまったんだけど、

公式のPHPのイメージは標準設定でpdo_sqliteの設定は最初からあって、

pdo_mysqlの設定はないという罠があった。


普通に考えたら、SQLiteだけあるのは当たり前なんだけど、

ここに気付くまでに半日近くかかった。


最初からphpinfo()を確認しろよな。


php.iniの方は以前と同じで、


php/php.ini

error_log=/var/log/apache2/error.log
error_reporting=E_ERROR | E_WARNING | E_PARSE
display_errors=1
log_errors=0

こんな感じにしておいた。


ここまで準備出来たら、

dockerディレクトリに戻り、docker-compose.ymlを作成する。


docker-compose.yml

version: '2'
services:
mysqlserver:
build: ./mysql
ports:
- '12345:3306'
environment:
MYSQL_ROOT_PASSWORD: pass
volumes:
- /var/lib/mysql
phpserver:
build: ./php
ports:
- '8081:80'
volumes:
- /home/saito/workspace/docker/soycms:/var/www/html
links:
- mysqlserver:mysql

※詳しい説明は省略


ファイルを保存後、


docker-compose up

このコマンドで2つのコンテナを作成し、


docker-compose ps
Name             Command             State              Ports
-------------------------------------------------------------------------
docker_mysqlserv   /entrypoint.sh     Up                 0.0.0.0:12345->3
er_1               mysqld                                306/tcp
docker_phpserver   apache2-foregrou   Up                 0.0.0.0:8081->80
_1                 nd                                    /tcp 

新しい端末を開き、コンテナが作成され、動いていることを確認する。


今回はdocker-compose.ymlでデータベースの作成を行っていないので、

MySQLのコンテナに入り、直接データベースを作成する。


docker exec -it docker_mysqlserver_1 bash

上記コマンドでMySQLのコンテナにログインし、


mysql -u root -p
mysql > CREATE DATABASE docker_env;

docker_envというデータベースを作成。




SOY CMSの方のMySQLの設定を行う。

MySQL版のSOY CMSをPHPの方のコンテナのルートディレクトリに配置し、


/common/config/db以下にあるmysql.sample.phpをmysql.phpにリネームし、下記の様に修正する


// mysql configuration - start
define("ADMIN_DB_DSN","mysql:host=172.19.0.2;port=3306;dbname=docker_env");
define("ADMIN_DB_USER","root");
define("ADMIN_DB_PASS","pass");
// mysql configuration - end

とする。


ここで注意なのが、

ホストからMySQLのコンテナにアクセスする時は、

ホストが127.0.0.1で、

ポートがコンテナ作成時に決めた値(前の記事でも12345と指定)でログインしたけど、

12345:3306


今回は、bind_addressで指定したアドレスと、

コンテナ内のポートを指定する必要があった。

※12345:3306


ここまでできたので、ブラウザでPHPの方のコンテナを開いてみる。

http://localhost:8081/cms/adminまたはhttp://172.19.0.2/cms/admin

※後者はコンテナ作成時に振られたアドレス



初期管理者を作成します画面が表示され、

データベースが開けないよ系のエラーメッセージが表示されていなければ成功です。


これでPHP7でSOY CMS MySQL版の動作も確認できるようになった。


さくらのVPSにPHP7を入れてSOY CMSを動かしてみたでも書きましたが、

PHP7の環境でSOY CMSを動かすためにいくつかのファイルを修正しました。


修正内容はGitHubに置いてあります。

https://github.com/inunosinsi/soycms