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

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

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

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

WordPressとは

 WordPressは、オープンソースのコンテンツ管理システム(CMS)として世界中で広く利用されています。Dockerを活用することで、WordPressとそのデータベースであるMySQLをそれぞれ独立したコンテナとして簡単に構築・管理できます。ここでは、以下のステップに従ってWordPressとMySQLのコンテナを作成・実行します。

ここで行うこと

  • ネットワークの作成
  • MySQLコンテナの作成・起動
  • WordPressコンテナの作成・起動
  • 動作確認
  • 後始末

環境設定

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

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

項目
ネットワーク名wordpress-network
MySQLコンテナ名mysql-container
MySQLイメージ名mysql
WordPressコンテナ名wordpress-container
WordPressイメージ名wordpress

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

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

ネットワークの作成

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

MySQLコンテナの作成・起動

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

WordPressコンテナの作成・起動

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

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

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

STEP1:ネットワークの作成

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

使用するコマンド

docker network create wordpress-network

実行結果の例

db600941f18728e89647db570a3414a0d08e560219b39b60b16c1c67cc385cff

解説

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

docker network ls

確認例

NETWORK ID          NAME                DRIVER              SCOPE
db600941f187        wordpress-network   bridge              local

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

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

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

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

実行コマンド

docker run
 --name mysql-container
 -dit
 --net=wordpress-network
 -e MYSQL_ROOT_PASSWORD=myrootpass
 -e MYSQL_DATABASE=wordpress-db
 -e MYSQL_USER=wordpressuser
 -e MYSQL_PASSWORD=userpass
 -p 3306:3306
 --memory=512m
 mysql --character-set-server=utf8mb4
 --collation-server=utf8mb4_unicode_ci
 --default-authentication-plugin=mysql_native_password

実行結果

PS C:\Users\joeac> docker run --name mysql-container -dit --net=wordpress-network -e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=wordpress-db -e MYSQL_USER=wordpressuser -e MYSQL_PASSWORD=userpass mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
Unable to find image 'mysql:latest' locally
latest: Pulling from library/mysql
2c0a233485c3: Pull complete
cb5a6a8519b2: Pull complete
570d30cf82c5: Pull complete
a841bff36f3c: Pull complete
80ba30c57782: Pull complete
5e49e1f26961: Pull complete
ced670fc7f1c: Pull complete
0b9dc7ad7f03: Pull complete
cd0d5df9937b: Pull complete
1f87d67b89c6: Pull complete
Digest: sha256:0255b469f0135a0236d672d60e3154ae2f4538b146744966d96440318cc822c6
Status: Downloaded newer image for mysql:latest
3698a6f3884047127aacf42a0967c3ef13d9e9d40db39e0d0b524eeb43515d43

解説

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

コンテナの確認

docker ps

確認例

PS C:\Users\joeac> docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
3698a6f38840        mysql:latest        "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:3306->3306/tcp mysql-container

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

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

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

項目オプション値(例)説明
ネットワーク名--networdpress-networkコンテナを接続するDockerネットワークを指定します。
WordPressのコンテナ名--namewordpress-containerコンテナに付ける名前を指定します。
実行オプション-dit(なし)コンテナをバックグラウンドでデタッチモード、インタラクティブモード、TTYモードで実行します。
ポート番号を指定-p8080:80ホストとコンテナのポートをマッピングします。
データベースのコンテナ名-e WORDPRESS_DB_HOSTmysql-containerMySQLコンテナのホスト名を指定します。
データベース領域名-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=mysql-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=mysql-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
cf3ee22c758913376a2cebb5cd9541bd8a8bad1cc85d7745645a3ecb02232be2

解説

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

コンテナの確認

docker ps

確認例

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

STEP4:動作確認

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

ブラウザでWordPressにアクセス

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

http://localhost:8080/

図:WordPressのスタート画面

  • 期待される結果: WordPressの初期設定画面が表示されます。データベース接続の確認やサイトの設定を行うことができます。
  • エラーが表示された場合: コマンドの入力ミスやネットワーク設定を再確認してください。

WordPressにログイン

初期設定が完了したら、WordPress管理画面にログインし、正常に動作していることを確認します。

STEP5:後始末

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

コンテナの停止

docker stop mysql-container
docker stop wordpress-container

コンテナの削除

docker rm mysql-container
docker rm wordpress-container

イメージの削除

docker image rm mysql
docker image rm wordpress

ネットワークの削除

docker network rm wordpress-network

確認コマンド

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

docker ps -a
docker image ls
docker network ls

注意点

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

まとめ

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

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

 これらの知識を基に、実際の運用環境でもWordPressとMySQLをDocker上で効果的に管理・運用することが可能になります。次のコンテンツでは、ソフトウェアとデータベースの関係について解説します。引き続き、Dockerの学習を進めていきましょう。