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

WordPressとMySQLコンテナ

 ここでは、Docker Composeコマンドを使って、WordPressコンテナを作成してWordPress開発環境を構築していきます。データベースにはMySQLを使用します。

WordPressとは

 WordPressは世界中で広く使用されており、ウェブサイトやブログの作成において最も人気のあるコンテンツ管理システム(CMS:Contents Management System)の一つです。そのシェアは非常に高く、数百万以上のウェブサイトがWordPress上で稼働しています。これは、個人ブログから企業のウェブサイト、オンラインストアまで幅広い範囲のユーザーに利用されています。

WordPressのシェアは、全ウェブサイトの43.1%、CMSの63.7%というデータもあります。
参考:https://blog-bootcamp.jp/start/wordpress-share/

 WordPressの人気の理由の一つは、その使いやすさとカスタマイズ性です。初心者でも簡単にウェブサイトを構築し、運営することができます。また、テーマやプラグインを利用することで、デザインや機能を簡単にカスタマイズすることが可能です。

MySQLとは

 MySQLは、オープンソースのリレーショナルデータベース管理システム(RDBMS)であり、世界中の多くのウェブサイトやアプリケーションで使用されています。1995年にMichael WideniusとDavid Axmarkによって開発され、その後MySQL AB(現在はOracle Corporationが所有)によってサポートされています。

 MySQLは、汎用性、信頼性、パフォーマンス、および拡張性に優れており、特にウェブ開発やアプリケーション開発に適しています。MySQLは、クライアント/サーバーモデルに基づいており、クライアントがデータベースサーバーに接続してデータの操作を行います。

 MySQLは、Webアプリケーション、CMS(コンテンツ管理システム)、eコマースプラットフォームなど、さまざまな用途で広く利用されており、その柔軟性と信頼性から、多くの開発者や組織に信頼されています。

作成するコンテナのイメージ

 WordPressはデータの保存先としてMySQLやMariaDBなどのデータベースを使います。ここでは、MySQLを使うことにします。

 WordPressとMySQLのイメージは、Docker Hubから、公式のWordPressとMySQLイメージをダウンロードできます。Docker Composeを使うと「compose.yaml」で、複数のコンテナの定義や、MySQLとの接続情報が設定できます。

WordPressの主な環境変数

以下の表は、WordPressの主な環境変数です。

環境変数説明
WORDPRESS_DB_HOSTWordPressが接続するデータベースのサービス名を指定します。
WORDPRESS_DB_NAMEWordPressが使用するデータベースの名前を指定します。データベースが事前に作成されている必要があります。
WORDPRESS_DB_USERWordPressがデータベースに接続する際のユーザー名を指定します。このユーザーには、指定されたデータベースへのアクセス権限が必要です。
WORDPRESS_DB_PASSWORDWordPressがデータベースに接続する際のパスワードを指定します。このパスワードは、指定されたユーザーのパスワードと一致する必要があります。
WordPressの主な環境変数

 これらの環境変数は、WordPressがデータベースに接続する際に必要な情報をです。データベースのホスト、名前、ユーザー、パスワードを正確に指定することで、WordPressが正常にデータベースに接続し、動作することができます。

MySQLの主な環境変数

 以下は、MySQLコンテナの作成時に定義する一般的な環境変数の一部です。これらの環境変数は、コンテナの動作や設定をカスタマイズするために使用されます。

環境変数説明
MYSQL_ROOT_PASSWORDルートユーザーのパスワードを設定します。
MYSQL_DATABASE初期データベースを作成します。
MYSQL_USER初期ユーザーを作成します。
MYSQL_PASSWORD初期ユーザーのパスワードを設定します。
MariaDBの主な環境変数

compose.yamlの定義

定義する「compose.yaml」の定義は次のようになります。

・compose.yamlの定義内容
services:
  wpdb:
    image: mysql:8.0
    container_name: mysql_container
    environment:
      MYSQL_ROOT_PASSWORD: root-pass
      MYSQL_DATABASE: database
      MYSQL_USER: wp-user
      MYSQL_PASSWORD: wp-pass
    volumes:
      - db-data:/var/lib/mysql

  wordpress:
    image: wordpress:6.5
    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:
      - ./wp:/var/www/html

volumes:
  db-data:
・定義内容の解説

「compose.yaml」ファイルの定義を解説します。

サービス名wpdb
イメージmysql:8.0
環境変数MYSQLDB_ROOT_PASSWORD: root-pass
MYSQLDB_DATABASE: database
MYSQLDB_USER: wp-user
MYSQLDB_PASSWORD: wp-pass
ボリュームdb-data:/var/lib/mysql
wpdbサービスの定義
サービス名wordpress
イメージwordpress:6.5
依存関係wpdb
環境変数WORDPRESS_DB_HOST: wpdb
WORDPRESS_DB_NAME: database
WORDPRESS_DB_USER: wp-user
WORDPRESS_DB_PASSWORD: wp-pass
ポートフォワード“80:80”
ホストとコンテナのポート番号の関連付け
ボリューム./wp:/var/www/html
wordpressサービスの定義
ボリューム名説明
db-data・wpdbにマウントするボリューム
MySQLのデータボリュームは db-data:/var/lib/mysql でマウントされます。
wp-data・wordpressにバインドマウントするボリューム
WordPressのデータボリュームは、ローカルホストの「./wp」が「/var/www/html」にバインドマウントされます。
ボリュームの定義

 このDocker Composeファイルの定義で、MySQLとWordPressのコンテナがそれぞれ環境変数を通じて必要な設定情報を受け取ります。具体的には、MySQLコンテナにはルートパスワード、データベース名、ユーザー名、ユーザーパスワードが与えられ、WordPressコンテナにはデータベースへの接続情報が与えられます。

 また、それぞれのコンテナが使用するデータボリュームも定義されており、MySQLのデータボリュームは「db-data:/var/lib/mysql」にマウントされ、WordPressのデータボリュームは、ローカルホストの「./wp」が「/var/www/html」にバインドマウントされます。

 この定義を使用することで、WordPressとMySQLのコンテナを簡単に構築し、それらを連携させることができます。また、定義には依存関係やポートのフォワーディングなどが含まれており、複数のサービスを一括して管理することができます。

・依存関係の定義

 このDocker Composeファイルの定義では、WordPressサービスがwpdbサービスに依存しています。依存関係は以下のように定義しています。

wordpress:
凵凵depends_on:
凵凵凵凵-wpdb

※「凵」は半角スペースを表しています。

 上の部分が依存関係を表しており、WordPressサービスが起動する前に、wpdb(MySQLサービス)が起動することを要求しています。

WordPressはデータベースに接続しないと使用できません。

 この依存関係を定義することで、WordPressとwpdbの関係性が明確になり、Docker Composeがサービスの起動順序を管理しやすくなります。WordPressがwpdbに依存していることが明示されるため、サービス間の相互関係がより明確になります。


不要なDockerオブジェクトの削除

まず、不要なDockerオブジェクトをすべて削除しておきます。

以下のコマンドを実行します。

・「docker system prune -a」コマンドを実行します。

Are you sure you want to continue? [y/N] の質問には「y」と入力します。

PS C:\Users\joeac> docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y
Deleted Containers:
7764e25ae74796a010f1c7a213bcf5bfc14b4fb5a166b67327c5bb1f33fdb5e2

Deleted Networks:
joeac_default

Deleted Images:
untagged: nginx:latest
untagged: nginx@sha256:6db391d1c0cfb30588ba0bf72ea999404f2764febf0f1f196acd5867ac7efa7e
deleted: sha256:92b11f67642b62bbb98e7e49169c346b30e20cd3c1c034d31087e46924b9312e
deleted: sha256:d9e826dbb4b3c5770fe92638baa8c6614f210d782a5d021a123fe9fa1f92c23d
deleted: sha256:2a75285e888884bed4d630896c86ecd71739c6e82669e21ad7a050f33c9ac48d
deleted: sha256:32bfe3f040358ab8f9872a63d4ddefdc68f35d991ca10a812cbac5912ae9f97b
deleted: sha256:1330486eb62ea7e96f384961b77b0fc85f5d4422e761114ef3a72e7cb89751a4
deleted: sha256:a375372209a0f2b2c697a52cce46bc41b495bf86184ae83dd5146e20c22078eb
deleted: sha256:450787ca55caa59d0288de9cf36fc6b77d1b208a77eb837ec3d25b385f99cafb
deleted: sha256:a483da8ab3e941547542718cacd3258c6c705a63e94183c837c9bc44eb608999

Total reclaimed space: 186.7MB

「docker system prune -a」コマンドで削除されなかったDockerオブジェクトは、個別に削除しておきます。

compose.yaml の作成

・ディレクトリの移動と作成

Docker Composeでコンテナを作成するには、「compose.yaml」ファイルが必要になります。

 デフォルトでは、カレントディレクトリにある「compose.yaml」ファイルが読み込まれるため、作業ディレクトリに移動しておきます。

・「cd desktop/docker」コマンドを実行します。

PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker>

 「compose.yaml」ファイルを保存する「wordpress3」ディレクトリを作成して、作成したディレクトリに移動します。次のコマンドを実行します。

  • 「mkdir wordpress4」コマンド
  • 「cd wordpress4」コマンド
PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker> mkdir wordpress4

    Directory: C:\Users\joeac\Desktop\docker

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2024/04/23    23:16                wordpress4

PS C:\Users\joeac\Desktop\docker> cd wordpress4
PS C:\Users\joeac\Desktop\docker\wordpress4>
・VSCodeの起動

VSCodeで「compose.yaml」ファイルを作成します。

・「code compose.yaml」コマンドを実行します。

PS C:\Users\joeac\Desktop\docker\wordpress4> code compose.yaml

VSCodeが起動します。

・「compose.yaml」ファイルの編集

・「compose.yaml」ファイルを以下のように編集して保存します。

services:
  wpdb:
    image: mysql:8.0
    container_name: mysql_container
    environment:
      MYSQL_ROOT_PASSWORD: root-pass
      MYSQL_DATABASE: database
      MYSQL_USER: wp-user
      MYSQL_PASSWORD: wp-pass
    volumes:
      - db-data:/var/lib/mysql

  wordpress:
    image: wordpress:6.5
    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:
      - ./wp:/var/www/html

volumes:
  db-data:

コンテナの作成と実行

・「docker compose up -d」コマンドを実行します。

このコマンドは、「compose.yaml」ファイルを配置した場所で実行する必要があります。

PS C:\Users\joeac\Desktop\docker\wordpress4> docker compose up -d
[+] Running 0/0
[+] Running 21/2ling                                        0.1s
[+] Running 21/2⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 215.4MB / 240.8MB Pulling 9.
[+] Running 21/2⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 215.4MB / 240.8MB Pulling 9.
[+] Running 21/2⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 215.4MB / 240.8MB Pulling 10
[+] Running 21/2⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 215.4MB / 240.8MB Pulling 10
[+] Running 21/2⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 215.4MB / 240.8MB Pulling 10
[+] Running 21/2⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 215.4MB / 240.8MB Pulling 10
[+] Running 22/2⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 215.4MB / 240.8MB Pulling 10
[+] Running 23/2⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 215.4MB / 240.8MB Pulling 10
[+] Running 23/2⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 215.4MB / 240.8MB Pulling 10
[+] Running 23/2⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 215.4MB / 240.8MB Pulling 10
[+] Running 23/2⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 215.4MB / 240.8MB Pulling 10
[+] Running 23/2⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 215.4MB / 240.8MB Pulling 10
[+] Running 23/2⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 215.4MB / 240.8MB Pulling 11
[+] Running 23/2⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 215.4MB / 240.8MB Pulling 11
[+] Running 25/2⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 215.4MB / 240.8MB Pulling 11
[+] Running 34/2⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 215.4MB / 240.8MB Pulling 11
 ✔ wordpress Pulled                                        11.3s
 ✔ wpdb Pulled                                             18.3s
[+] Running 4/4
 ✔ Network wordpress4_default        Created                0.0s
 ✔ Volume "wordpress4_db-data"       Created                0.0s
 ✔ Container mysql_container         Started                0.4s
 ✔ Container wordpress4-wordpress-1  Started                0.1s

 「Container mysql_container Started」と「Container wordpress4-wordpress-1 Started」というログが、表示されたら、コンテナが作成されています。

・Docker Desktopでコンテナを確認します。

 MariaDBとWordPressの2つのコンテナが作成されて動作しているため、コンテナを示すアイコンが緑色になっています。

コンテナが、緑色になってない場合は、何らかの問題が発生しています。

「compose.yaml」の定義の間違いが疑わしいので、トラブルシューティングを行ってください。

バインドマウントの確認

・「wordpress4」ディレクトリの中を確認します。

「wp」ディレクトリが作成されています。

・「wp」ディレクトリの中を確認します。

WordPressを構成するファイルが作成されていることが確認できます。

WordPressにアクセスする

・Webブラウザを起動して、URLに「localhost」と入力します。

WordPressの初期セットアップのページが表示されます。

・「日本語」を選択して「次へ」ボタンをクリックします。

日本語で、WordPressの初期セットアップが進んでいきます。

 ここでは、WordPressの初期セットアップの完了まで進めて、サイトの構築までを行いませんが、このようにWordPressコンテナを作成することで、様々なテーマやプラグインを手軽に試してみることができます。