このブログはWordPressで構成していますが、運用しているとやっぱりあんなことしたい、こんなことしたいが出てきます。公開されているプラグインで事足る場合もありますが、自分がやりたいことと少し違うんだなー・・・がぼちぼちあったりします。
ということで、いろいろやりたいことをまとめた自分用プラグインを作ってみることにしました。PHPはともかくWordPressのカスタマイスはどどどどど素人なので不安しかありませんが
なぜプラグイン?
特に理由はありません!
いえ、ちょっとだけあります・・・DBにデータ保存する必要があるのですが、テーブルの作成・削除はプラグインの有効化・無効化・アンインストールのタイミングに合わせて管理できたほうがすっきりするかなというくらいの判断です。どうせ実装するなら最初からプラグイン形式でやってみようという感じです。
PCにWordPressのローカル環境を準備する
こうなると開発環境が必要になりますね。簡単に構築する方法としてLocalWPを使う方法もあるようですが、どうやらDocker HubにWordPressの公式イメージがあるようなので今回はDockerで構築したいと思います。
Docker本体の準備
Dockerを利用するにはPCにDocker Desktopが必要です。筆者のPCには下記の記事でやった時にすでにインストールしているのでココはskipしちゃいます。
docker-compose.yamlを準備する
記事作成時点でこのWordPressが動いている環境と合わせて以下のバージョンで準備します。PhpMyAdminはDBが見れればいいので最新版を使うことにします。
- WordPress 6.9.4
- PHP 8.5
- MySQL(MariaDB 10.5)
- PhpMyAdmin 最新版
PC上にプロジェクトを作成するフォルダーの場所を決めて、そこにdocker-compose.yamlというファイルを作成します。今回はD:\wordpressにフォルダーを準備しました。このファイルに下記を記載していきます。
以降「コンテナ」という言葉が出てきますが、PC内に別の独立したマシンを立ち上げるようなイメージで読んでもらえると分かりやすいと思います。
共通の記載
まずファイル全体の骨格となる部分から書いていきます。
services:
# WordPressコンテナの記載
# MySQL(MariaDB)コンテナの記載
# phpMyAdminコンテナの記載
networks:
wp-network:
driver: bridge
volumes:
db_data:
- services:
これから動かすコンテナ(サービス)達を定義するよ、という宣言です。
docker-compose.yamlの先頭に必要な記載だという風に思ってもらっていいと思います。 - networks:
wp-network:
driver: bridge
wp-networkという名前でコンテナ間で通信できるようにする一般的な「ブリッジ」という形式のネットワークを作成します。 - volumes:
db_data:
共通というよりどちらかといえばMySQL(MariaDB)の設定に近いですが、コンテナの外側にある記載なのでここにまとめました。
db_dataという名前でDockerが管理する領域にデータを保管するように指定しています。いわゆるデータ永続化です。
Webサーバー + PHP + WordPress
Docker Hub公式のWordPressイメージを指定してWordPressのコンテナを作成する記載です。これによってApach + PHP + WordPressが1つのコンテナ内に構成されます。
wordpress:
image: wordpress:6.9.4-php8.5-apache
container_name: wp-app
depends_on:
- db
ports:
- "80:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: 【DBユーザー名】
WORDPRESS_DB_PASSWORD: 【DBパスワード】
WORDPRESS_DB_NAME: 【DB名】
volumes:
- ./wordpress_files:/var/www/html
networks:
- wp-network
- wordpress:
サービス名です。自由に命名して大丈夫です。 - image:
Docker Hub公式のWordPressイメージのタグページでインストールしたい構成、バージョンを探します。
そこにあるdocker pull wordpress:********のdocker pull以降を指定します。 - container_name:
コンテナ名です。自由に命名して大丈夫です。指定しないと自動で名前がつきます。 - depends_on:
dbサービスが先に起動してからwordpressのサービスを起動するようにします。 - ports:
“80:80“でPC側の80番ポートにアクセスするとコンテナの80番ポートに繋がるようにします。 - restart:
alwaysでPCの再起動時やエラー停止時に自動でコンテナを再起動するようになります。 - environment:
DBに接続するための設定です。
WORDPRESS_DB_HOSTには後ほど設定するMySQL側のサービス名:MySQL側のポート番号を指定します。
【DBユーザー名】、【DBパスワード】、【DB名】についてもMySQL側で設定した値を指定してください。 - volumes:
./wordpress_files:/var/www/htmlで自分のPCのカレントディレクトリにあるwordpress_filesフォルダをコンテナ内のWordPress本体と同期させます。 - networks:
共通の記載のnetworksで設定したネットワークに参加します。コンテナ(ここではWordPressとMySQL(MariaDB)とphpMyAdmin)は別マシンみたいな形になりますが、すべてに同じネットワークを指定することで簡単にコンテナ間でやり取りできるようになるのがDockerの便利なところですね!
volumesのコンテナ内パス(/var/www/html)は公式イメージの仕様に依存するため変更しないほうが無難です。PC側のフォルダー名は自由に変更できます。
MySQL(MariaDB)
Docker Hub公式のMariaDBイメージを使います。WordPressが実際にデータを読み書きするDBのコンテナです。
db:
image: mariadb:10.5
container_name: wp-mariadb
restart: always
environment:
MARIADB_ROOT_PASSWORD: 【管理者パスワード】
MARIADB_DATABASE: 【DB名】
MARIADB_USER: 【DBユーザー名】
MARIADB_PASSWORD: 【DBパスワード】
volumes:
- db_data:/var/lib/mysql
networks:
- wp-network
- db:
サービス名です。他のコンテナからこの名前でアクセスできます。 - image:
MariaDBのバージョン10.5の公式イメージを使用します。 - container_name:
コンテナ名を指定します。指定しない場合自動で名前がつきます。 - restart:
alwaysでPCの再起動時やエラー停止時に自動でコンテナを再起動するようになります。 - environment:
コンテナ内の環境変数(設定値)です。- MARIADB_ROOT_PASSWORD: 管理者(root)のパスワード。
- MARIADB_DATABASE: 初回起動時に作成されるデータベース名。
- MARIADB_USER: WordPressが利用する一般ユーザー名。
- MARIADB_PASSWORD: WordPressが利用する一般ユーザーのパスワード。
- volumes:
db_data:/var/lib/mysqlでコンテナ内のDBデータをDockerが管理する領域(コンテナの外側)に保存するようにします。 - networks:
wordpressのサービスと同じネットワークを設定します。
volumesを設定しないとコンテナ削除時にDBのデータも一緒に消えてしまいます。必ず設定しておきましょう。
phpMyAdmin
Docker Hub公式のphpMyAdminイメージを指定してphpMyAdminのコンテナを作成する記載です。
phpmyadmin:
image: phpmyadmin
container_name: wp-phpmyadmin
ports:
- "8080:80"
environment:
PMA_HOST: db
PMA_PORT: 3306
depends_on:
- db
networks:
- wp-network
- phpmyadmin:
サービス名です。 - image:
実行時点で最新のphpMyAdminを使用する指定です。 - container_name:
コンテナ名を指定します。指定しない場合自動で名前がつきます。 - ports:
“8080:80″でブラウザでlocalhost:8080にアクセス可能となります。 - environment:
- PMA_HOST: Mysql(MariaDB)のサービス名のdbを指定します。
- PMA_PORT: 同上のポート番号を指定します。
- depends_on:
dbサービスが先に起動してからwordpressのサービスを起動するようにします。 - networks:
wordpressのサービスと同じネットワークを設定します。
dockerのコマンドを実行してコンテナを起動する
docker-compose.yamlを分割して説明していたので、ひとまずフルバージョンを載せておきます。【】 部分をご自身の設定値に置き換えてそのまま使えます。
services:
wordpress:
image: wordpress:6.9.4-php8.5-apache
container_name: wp
depends_on:
- db
ports:
- "80:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: 【DBユーザー名】
WORDPRESS_DB_PASSWORD: 【DBパスワード】
WORDPRESS_DB_NAME: 【DB名】
volumes:
- ./wordpress_files:/var/www/html
networks:
- wp-network
db:
image: mariadb:10.5
container_name: wp-mariadb
restart: always
environment:
MARIADB_ROOT_PASSWORD: 【管理者パスワード】
MARIADB_DATABASE: 【DB名】
MARIADB_USER: 【DBユーザー名】
MARIADB_PASSWORD: 【DBパスワード】
volumes:
- db_data:/var/lib/mysql
networks:
- wp-network
phpmyadmin:
image: phpmyadmin
container_name: wp-phpmyadmin
ports:
- "8080:80"
environment:
PMA_HOST: db
PMA_PORT: 3306
depends_on:
- db
networks:
- wp-network
networks:
wp-network:
driver: bridge
volumes:
db_data:
PowerShellまたはコマンドプロンプトでdocker-compose.yamlがあるフォルダー(今回はD:\wordpress)に移動して以下のコマンドを実行します。
docker compose up -d
[+] up 45/45
✔ Image wordpress:6.9.4-php8.5-apache Pulled 22.4s
✔ Image mariadb:10.5 Pulled 19.9s
✔ Image phpmyadmin:latest Pulled 20.7s
✔ Network wordpress_wp-network Created 0.0s
✔ Volume wordpress_db_data Created 0.0s
✔ Container wp-mariadb Started 0.8s
✔ Container wp Started 0.5s
✔ Container wp-phpmyadmin Started 0.5s
これで下記でアクセスするとローカルで動作する環境にアクセス可能です。
- http://localhost/ → WordPress
- http://localhost:8080/ → phpMyAdmin
初回アクセス時はWordPressのインストール画面が表示されます。言語やサイト名・管理者アカウントを設定すればローカルのWordPressが使える状態になりますよ。
次回のvol.2では実際にプラグインのひな形を作る予定です!


