WordPressのテーマを実験的に編集してみたい、プラグインを実験的に導入したい、なんてことは結構あると思います。 しかしながら本番環境を直接いじってしまうとサービスに支障をきたしてしまったりセキュリティ的に問題が発生してしまうことがあるでしょう。
そこでローカルにWordPressの環境をそのままコピーすることができたら便利ですよね。 今回はDockerを使ってWindowsなどのパソコンでも簡単にローカルにWordPress環境を複製する方法を紹介します。
Dockerとは?
最近学生エンジニアとしていくつか企業案件をこなしているのですが、とあるWordPressの案件においてローカルに環境を複製する必要が出てきましたのでいろいろ調べていたのですが、そんな中でDockerというシステムを利用するのが最適だということが分かりました。
私自身もDockerについてはまだ初心者ですので、そもそも何なのかについて調べてみました。
コンテナ技術の一つ
Dockerはコンテナ技術の一つです。一つの物理サーバー(パソコン)の上で複数の環境を構築するとき、主に二つ方法があります。
- 仮想化:ホストOS上にハイパーバイザーという仮想化のためのソフトウェアを組み込み、その上で仮想マシンを建ててゲストOSをインストールし、アプリを動かす
- コンテナ:ホストOS上にコンテナのエンジンをインストールすると、その上にゲストOSをインストールすることなく、直接ミドルウェア等を動作させることができる
早い話、
仮想化ではホストOSの上にさらに仮想マシンを建ててその上にOSを建てて… といかにも重たくなりそうなことをしないといけないのに対して、
コンテナでは専用のエンジンをインストールするだけで、その上ですぐにApache(Webサーバー)等のミドルウェアを動かすことができ、比較的軽く動作する上に、ちゃんと環境を分けることができるという優れものです。
環境を共有できる
Dockerではコンテナ技術を用いることで手軽に、より軽量な仮想環境を作ることができるわけですが、作った環境をコード化して共有することができます。
そしてそれを配布することで、他の人のDockerエンジンの上でも同じような環境をすぐに作り出すことができます。 Dockerエンジンをインストールしてしまえば、その上のプログラムはOSに依存することなく動作しますのでWindowsやMac等関係なくみんなで環境を共有することができるという優れものですね。 クロスプラットフォーム対応というやつでしょうか。
Dockerの詳しい説明については以下の記事で行われていますので、ぜひご覧ください。
https://knowledge.sakura.ad.jp/13265/
Dockerをインストールする方法
DockerはWordPressの環境複製以外にも、様々な場面で役に立つので是非導入しておきましょう。
導入方法はそこまで難しくはありません。Windowsの場合、公式ページからインストーラーをダウンロードして実行するだけですね。
https://www.docker.com/products/docker-desktop/
また、具体的な導入方法については以下の記事で丁寧に解説されているので、ぜひ参考にしてください。
https://zenn.dev/longbridge/articles/d9f544f5b4cb82
> docker --version
WindowsのPowershellなどで上のように入力してしっかりとバージョンが表示されたら大成功です。コマンドプロンプトでも動かせますが、Powershellの方が使いやすいのでお勧めです。
WordPress環境をローカルに複製する方法
続いて、Dockerを使って簡単にWordPress環境をローカルに複製する方法を紹介します。
サイトコンテンツをローカルに取り込む
WordPressを構成するファイルはたくさんありますが、その中でもサイトによって異なるのが
- wp-contentフォルダ:テーマ、プラグイン、画像が収容されている
- wp-config.php:WordPressのデータベースの設定等が格納されている
- データベース:記事情報やユーザーの情報等が格納されているデータベース
の三つになります。あとは.htaccess等のApacheの設定ファイルもサイトによって異なると思いますが、こちらはローカルに複製するときにそのままだとうまく動作しないことが多いので、新しくローカル側に作成しましょう。
サーバーファイルをダウンロード
そしてwp-contentとwp-config.phpに関してはZIPファイル等に圧縮した後に、FTPソフト等を使ってローカルにダウンロードしましょう。

例えばXserverなどのレンタルサーバーでは上の画像のように「ファイルマネージャ」というものがあり、ログインすることで簡単にサーバー内のコンテンツを編集、ダウンロードしたりできます。
また、フォルダごと圧縮することで一括でダウンロードすることもできますね。上の画像だと、右上の「圧縮」というところを選択することで圧縮できます。ただ、wp-contentは比較的データサイズが大きいですので、時間がかかりがちです。
また、同時にwp-config.phpもダウンロードしてしまいましょう。
データベースをダウンロード
記事の情報などが格納されているデータベースに関しては上のようなファイルマネージャからダウンロードすることはできません。SSHでmysqldumpコマンドを使ってデータベースをファイル化し、ダウンロードするか、専用のツールなどを使う必要があります。

例えばXserverなどのレンタルサーバーでは、上のようなサーバーパネルからWordPressのデータベース(~_wp) を.sql形式でダウンロードすることができます。
シェルでやるとしたら
$ mysqldump -u [ユーザ名] -p [データベース名] > [データベース名].sql
このようなコマンドを実行することでsqlファイル化することができます。また、phpMyAdminなどのツールも使うことができますね。
作業フォルダを構築
続いて、ホスト側に作業フォルダを構築していきます。任意の場所に以下のようなファイル構造を作りましょう。
wp/
├ db/
├ [データベース名].sql
├ html/
├ .htaccess
├ wp-content/
├ wp-config.php
├ docker-compose.yml
コンテナの中で仮想のコンピューターが動くイメージなので基本的にホスト側のファイル構造は関係ないのですが、ymlファイルの中でコンテナ内のファイル構造とホスト側のファイル構造をリンクさせるような記述を行うことで、ホスト側でのファイルの変更をそのまま内部に反映できます。
上のwp-content、及びwp-config.php、wp_db.sqlはそれぞれ、先ほど用意したものを入れましょう。
環境設定
そしてあとはwp-config.phpとdocker-compose.ymlを設定していきます。
version: '3.8'
services:
wordpress:
image: wordpress:php7.4-apache
restart: always
ports:
- 8080:80
volumes:
- ./html:/var/www/html
db:
image: mariadb:10.5
restart: always
environment:
MYSQL_DATABASE: [データベース名]
MYSQL_USER: [データベースユーザ名]
MYSQL_PASSWORD: [パスワード]
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- ./db:/docker-entrypoint-initdb.d
上のように、wordpressイメージとmariadb(MySQL)イメージを使ってWordPressが動作する環境を設定します。Apache2、PHP 7.4、およびMariaDB 10.5を利用しています。 このPHPのバージョンやデータベースのバージョン等は状況によって切り替えた方が良さそうですね。
上のデータベース名とデータベースユーザ名、パスワードに関してはwp-config.phpに載っていますので確認しましょう。
// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define( 'DB_NAME', "[データベース名]" );
/** MySQL データベースのユーザー名 */
define( 'DB_USER', "[データベースユーザ名]" );
/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', "[パスワード]" );
/** MySQL のホスト名 */
define( 'DB_HOST', "db" );
/** データベースのテーブルを作成する際のデータベースの文字セット */
define( 'DB_CHARSET', 'utf8' );
/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define( 'DB_COLLATE', '' );
上のデータベース名、データベースユーザ名、パスワードにあたる部分をそれぞれそのまま上のymlファイルの該当箇所に入力します。
また、ホスト名に関してはlocalhostになっていたりしますが、これはdbに変更します。
加えて、データベースファイルも少しいじってサイトのURL設定を変更します。sqlファイルをそのままVSCodeなどのエディタで編集しましょう。
LOCK TABLES `wp_options` WRITE;
/*!40000 ALTER TABLE `wp_options` DISABLE KEYS */;
INSERT INTO `wp_options` VALUES (1,'siteurl','http://localhost:8080','yes'),(2,'home','http://localhost:8080','yes')
上のように、wp_optionsについて記述されているところの最初のところですね。ここのsiteurlとhomeをいずれもhttp://localhost:8080に変更します。
なお、sqlファイルは非常に長いので、エディタの検索機能等を使った方が良いです。
また、.htaccessファイルも編集しておきましょう。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
上はWordPress標準のコードです。 他にも状況に応じて追記するようにしましょう。
コンテナを作成・起動
WindowsだったらPowershellを起動して、以下のようにコンテナを起動します。
> cd [ymlファイルがあるディレクトリのパス]
> docker-compose up -d
cdコマンドを使って作業ディレクトリに移動した後に、その場所でdocker-composeコマンドを使ってイメージの作成、コンテナの作成及び起動を一括で行っている感じです。 -dオプションはバックグラウンドで動かすという意味ですね。
そして実行してRunning 3/3みたいなのが出てきたらひとまずは成功です。
アクセスしてみる
http://localhost:8080
Google Chrome等のブラウザを開いて、上のアドレスにアクセスします。 そしてサイトのトップページが表示されたら成功です。
http://localhost:8080/wp-login.php
上のページからログインページにアクセスすることができます。WordPressのデータベースをそのままローカルにコピーしただけなので、当然ながらユーザ情報も同じであり、本番環境と同じユーザ名・パスワードでログインすることができます。
これでローカルに本番環境を複製することができました。これで検証し放題ですね。なお、一部URLなどがまだ本番環境にリンクしてしまっていたりすると思うので、適宜変更するようにしましょう。とはいえプラグインの検証くらいだったらこのままでも大丈夫そうです。