三畳紀ぶりに 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年ほどコード書いてなかった期間もあったのでことごとく忘れてるし… ちからが欲しい…
[参考]