かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

Docker WordPress コンテナから MySQL コマンドが使いたい

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


[参考]