Docker Compose を使って WordPress、MySQL、phpMyAdmin、WP-CLI のローカル環境の構築

2023/03/28(Tue) 19:31:54
以前、知人から WordPress の使い方を教えて欲しいと相談があったので、さくらインターネットに WordPress をインストールしてブログを始めました。その時、知人がカスタムドメインを利用していました。お名前.com で .com ドメインの1年間の更新料金を調べてみると1287円 ~ と安いのに驚きました。1個目の登録料金は0円なので 2022/08/06(Sat) に購入してみました。そのまま塩漬けにしていたのですが、試しに iCloud+ のカスタムメールドメインに設定してみました。次回のブログに書きたいと思います。

お名前.com に500円のクーポンを貰ったので、.jp ドメインを登録してみました。お名前.com にログインして、.jp ドメインの1年間の更新料金を調べてみると 3686円でした。予想した価格と違ったので、自動更新は解除しています。

.com ドメインは所有したいので、下記のように1年間更新してみました。
.net ドメインにも興味があったので、更に登録してみました。.com ドメインを更新したおかげか、登録料は無料でした。1年間の更新料金も妥当なので保持するつもりです。

また、メールとサイトのドメインを分離して運用しようと思っています。

2023/03/28(Tue) 19:33:04
お名前.com サイトに表示されている1年間の更新料金目安

更新料金
.com
1,287円~

.net
1,507円~

.jp
1,276円~

2023/03/28(Tue) 19:33:04
実際の1年間のドメイン更新料金

kyoshiaki.com
ドメイン更新1年		1,408 円 (税込)
Whois情報公開代行		0円 (税込)
サービス維持調整費 ※	253 円 (税込)
お支払い金額		1,661 円 (税込)

kyoshiaki.net
ドメイン更新1年		1,628 円 (税込)
Whois情報公開代行		0円 (税込)
サービス維持調整費 ※	293 円 (税込)
お支払い金額		1,921 円 (税込)

kyoshiaki.jp
ドメイン更新1年		3,124 円 (税込)
Whois情報公開代行		0円 (税込)
サービス維持調整費 ※	562 円 (税込)
お支払い金額		3,686 円 (税込)

さくらインターネットに公開している WordPress やホームページを購入したカスタムドメインに変更しようと模索していました。

一度公開した WordPress サイトのドメインを変更することは、難易度が高そうですが、さくらインターネットの WordPress サイトを Docker 上に再現し、WP-CLI を使ってデータベースを書き換えてみた結果、上手くいきそうです。

大惨事になる可能性もありますが!

2023/03/28(Tue) 19:35:06
kyoshiaki/docker-compose-wordpress: Docker Compose を使って WordPress、MySQL、phpMyAdmin、WP-CLI のローカル環境の構築
https://github.com/kyoshiaki/docker-compose-wordpress

2023/03/28(Tue) 19:35:45
WP-CLI | WP-CLI
https://wp-cli.org/

ドメイン変更の検証のために、上記 URL で公開している docker-compose.yml に WP-CLI を下記 URL を参考に追加してみました。

2023/03/28(Tue) 19:36:40
WP-CLIのDocker公式イメージ「wordpress:cli」の使い方 | SIOS Tech. Lab
https://tech-lab.sios.jp/archives/25369

M2 Pro Mac mini (2023) でコマンド docker-compose up -d を実行すると下記エラーが出るので、

❯ docker-compose up -d

[+] Running 0/1
 ⠙ db Pulling                                                                                                                                                                  3.1s
no matching manifest for linux/arm64/v8 in the manifest list entries

docker-compose.yml ファイルの image: mysql:5.7 を image: mysql:latest に変更しました。

===== docker-compose.yml =====

version: '3.3'

services:
  db:
    image: mysql:5.7

↓

version: '3.3'

services:                                                             
  db:                                                                 
    image: mysql:latest    

通常、WP-CLI をインストールし、WordPress のデーターベースを wp コマンドを使って変更することになります。

さくらインターネットでの場合、WP-CLI コマンド wp はあらかじめインストールされています。

さくらインターネットに ssh ログインし、WordPress のディレクトリに移動した後、下記のように wp コマンドを実行するだけです。

下記例、wp db search kyoshiaki.sakura.ne.jp コマンドは、データーベースに、文字列 kyoshiaki.sakura.ne.jpが含まれるレコードを表示しています。

=== ssh ===

% cd wp

% pwd
/xxxx/xxxx/wp

% ls
index.php               wp-cron.php
license.txt             wp-includes
readme.html             wp-links-opml.php
wp-activate.php         wp-load.php
wp-admin                wp-login.php
wp-blog-header.php      wp-mail.php
wp-cli.local.yml        wp-settings.php
wp-comments-post.php    wp-signup.php
wp-config-sample.php    wp-trackback.php
wp-config.php           xmlrpc.php
wp-content

% wp db search kyoshiaki.sakura.ne.jp

wpxxxxxacomments:comment_author_url
8:http://kyoshiaki.sakura.ne.jp/osx/index.html
wpxxxxxaoptions:option_value
1:https://kyoshiaki.sakura.ne.jp/wp
wpxxxxxaoptions:option_value
2:https://kyoshiaki.sakura.ne.jp/wp
wpxxxxxaoptions:option_value
408:}}s:16:"background_image";s:84:"https://kyoshiaki.sakura.ne.jp/wp/wp-content/uploads/2020/12/advent-57
wpxxxxxaoptions:option_value
410:;s:17:"top_slide_image_1";s:91:"https://kyoshiaki.sakura.ne.jp/wp/wp-content/themes/lightning/assets/i [...] ;s:17:"top_slide_image_2";s:91:"https://kyoshiaki.sakura.ne.jp/wp/wp-content/themes/lightning/assets/i [...] g";s:15:"top_slide_url_2";s:33:"https://kyoshiaki.sakura.ne.jp/wp";s:22:"top_slide_text_title_2";s:18:
wpxxxxxaoptions:option_value

︙

wpxxxxxaposts:guid
1322:https://kyoshiaki.sakura.ne.jp/wp/?p=1322
wpxxxxxaposts:guid
1323:https://kyoshiaki.sakura.ne.jp/wp/?p=1323
wpxxxxxaposts:guid
1324:https://kyoshiaki.sakura.ne.jp/jwp/?p=1324
2023/03/28(Tue) 19:39:17
kyoshiaki/docker-compose-wordpress: Docker Compose を使って WordPress、MySQL、phpMyAdmin、WP-CLI のローカル環境の構築
https://github.com/kyoshiaki/docker-compose-wordpress

上記に公開した docker-compose.yml の場合、

2023/03/28(Tue) 19:40:40
wordpress - Official Image | Docker Hub
https://hub.docker.com/_/wordpress

2023/03/28(Tue) 19:41:14
wordpress/Dockerfile at 809519cc86bee0d6c7f2743976a850267983e2c2 · docker-library/wordpress
https://github.com/docker-library/wordpress/blob/809519cc86bee0d6c7f2743976a850267983e2c2/cli/php8.2/alpine/Dockerfile

ENTRYPOINT ["docker-entrypoint.sh"]
USER www-data
CMD ["wp", "shell"]

WP-CLI コンテナは、実行されると上記 Dockerfile の CMD [“wp”, “shell”] より、wp コマンドをシェルモードで起動します。

CMD 命令の詳細は、下記ページを参考にしてください。

2023/03/28(Tue) 19:42:07
Dockerfile reference
https://docs.docker.com/engine/reference/builder/

CMD

The CMD instruction has three forms:

・CMD [“executable”,”param1″,”param2″] (exec form, this is the preferred form)
・CMD [“param1″,”param2”] (as default parameters to ENTRYPOINT)
・CMD command param1 param2 (shell form)
There can only be one CMD instruction in a Dockerfile. If you list more than one CMD then only the last CMD will take effect.

The main purpose of a CMD is to provide defaults for an executing container. These defaults can include an executable, or they can omit the executable, in which case you must specify an ENTRYPOINT instruction as well.

If CMD is used to provide default arguments for the ENTRYPOINT instruction, both the CMD and ENTRYPOINT instructions should be specified with the JSON array format.

CMD
=== docker-compose.yml ===

version: '3.3' 

services:
  db:
    image: mysql:latest
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "8000:80"

︙

 cli:
    image: wordpress:cli
    container_name: cli
    volumes_from: 
      - wordpress
    depends_on:
      - db
      - wordpress
    command: "--info"
    user: xfs
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_TABLE_PREFIX: wp_

volumes:
  db_data: {}

デフォルトだと上記 docker-compose.yml の cli コンテナの command: “–info” より、シェルモードで立ち上がっている wp に引数 –info が渡されます。

データベースを書き換えるには、docker-compose コマンドで cli コンテナを削除して、wp コマンドの引数を渡し、cli コンテナを再作成して起動させます。

❯ docker-compose run --rm cli search-replace 'Hello world' 'Welcome WordPress' 

上記 docker-compose コマンドを実行すると下記結果より、データベースのテーブル wp_posts、カラム post_title の ‘Hello world’ の文字列が1箇所 ‘Welcome WordPress’ に変更されています。

❯ docker-compose run --rm cli search-replace 'Hello world' 'Welcome WordPress' 

[+] Running 2/0
 ⠿ Container docker-compose-wordpress-db-1         Running                                                                                                                     0.0s
 ⠿ Container docker-compose-wordpress-wordpress-1  Running                                                                                                                     0.0s
+------------------+-----------------------+--------------+------+
| Table            | Column                | Replacements | Type |
+------------------+-----------------------+--------------+------+
| wp_commentmeta   | meta_key              | 0            | SQL  |
| wp_commentmeta   | meta_value            | 0            | SQL  |
| wp_comments      | comment_author        | 0            | SQL  |
︙
| wp_posts         | post_title            | 1            | SQL  |
︙
| wp_users         | display_name          | 0            | SQL  |
+------------------+-----------------------+--------------+------+
Success: Made 1 replacement.

WP-CLI コマンドの詳細については、下記ページの ‘お手軽 Docker コマンド起動 Ruby スクリプト docker.rb の WP-CLI コマンド’ を参照してください。

2023/03/28(Tue) 19:46:11
kyoshiaki/docker-compose-wordpress: Docker Compose を使って WordPress、MySQL、phpMyAdmin、WP-CLI のローカル環境の構築
https://github.com/kyoshiaki/docker-compose-wordpress#readme

2023/03/28(Tue) 19:46:34
kyoshiaki/docker-compose-wordpress: Docker Compose を使って WordPress、MySQL、phpMyAdmin、WP-CLI のローカル環境の構築
https://github.com/kyoshiaki/docker-compose-wordpress#%E3%81%8A%E6%89%8B%E8%BB%BD-docker-%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E8%B5%B7%E5%8B%95-ruby-%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88-dockerrb-%E3%81%AE-wp-cli-%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89
2023/03/28(Tue) 19:47:01
kyoshiaki/docker-compose-wordpress: Docker Compose を使って WordPress、MySQL、phpMyAdmin、WP-CLI のローカル環境の構築
https://github.com/kyoshiaki/docker-compose-wordpress

上記の docker-compose.yml とお手軽 Docker コマンド起動 Ruby スクリプト docker.rb を利用すれば、気軽にデータベースを変更できます。
失敗しても、docker-compose down を実行した後、忘れずに Volume を docker.rb の 6番、docker volume rm docker-compose-wordpress_db_data を使用して削除すれば、docker-compose up -d で何度でも WordPress のインストールから、やり直せます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です