このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Docker超入門:ホストと同期するWordPress開発環境を作ろう!バインドマウント構築手順①

ホストと同期するWordPress開発環境を作ろう!バインドマウント構築手順①

 Docker Composeを使えば、WordPressとMariaDBを組み合わせた開発環境を簡単に構築できます。
 これまでに紹介した「Docker ComposeでWordPress+MariaDBコンテナを構築する方法」では、ボリューム機能を使ってデータを永続化しました。

 今回は、よりホスト側のファイルとリアルタイムに同期できる「バインドマウント」機能を使って、WordPress開発環境を構築していきます。

 「ホストと同期するWordPress開発環境を作ろう!バインドマウント構築手順」は次の2部に分けて解説していきます。

バインドマウントとは?

 バインドマウント(Bind Mount)とは、ホストOS上の特定のフォルダをコンテナ内のディレクトリに直接マウントし、両者の内容を同期させる仕組みです。

たとえば、ホストの「./html」ディレクトリをコンテナの「/var/www/html」にマウントすると、
ホスト上で編集したWordPressテーマやPHPコードが、すぐにコンテナ内に反映されます。

バインドマウントの特徴

項目内容
同期対象ホスト側の任意ディレクトリとコンテナ内ディレクトリを同期
編集の反映ホストでの変更がリアルタイムにコンテナに反映
利用例ローカルでテーマ開発やプラグイン開発を行う際に便利
注意点ホスト側で削除したファイルはコンテナ内でも削除される。

ボリュームとバインドマウントの違い

データを永続化する方法には、「ボリューム」「バインドマウント」の2種類があります。
どちらもデータを保持するという点では同じですが、性質が大きく異なります。

比較項目ボリューム機能バインドマウント機能
管理者Dockerエンジンが自動で管理ユーザーがホストのパスを指定
保存場所Docker専用領域(例:/var/lib/docker/volumes)ホスト上の任意ディレクトリ
使い勝手データの扱いはDockerに任せる。ホストのファイルを直接編集可能
利用シーン本番環境や永続的データ管理ローカル開発・テーマ開発

👉 開発中に「ホスト上でコードを書き換えて、すぐにブラウザで確認したい」という場合は、バインドマウントが最適です。

開発環境の構成イメージ

 下図のように、ホストOS上の htmlディレクトリ と WordPressコンテナ内の /var/www/html を同期します。

 MariaDB はボリュームで永続化し、WordPress はホストフォルダを直接マウントしてリアルタイム編集を可能にします。

WordPressとMariaDBの環境変数

まず、使用する環境変数を整理しておきましょう。

WordPressの主な環境変数

環境変数説明
WORDPRESS_DB_HOST接続するデータベースサービス名(例:wpdb)
WORDPRESS_DB_NAME使用するデータベース名
WORDPRESS_DB_USERデータベース接続ユーザー名
WORDPRESS_DB_PASSWORD接続ユーザーのパスワード

これらはWordPressがDBにアクセスするために必要な設定です。

MariaDBの主な環境変数

環境変数説明
MARIADB_ROOT_PASSWORDルートユーザーのパスワード
MARIADB_DATABASE初期作成されるデータベース名
MARIADB_USER作成されるユーザー名
MARIADB_PASSWORD上記ユーザーのパスワード

これらを正しく設定しておくことで、WordPressとMariaDB間の通信がスムーズに行えます。

compose.yaml の定義

WordPress+MariaDBの構成を「compose.yaml」で定義します。
ボリュームを使っていた部分をバインドマウントに置き換えます。

services:
  wpdb:
    image: mariadb:10.8
    environment:
      MARIADB_ROOT_PASSWORD: root-pass
      MARIADB_DATABASE: database
      MARIADB_USER: wp-user
      MARIADB_PASSWORD: wp-pass
    volumes:
      - db-data:/var/lib/mysql

  wordpress:
    image: wordpress:6.8
    depends_on:
      - wpdb
    environment:
      WORDPRESS_DB_HOST: wpdb
      WORDPRESS_DB_NAME: database
      WORDPRESS_DB_USER: wp-user
      WORDPRESS_DB_PASSWORD: wp-pass
    ports:
      - "80:80"    
    volumes:
      - ./html:/var/www/html #ボリューム名ではなくディレクトリ名にする。
volumes:
  db-data: #WordPress用のボリュームは用意しない。

定義のポイント

項目説明
./html:/var/www/htmlホスト上のhtmlフォルダをWordPressコンテナにバインドマウント
db-data:/var/lib/mysqlMariaDBのデータをボリュームで永続化
depends_on: wpdbWordPressがMariaDBに依存して起動する設定
ports: "80:80"ホストのポート80をWordPressコンテナの80にマッピング

 バインドマウントの行では、ボリューム名ではなくホスト側ディレクトリを直接指定している点がポイントです。

バインドマウントの書式

Docker Composeでバインドマウントを定義する書式は以下の通りです。

services:
  サービス名:
    volumes:
      - ホストのディレクトリ:コンテナ内のパス

volumes:
  - ./html:/var/www/html

ホストのhtmlディレクトリが存在しない場合は、自動的に作成されます。
 ただし、ホスト側のアクセス権が適切でないとコンテナが正常にファイルを読み書きできないため、必要に応じて権限を調整しましょう。

依存関係の定義

今回も、WordPressはMariaDBに依存しています。
そのため、次のようにdepends_onで依存関係を定義します。

wordpress:
  depends_on:
    - wpdb

 この設定により、MariaDB(wpdb)コンテナが起動してからWordPressコンテナが起動します。
WordPressはデータベースなしでは動作しないため、この依存関係が必須です。

まとめ

  • WordPressとMariaDBの2つのコンテナをDocker Composeで管理。
  • MariaDB はボリュームでデータを永続化。
  • WordPress はホストの htmlディレクトリ と同期(バインドマウント)。
  • ホスト側でファイルを編集すると、コンテナ内にリアルタイム反映!

 次の「ホストと同期するWordPress開発環境を作ろう!バインドマウント構築手順➁」では、実際にこのcompose.yamlを使ってWordPressコンテナを構築し、ホストとの同期動作を確認していきます。