誰でも簡単にDockerを使ってWordPress開発できる環境を考えてみました。Dockerの知識は必要最低限で済むはず。
メリット
- gitでデータベースを含む全ての状態を管理できる
- 環境に依存せず、本番環境にも展開しやすい
デメリット
- SQLダンプはマージできないので、DBに関係する作業は並行開発できない
想定環境
- MacOSX + docker-toolboxを想定
- 事前にdocker-toolboxをインストールしておく
サンプルコード
- 以下の4つのファイルを
project
フォルダ内に作成する -
!pass!
にはパスワードが入る - WordPress4.5.2 + Apacheの構成
- WORDPRESS_DEBUG環境変数でデバッグモードを有効化している
docker-compose.yml
mysql:
build: mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: !pass!
wp:
image: bakudankun/wordpress-ja:4.5.2-apache
links:
- mysql:mysql
ports:
- "80:80"
volumes:
- "${PWD}/wp-content/:/var/www/html/wp-content"
environment:
# wp-configのデバッグ機能を有効化
- WORDPRESS_DEBUG: "true"
phpmyadmin:
image: phpmyadmin/phpmyadmin:4.6.2-3
links:
- mysql:db
ports:
- "8888:80"
environment:
PMA_USER: root
PMA_PASSWORD: !pass!
MySQLのDockerfile
公式のmysqlイメージへ、初期化時のデータベースとしてdb_dump.sql
をつっこんでいる。db_dump.sql
はデータベースの保存をする度に上書かれる。
# デプロイ先に合わせて決めておく。仮にさくらのレンタルサーバだと2016年6月現在5.5系となる
FROM mysql:5.5
# SQLダンプを初期化時に読み込む
ADD db_dump.sql /docker-entrypoint-initdb.d
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8;
get-dump.sh
動作中のmysqlコンテナからSQLダンプを作成し、mysql/db_dump.sqlを上書きします。
docker exec ${PWD##*/}_mysql_1 sh -c 'exec mysqldump --databases wordpress -uroot -p"$MYSQL_ROOT_PASSWORD"' > mysql/db_dump.sql
使い方
まずはdocker-machine
でVMを立ち上げ、Dockerクライアントから接続できるようにしておく。
docker-machine start default
# ターミナル再起動
# docker psでエラーが出ないことを確認する
docker ps
適当なフォルダ内(ここではproject
とする)にdocker-compose.yml
とmysql/Dockerfile
、mysql/db_dump.sql
を作成し、docker-compose.yml
の階層で次を実行する。
# buildを付けないとダンプを更新しても反映されない
docker-compose up -d --build
VirtualBoxでVMの設定を開き、アダプター1のポートマッピングを適当に設定する。以下は一例:
上の例では、各アプリケーションには次のアドレスでアクセスできる。
アプリケーション | アドレス |
---|---|
WordPress | http://localhost:10080 |
phpMyAdmin | http://localhost:18888 |
コンテナを終了したくなったら次を実行する。この操作をするとデータベースの内容は初期化される。データベースを保存する方法は、後述の「データベースの保存」を参照。
docker-compose stop && docker-compose rm -f
データベースの保存
コマンドラインでやる
mysqlコンテナ動作中に、サンプルコードのget-dump.sh
を実行する。
phpMyAdminからGUIでやる
phpmyadminへアクセスし、データベースを選択しない状態でSQLダンプをダウンロードする。
ダウンロードしたSQLファイルをdb_dump.sql
に改名してmysql/db_dump.sql
に上書く。
テーマの開発
wp-contentディレクトリ以下にファイルができるので、それを編集すると即座に反映される。普通にgitコミットして管理できる。
デフォルトのテーマを消したくなるが、イメージの仕様上再起動すると復活してしまうため、無視する。(.gitignore
推奨)
本番への展開
-
WordMoveを使ってURL部分を置き換え、
db_dump.sql
を本番のMySQLにインポートする -
wp-content
以下を本番のWordPress環境に上書く