三畳紀ぶりに WordPress の案件があって触ってます。
20世紀みたいに PHP 環境を local に作るのつらすぎるので docker を使ってい環境構築していたのですが、WordPress のコンテナから mysql コマンドが使えなかったので使えるようにしたメモ
Docker WordPress 環境構築
公式のチュートリアルにある構成を利用する
docker-compose.yml
version: '3' services: mysql: image: mysql:5.7 volumes: - ./docker/mysql/data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} MYSQL_DATABASE: ${DB_DATABASE} MYSQL_USER: ${DB_USER} MYSQL_PASSWORD: ${DB_PASSWORD} wordpress: depends_on: - mysql image: wordpress:latest ports: - "8000:80" restart: always volumes: - ./app/public:/var/www/html environment: WORDPRESS_DB_HOST: mysql:3306 WORDPRESS_DB_USER: ${DB_USER} WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
cf. クィックスタート: Compose と WordPress — Docker-docs-ja 20.10 ドキュメント
配布されている wordpress イメージには mysql コマンドが含まれてないっぽくコンテナ内から接続を試みても command not fount: mysql になってしまう
$ docker compose up -d $ docker compose exec wordpress mysql -h mysql -u root -p command not found: mysql
mysql-client をコンテナにインストールすればOK
depends_on で database のコンテナとは接続できているので、単純に mysql コマンドが使えるようにすれば良いっぽい
wordpress コンテナに mysql-client をインストールするように変更する
docker-compose.yml
wordpress:
depends_on:
- mysql
- image: wordpress:latest
+ build:
+ context: "./docker/wordpress"
+ dockerfile: "Dockerfile"
ports:
- "8000:80"
restart: always
volumes:
- ./app/public:/var/www/html
environment:
WORDPRESS_DB_HOST: mysql:3306
WORDPRESS_DB_USER: ${DB_USER}
WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
./docker/wordpress/Dockerfile
FROM wordpress:latest # Install MySQL client RUN apt-get update && apt-get install -y sudo less default-mysql-client
cf. installing mysql client on docker php - Super User
⚠
mysql-clientだとインストールできなかった。どうやらdefault-mysql-clientが正しいっぽい。mariadb-clientにすればインストールできるという記事もあったが MySQL を使っているのでdefault-mysql-clientをインストールするようにしたapt-getではなくaptを使うべきという記事も見かけたが wordpress のコンテナではaptコマンドが使えなかったのと、aptからapt-getが推奨に戻っているっぽかったのでapt-getを使用した。(この辺りは知識不足です)
動作確認
Docker コンテナを再ビルドして wordpress コンテナから mysql コマンドでデータベースに接続できれば OK
$ docker compose build $ docker compose up -d $ docker compose exec wordpress mysql -h mysql -u root -p Enter password: $DB_ROOT_PASSWORD MySQL [(none)]>
₍ ᐢ. ̫ .ᐢ ₎ できた!
Docker 便利なのですがインフラとか環境構築系の知識が付け焼き刃なのでいつもハマってしまいます… 1年ほどコード書いてなかった期間もあったのでことごとく忘れてるし… ちからが欲しい…
[参考]

![WordPress 本格Webサイト構築パーフェクトマスター [第2版] (Perfect Master 185) WordPress 本格Webサイト構築パーフェクトマスター [第2版] (Perfect Master 185)](https://m.media-amazon.com/images/I/51KaF24P5vS._SL500_.jpg)
