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

【Docker基礎】WordPress+MariaDBコンテナの作成と実行

WordPress+MariaDBコンテナの作成と実行

 ここでは、WordPressコンテナMariaDBコンテナをDocker上で作成・実行し、両者を連携させる方法について詳しく解説します。これにより、WordPressを効率的に構築・運用するための基盤を整えることができます。以下の手順に従って、実際にコンテナを作成し、動作確認を行いましょう。

はじめに

 WordPressを利用するためには、WordPress本体だけでなく、Webサーバー(Apacheやnginx)、プログラム言語の実行環境(PHP)、およびデータベース(MySQLやMariaDB)が必要です。これらの構成は多くのWebシステムで採用されており、これを「LAMP環境」と呼びます。

WordPressとは

 WordPressは、オープンソースのコンテンツ管理システム(CMS)であり、ブログやWebサイトの構築に広く利用されています。使いやすさと拡張性に優れており、豊富なプラグインやテーマが提供されています。

WordPressを効率的に運用するためには、以下のコンポーネントが必要です。

  • Webサーバー(Apache/nginx): ユーザーからのHTTPリクエストを受け取り、適切なレスポンスを返します。
  • プログラム言語実行環境(PHP): 動的なコンテンツを生成し、ビジネスロジックを処理します。
  • データベース(MySQL/MariaDB): ユーザー情報や投稿内容などのデータを保存・管理します。

 ここでは、特にMariaDBをデータベースとして使用し、WordPressとの連携方法について詳しく解説します。

環境設定

作成するネットワークとコンテナの情報

以下の表に、今回作成するネットワークとコンテナの詳細情報をまとめます。

項目
ネットワーク名wordpress-network
MariaDBコンテナ名mariadb-container
MariaDBイメージ名mariadb
WordPressコンテナ名wordpress-container
WordPressイメージ名wordpress
WordPressのポート番号8080:80

使用するコマンドのオプション、対象、引数

以下に、使用する主要なコマンドとそのオプション・引数をまとめます。

ネットワークの作成

docker network create ネットワーク名
  • オプションnetwork create
  • 対象: Dockerネットワーク
  • 引数: ネットワーク名 (wordpress-network)

MariaDBコンテナの作成・起動

docker run
 --name コンテナ名
 -dit
 --net=ネットワーク名
 -e MYSQL_ROOT_PASSWORD=MariaDBのrootパスワード
 -e MYSQL_DATABASE=データベース名
 -e MYSQL_USER=MariaDBのユーザー名
 -e MYSQL_PASSWORD=MariaDBのパスワード
 mariadb
 --character-set-server=utf8mb4
 --collation-server=utf8mb4_unicode_ci
  • オプション
    --name: コンテナ名の指定
    -dit: デタッチモード、インタラクティブモード、TTYモードの組み合わせ
    --net: ネットワーク名の指定
    -e: 環境変数の設定
  • 対象: MariaDBコンテナ
  • 引数
    --character-set-server: 文字コード設定(例: utf8mb4
    --collation-server: 照合順序設定(例: utf8mb4_unicode_ci

WordPressコンテナの作成・起動

docker run
 --name コンテナ名
 -dit
 --net=ネットワーク名
 -p ホストポート:コンテナポート
 -e WORDPRESS_DB_HOST=MariaDBのコンテナ名
 -e WORDPRESS_DB_NAME=データベース名
 -e WORDPRESS_DB_USER=MariaDBのユーザー名
 -e WORDPRESS_DB_PASSWORD=MariaDBのパスワード
 wordpress
  • オプション
    --name: コンテナ名の指定
    -dit: デタッチモード、インタラクティブモード、TTYモードの組み合わせ
    --net: ネットワーク名の指定
    -p: ポートマッピングの設定
    -e: 環境変数の設定
  • 対象: WordPressコンテナ
  • 引数: 特になし

WordPress+MariaDBコンテナの作成と実行

 以下に、実際にWordPressコンテナとMariaDBコンテナを作成・実行する手順を詳しく解説します。

STEP1:ネットワークの作成

 まず、WordPressとMariaDBが同じネットワーク内で通信できるように、カスタムネットワークを作成します。

使用するコマンド

docker network create wordpress-network

実行結果

3c30f0947ea7b573e28bb6f78baabe5c37ddb9c2f3602e91db1830bf6a8ecc23

解説

 コマンド実行後、ネットワークIDが表示されます。このIDはネットワークの一意な識別子です。ネットワークが正常に作成されたことを確認するには、以下のコマンドを使用します。

docker network ls

確認例

NETWORK ID          NAME                DRIVER              SCOPE
3c30f0947ea7        wordpress-network   bridge              local

解説

wordpress-networkが正常に作成されていることを確認できます。

STEP2:MariaDBコンテナの作成・起動

 次に、MariaDBコンテナを作成・起動します。WordPressがデータを保存するデータベースとして機能します。

使用するオプションと引数

項目オプションハンズオンでの値説明
MariaDBイメージ名(なし)mariadb使用するDockerイメージの名前を指定します。
MariaDBのコンテナ名--namemariadb-containerコンテナに付ける名前を指定します。
実行オプション-dit(なし)コンテナをバックグラウンドでデタッチモード、インタラクティブモード、TTYモードで実行します。
MariaDBのrootパスワード-e MYSQL_ROOT_PASSWORDmariarootpassMariaDBのrootユーザーのパスワードを設定します。
MariaDBのデータベース領域名-e MYSQL_DATABASEwordpress-db自動的に作成されるデータベースの名前を指定します。
MariaDBのユーザー名-e MYSQL_USERwordpressuser新規に作成するMariaDBユーザーの名前を指定します。
MariaDBのパスワード-e MYSQL_PASSWORDuserpass指定したMariaDBユーザーのパスワードを設定します。
ポートマッピング-p3306:3306ホストとコンテナのポートをマッピングします。
リソース制限--memory512mコンテナに割り当てるメモリ量を制限します。

実行コマンド

docker run
 --name mariadb-container
 -dit
 --net=wordpress-network
 -e MYSQL_ROOT_PASSWORD=mariarootpass
 -e MYSQL_DATABASE=wordpress-db
 -e MYSQL_USER=wordpressuser
 -e MYSQL_PASSWORD=userpass
 -p 3306:3306
 --memory=512m
 mariadb
 --character-set-server=utf8mb4
 --collation-server=utf8mb4_unicode_ci

実行結果

PS C:\Users\joeac> docker run --name mariadb-container -dit --net=wordpress-network -e MYSQL_ROOT_PASSWORD=mariarootpass -e MYSQL_DATABASE=wordpress-db -e MYSQL_USER=wordpressuser -e MYSQL_PASSWORD=userpass mariadb --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
Unable to find image 'mariadb:latest' locally
latest: Pulling from library/mariadb
de44b265507a: Pull complete
ca9b21d0c985: Pull complete
041c753879ae: Pull complete
e7b5137dc4b2: Pull complete
655e5d2590bd: Pull complete
41b3170b5f12: Pull complete
95adc28016bc: Pull complete
407e9d6eefb4: Pull complete
Digest: sha256:a9547599cd87d7242435aea6fda22a9d83e2c06d16c658ef70d2868b3d3f6a80
Status: Downloaded newer image for mariadb:latest
abc152e3fc0ad74f51c390d1723173f628474bc47e0b08c16be77b0bb65b3f83

解説

 コマンドが正常に実行されると、コンテナIDが表示されます。このIDはコンテナの一意な識別子であり、後でコンテナを操作する際に使用します。

コンテナの確認

docker ps

確認例

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
abc152e3fc0a        mariadb:latest      "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:3306->3306/tcp mariadb-container

解説

mariadb-containerが正常に起動していることを確認できます。

STEP3:WordPressコンテナの作成・起動

次に、WordPressコンテナを作成・起動します。MariaDBコンテナと連携して動作します。

使用するオプションと引数

項目オプション値(例)説明
WordPressイメージ名(なし)wordpress使用するDockerイメージの名前を指定します。
WordPressのコンテナ名--namewordpress-containerコンテナに付ける名前を指定します。
実行オプション-dit(なし)コンテナをバックグラウンドでデタッチモード、インタラクティブモード、TTYモードで実行します。
ポート番号を指定-p8080:80ホストとコンテナのポートをマッピングします。
データベースのコンテナ名-e WORDPRESS_DB_HOSTmariadb-containerWordPressが接続するデータベースのホスト名を指定します。
データベース領域名-e WORDPRESS_DB_NAMEwordpress-db使用するデータベースの名前を指定します。
データベースのユーザー名-e WORDPRESS_DB_USERwordpressuserデータベースに接続するユーザー名を指定します。
データベースのパスワード-e WORDPRESS_DB_PASSWORDuserpassデータベースユーザーのパスワードを設定します。

実行コマンド

docker run
 --name wordpress-container
 -dit
 --net=wordpress-network
 -p 8080:80
 -e WORDPRESS_DB_HOST=mariadb-container
 -e WORDPRESS_DB_NAME=wordpress-db
 -e WORDPRESS_DB_USER=wordpressuser
 -e WORDPRESS_DB_PASSWORD=userpass
 wordpress

実行結果

PS C:\Users\joeac> docker run --name wordpress-container -dit --net=wordpress-network -p 8080:80 -e WORDPRESS_DB_HOST=mariadb-container -e WORDPRESS_DB_NAME=wordpress-db -e WORDPRESS_DB_USER=wordpressuser -e WORDPRESS_DB_PASSWORD=userpass wordpress
Unable to find image 'wordpress:latest' locally
latest: Pulling from library/wordpress
fd674058ff8f: Pull complete
0e012f699cbd: Pull complete
5b35ca6db0b5: Pull complete
704dee2cabd9: Pull complete
5fdb0e4d812c: Pull complete
fd696393bc53: Pull complete
5b7af5ff0c1b: Pull complete
384588a3de49: Pull complete
9bfa95b81973: Pull complete
b24a3aff350b: Pull complete
eecbcdb9e3e3: Pull complete
fabbb9254aa4: Pull complete
f45d2a5ba4b8: Pull complete
4f4fb700ef54: Pull complete
dcb878de544b: Pull complete
a5328fb5c8b6: Pull complete
ef3395097cab: Pull complete
e809a5981b40: Pull complete
3d3fe70ddad4: Pull complete
b502c4195b5d: Pull complete
7ba48809dc4b: Pull complete
78197b0286b5: Pull complete
Digest: sha256:79dd7ea093b253ebbfd49869222534108c90c1e06b7074250e07514a6a0d1454
Status: Downloaded newer image for wordpress:latest
dce2fdb0385881414e87d29a0d7ff7854e90bb40d60c85117466dcf49d7b3a61

解説

 コマンドが正常に実行されると、コンテナIDが表示されます。このIDはコンテナの一意な識別子であり、後でコンテナを操作する際に使用できます。

コンテナの確認

docker ps

確認例

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
dce2fdb03858        wordpress:latest    "docker-entrypoint.s…"   1 minute ago        Up 1 minute        0.0.0.0:8080->80/tcp   wordpress-container
abc152e3fc0a        mariadb:latest      "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:3306->3306/tcp mariadb-container

解説

wordpress-containerが正常に起動していることを確認できます。

STEP4:動作確認

WordPressとMariaDBのコンテナが正常に動作しているかを確認します。

ブラウザでWordPressにアクセス

ブラウザを開き、以下のURLにアクセスします。

http://localhost:8080/
  • 期待される結果: WordPressの初期設定画面が表示されます。ここで、サイトのタイトルや管理者アカウントの設定を行います。
  • エラーが表示された場合: コマンドの入力ミスやネットワーク設定を再確認してください。特に、ポートマッピングや環境変数の設定に誤りがないか確認しましょう。

STEP5:後始末

 開発やテストが完了したら、以下の手順でコンテナやネットワークを削除し、環境をクリーンアップします。

コンテナの停止

docker stop mariadb-container
docker stop wordpress-container

コンテナの削除

docker rm mariadb-container
docker rm wordpress-container

イメージの削除

docker image rm mariadb
docker image rm wordpress

ネットワークの削除

docker network rm wordpress-network

確認コマンド

各削除後に以下のコマンドで削除が正しく行われたことを確認します。

docker ps -a
docker image ls
docker network ls

注意点

  • 環境変数の一致: WordPressコンテナで設定するデータベースの情報(ホスト名、データベース名、ユーザー名、パスワード)は、MariaDBコンテナ起動時に設定した値と一致させる必要があります。これが一致しないと、WordPressはデータベースに接続できず、正常に動作しません。
  • ポートの競合: ホストのポート8080や3306が既に使用されている場合、別のポート番号を指定してください。例えば、-p 8081:80-p 3307:3306のように変更します。
  • セキュリティ: 簡易的なパスワードを使用していますが、実運用環境では強固なパスワードを設定し、必要に応じて環境変数ファイルやDocker Secretsを利用してパスワードを管理することが推奨されます。
  • リソース管理: コンテナに割り当てるリソース(メモリやCPU)を適切に設定し、ホストマシンのリソースを効率的に活用してください。
  • MariaDB特有の設定: MariaDBのコンテナであっても、環境変数名は「MYSQL_ROOT_PASSWORD」、「MYSQL_DATABASE」などMySQLと同様に設定します。これはMariaDBの特殊な事情によるものであり、他のデータベース(PostgreSQLなど)では異なる環境変数名を使用しますので注意してください。

まとめ

 ここでは、WordPressコンテナMariaDBコンテナをDocker上で作成・実行し、両者を連携させる方法について詳しく解説しました。以下のポイントを押さえておきましょう。

  • ネットワークの作成: コンテナ同士が通信できるように、カスタムネットワークを作成します。
  • MariaDBコンテナの設定: 必要な環境変数を設定し、適切なオプションを指定してMariaDBコンテナを起動します。
  • WordPressコンテナの設定: MariaDBコンテナと連携するための環境変数を設定し、ポートマッピングを行ってWordPressコンテナを起動します。
  • 動作確認: ブラウザを通じてWordPressにアクセスし、正常に動作していることを確認します。
  • 後始末: 使用後はコンテナやネットワークを適切に停止・削除し、環境をクリーンアップします。
  • セキュリティとリソース管理: 強固なパスワードの設定やリソース制限を行い、セキュアかつ効率的な環境を維持します。
  • MariaDB特有の注意点: MariaDBコンテナでは、環境変数名がMySQLと同様である点に注意します。他のデータベースを使用する場合は、それぞれの環境変数名に従って設定してください。

 これらの知識を基に、実際の運用環境でもWordPressとMariaDBをDocker上で効果的に管理・運用することが可能になります。次章では、応用的なコンテナの使い方について解説し、さらに高度な運用スキルを習得します。引き続き、Dockerの学習を進めていきましょう。