古いWordPressサイトのアップデート作業をすることになり、ローカルに本番と近い環境を構築する必要がありました。
今回の本番環境はこちらです。
- WordPress 5.6.40
- PHP 5.6.40
いきなり本番環境でPHPやWordPressをアップデートするのは怖いので、まずはローカル環境にサイトを複製して検証してからアップデートすることにしました。
普段はMAMP PROを使っているので、最初はMAMPでPHP 5.6環境を作ろうとしたのですが、ここで問題が発生。
現在使用しているMAMP PRO 7.4では、追加できるPHPのバージョンがPHP 7.1以降となっており、PHP 5.6を選択できませんでした。
そこで今回は、勉強も兼ねてDockerを使ってPHP 5.6のWordPress環境を構築してみます。
今回使用したMac
今回使用した環境はこちらです。
- Intel MacBook Air
- macOS 15.7.7
- MAMP PRO 7.4
- Docker Desktop
- Docker 29.7.2
- Docker Compose v5.4.0
Apple Silicon MacではなくIntel Macでの作業になります。
Intel MacがDockerに対応しているか確認する
まず、MacがDockerを動かせる環境なのか確認しました。
ターミナルを開いて、以下を実行します。
sysctl kern.hv_support
今回の環境では、
kern.hv_support: 1
と表示されました。
1になっていれば、Macの仮想化機能が利用できます。
続いてmacOSのバージョンも確認しました。
sw_vers -productVersion
結果はこちら。
15.7.7
問題なさそうなのでDocker Desktopをインストールします。
Docker Desktopをインストールする
Docker公式サイトからDocker Desktop for Macをダウンロードします。

今回はIntel Macなので、Intel Chip用を選択しました。
ダウンロードしたDocker.dmgを開き、Docker.appをApplicationsフォルダへ移動します。
その後Docker.appを起動。
Docker Desktop上で「Engine running」と表示されれば、Docker Engine自体は起動しています。

dockerコマンドが見つからない
Docker Engineは起動したのですが、ターミナルで確認してみると、
docker --version
以下のエラーが発生しました。
zsh: command not found: docker
Docker Desktopは起動しているのに、ターミナルからdockerコマンドを利用できません。
Docker CLI本体を確認します。
ls -l /Applications/Docker.app/Contents/Resources/bin/docker
ファイルが存在していたため、/usr/local/bin/から利用できるようにシンボリックリンクを作成しました。
sudo ln -s /Applications/Docker.app/Contents/Resources/bin/docker /usr/local/bin/docker
Docker Composeについても同様に設定します。
sudo ln -s /Applications/Docker.app/Contents/Resources/cli-plugins/docker-compose /usr/local/bin/docker-compose
設定後、
hash -r
を実行して再確認。
docker --version
docker compose version
無事に、
Docker version 29.7.2
Docker Compose version v5.4.0
と表示されました。
docker-credential-desktopのエラーが発生
Dockerが使えるようになったので、定番のhello-worldを実行します。
docker run hello-world
しかし、今度はこちらのエラー。
docker: error getting credentials - err: exec: "docker-credential-desktop": executable file not found in $PATH
Docker本体だけでなく、認証情報を扱うdocker-credential-desktopにもPATHを通す必要がありました。
まずファイルを確認。
ls -l /Applications/Docker.app/Contents/Resources/bin/docker-credential-desktop
存在していたので、こちらもシンボリックリンクを作成しました。
sudo ln -s /Applications/Docker.app/Contents/Resources/bin/docker-credential-desktop /usr/local/bin/docker-credential-desktop
再度、
hash -r
docker run hello-world
を実行。
今度は、
Hello from Docker!
This message shows that your installation appears to be working correctly.
と表示されました。
これでDockerのインストールは完了です。
WordPress用のDocker環境を作る
ここから今回の本題です。
Docker上に、
- WordPress
- PHP 5.6
- Apache
- MySQL 5.7
という環境を構築します。
まず作業用ディレクトリを作成します。
mkdir -p ~/Sites/legacy-wordpress
cd ~/Sites/legacy-wordpress
今回は、
legacy-wordpress
という名前にしました。
普段VS Codeを使っている場合は、
code .
でこのディレクトリをVS Codeから開けます。
compose.yamlを作成する
legacy-wordpressディレクトリ内に、
compose.yaml
を作成します。
内容はこちらです。
services:
db:
image: mysql:5.7
restart: unless-stopped
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
MYSQL_ROOT_PASSWORD: root
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:5-php5.6-apache
restart: unless-stopped
depends_on:
- db
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
volumes:
- wp_data:/var/www/html
volumes:
db_data:
wp_data:
YAMLはインデントに意味があるので、全角スペースなどが入らないよう注意が必要です。
存在しないWordPressイメージを指定してしまった
最初はWordPress 5.6を指定したかったので、
wordpress:5.6-php5.6-apache
というイメージ名を指定していました。
しかし、
docker compose up -d
を実行すると、
failed to resolve reference "docker.io/library/wordpress:5.6-php5.6-apache"
not found
というエラー。
このタグは存在しませんでした。
そこで、
wordpress:5-php5.6-apache
へ変更しています。
古いDockerイメージを使用するときは、「このバージョンならこんなタグだろう」と推測せず、実際に存在するタグを確認した方がよさそうです。
YAMLの書き方でもエラー
途中でcompose.yamlを編集していたところ、
mapping key "volumes" already defined
というエラーも発生しました。
これは同じ階層に、
volumes:
を重複して記述していたことが原因でした。
さらに、
mapping values are not allowed in this context
というエラーも発生。
こちらはYAMLのインデントが崩れていたことが原因です。
YAMLはインデントにかなり厳しいので、ターミナル上のnanoなどで編集するより、VS Codeなどのエディターを使った方が個人的には扱いやすかったです。
設定ファイルが正しく書けているかは、
docker compose config
で確認できます。
DockerでWordPressを起動する
compose.yamlが完成したら、以下を実行します。
docker compose up -d
初回はWordPressやMySQLのDockerイメージがダウンロードされるので、少し時間がかかります。
今回の環境では最終的に、
Image wordpress:5-php5.6-apache Pulled
Image mysql:5.7 Pulled
Network legacy-wordpress_default Created
Volume legacy-wordpress_db_data Created
Volume legacy-wordpress_wp_data Created
Container legacy-wordpress-db-1 Started
Container legacy-wordpress-wordpress-1 Started
となり、無事起動しました。
コンテナの状態を確認する
以下のコマンドで起動状態を確認できます。
docker compose ps
今回の環境では、
legacy-wordpress-db-1 mysql:5.7
legacy-wordpress-wordpress-1 wordpress:5-php5.6-apache
の2つが起動しました。
WordPress側は、
0.0.0.0:8080->80/tcp
となっています。
そのためブラウザから、
http://localhost:8080
へアクセスします。
無事WordPressの初期設定画面が表示されました。
これでMAMPとは完全に独立したWordPress環境をDocker上に構築できました。
PHPのバージョンを確認する
最後に、本当にPHP 5.6で動いているのか確認します。
docker compose exec wordpress php -v
結果はこちら。
PHP 5.6.39 (cli) (built: Dec 29 2018 07:54:03)
Zend Engine v2.6.0
with Zend OPcache v7.0.6-dev
PHP 5.6で動いています。
ただし、今回再現したかった本番環境は、
PHP 5.6.40
です。
今回使用したwordpress:5-php5.6-apacheでは、
PHP 5.6.39
となりました。
完全一致ではありません。
同じPHP 5.6系の最終盤なので、古いWordPressやプラグインの互換性を検証する環境として今回はこのまま使用してみますが、PHP 5.6.40との完全一致が必要な場合は別途Dockerfileを作成するなどの対応が必要になります。
Dockerを使ってみた感想
今回初めてDockerを使ってみました。
最初は、
Docker
Container
Image
Volume
Docker Compose
など聞き慣れない用語が多く、MAMPより難しそうな印象がありました。
ただ、実際にWordPress環境をひとつ作ってみると、Dockerを使うメリットがかなり分かりやすかったです。
例えば、
案件A
PHP 5.6
案件B
PHP 7.4
案件C
PHP 8.3
といった環境を、それぞれ独立して管理できます。
MAMPのPHPバージョンを変更したり、古いMAMPを別途インストールしたりする必要がありません。
特に今回のような「かなり古いWordPressサイトをアップデートするため、一度ローカルに当時の環境を再現したい」という用途には、Dockerはかなり便利そうです。
よく使いそうなDockerコマンド
今回使った中で、今後も頻繁に使いそうなのはこちらです。
Docker環境を起動。
docker compose up -d
コンテナの状態を確認。
docker compose ps
WordPressコンテナのPHPバージョン確認。
docker compose exec wordpress php -v
Docker環境を停止。
docker compose down
再び起動するときは、
docker compose up -d
です。
このあたりを覚えておけば、WordPressのローカル検証環境としてはかなり使えそうです。
まとめ
今回はMAMP PRO 7.4ではPHP 5.6を追加できなかったため、Dockerを使って古いWordPress環境を構築してみました。
最終的には、
Intel Mac
↓
Docker Desktop
↓
WordPress
↓
Apache + PHP 5.6.39
↓
MySQL 5.7
↓
localhost:8080
というローカル環境を構築できました。
Dockerの導入途中では、
zsh: command not found: docker
docker-credential-desktop:
executable file not found in $PATH
wordpress:5.6-php5.6-apache:
not found
mapping key "volumes" already defined
mapping values are not allowed in this context
など、いろいろなエラーにも遭遇しました。
ただ、ひとつずつ原因を確認していけば、Docker未経験でもWordPressを起動するところまで進めることができました。
次は、今回作ったDocker環境に実際の本番WordPressサイトを複製してみたいと思います。
本番サイトを、
WordPress 5.6.40
PHP 5.6系
MySQL 5.7
に近い状態でDockerへ移行し、そこからWordPress・プラグイン・PHPをどの順番でアップデートすれば安全なのか検証していく予定です。