コンテナを2つ作成し、
一つはPHP7の環境にSOY CMSを入れたコンテナで、
もうひとつはMySQLのコンテナ
Dockerで構築したPHP7の環境でSOY CMSを動かしてみる
Dockerで作ったMySQLのコンテナにホストからアクセスしてみる
docker-composeでコンテナを作成して、
SOY CMSのコンテナからMySQLのコンテナのデータベースを利用する。
いろいろと苦戦したが、成功した方法だけ残す。
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