MENU
オンライン講座開催中

docker-composeでWordPressをローカル環境に構築する方法【MySQL・WordPress同時起動】

docker-composeでWordPressをローカル環境に構築する方法【MySQL・WordPress同時起動】

前回の記事ではDockerの基本コマンドを学びました。今回はdocker-composeを使って、WordPressとMySQLの2つのコンテナをまとめて起動する方法を解説します。通常EC2でWordPress環境を構築すると1〜2時間かかりますが、docker-composeならコマンド1行・数分で完了します。

目次

docker-composeとは

docker-composeは複数のコンテナをまとめて管理するツールです。WordPressを動かすにはWordPress本体とデータベース(MySQL)の2つが必要です。これを別々に起動・設定するのは手間がかかりますが、docker-composeを使うと1つのファイルにまとめて定義して、コマンド1行で全部起動できます。

docker compose up -d
 ↓
MySQLコンテナ自動起動
WordPressコンテナ自動起動
 ↓
http://localhost:8000 でWordPressが使える

docker-compose.ymlとは

docker-composeはdocker-compose.ymlというファイルに「どのコンテナをどんな設定で起動するか」を書いておきます。ymlはYAML形式のファイルで、インデント(字下げ)で階層構造を表現します。このファイルを1回書いておけば、次回以降はdocker compose up -dを実行するだけで同じ環境が再現できます。

STEP1:作業フォルダを作る

docker-compose.ymlを置くためのフォルダを作成してその中に移動します。

mkdir ~/Desktop/wordpress-docker && cd ~/Desktop/wordpress-docker

mkdirはフォルダを作成するコマンド、&&は「前のコマンドが成功したら次のコマンドを実行する」という意味、cdはフォルダに移動するコマンドです。

STEP2:docker-compose.ymlを作成する

以下のコマンドをターミナルにそのままコピペして実行します。docker-compose.ymlファイルが自動で作成されます。

cat > docker-compose.yml << 'EOF'
services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: wppass
    volumes:
      - db_data:/var/lib/mysql
  wordpress:
    image: wordpress:latest
    ports:
      - "8000:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: wppass
    depends_on:
      - db
volumes:
  db_data:
EOF

docker-compose.ymlの内容を解説

このファイルには2つのサービス(コンテナ)が定義されています。

dbサービス(MySQLコンテナ)

設定項目意味
imagemysql:8.0MySQL 8.0のイメージを使う
MYSQL_ROOT_PASSWORDrootpassMySQLのrootパスワード
MYSQL_DATABASEwordpress自動で作成するデータベース名
MYSQL_USERwpuserWordPressが使うDBユーザー名
MYSQL_PASSWORDwppassWordPressが使うDBパスワード
volumesdb_data:/var/lib/mysqlDBのデータをコンテナ外に保存する(コンテナを削除してもデータが残る)

wordpressサービス(WordPressコンテナ)

設定項目意味
imagewordpress:latest最新版のWordPressイメージを使う
ports8000:80Macの8000番ポートをコンテナの80番ポートに繋げる
WORDPRESS_DB_HOSTdb接続するDBのホスト名(dbサービス名を指定する)
WORDPRESS_DB_NAMEwordpress使用するデータベース名
WORDPRESS_DB_USERwpuserDBのユーザー名
WORDPRESS_DB_PASSWORDwppassDBのパスワード
depends_ondbdbサービスが起動してからwordpressを起動する

depends_on: dbがポイントです。WordPressはMySQLが起動していないと動きません。depends_onを書いておくことで「dbが起動してからwordpressを起動する」という順番を保証できます。

STEP3:コンテナを起動する

docker compose up -d

upはdocker-compose.ymlに書かれたサービスをすべて起動するコマンドです。-dはバックグラウンドで起動する指定です。初回はMySQLとWordPressのイメージをDocker Hubからダウンロードするため数分かかります。

以下のように表示されれば起動成功です。

[+] Running 4/4
 ✔ Network wordpress-docker_default        Created
 ✔ Volume "wordpress-docker_db_data"       Created
 ✔ Container wordpress-docker-db-1         Started
 ✔ Container wordpress-docker-wordpress-1  Started

STEP4:WordPressにアクセスする

ブラウザで以下のURLにアクセスします。

http://localhost:8000

WordPressのインストール画面が表示されれば成功です。言語選択・サイトタイトル・ユーザー名・パスワードを設定するとローカル環境のWordPressが使えるようになります。このWordPressはローカル環境なのでインターネットからはアクセスできません。開発・テスト用の環境として活用できます。

よく使うdocker-composeコマンド

コマンド意味
docker compose up -d全サービスをバックグラウンドで起動する
docker compose down全サービスを停止してコンテナを削除する(データは残る)
docker compose down -v全サービスを停止してコンテナとデータも削除する
docker compose psサービスの起動状態を確認する
docker compose logs全サービスのログを確認する
docker compose logs dbdbサービスのログだけ確認する
docker compose restart全サービスを再起動する

docker compose downとdocker compose down -vの違い

docker compose downはコンテナを削除しますが、volumesに保存したデータ(今回はMySQLのデータ)は残ります。次回docker compose up -dで起動すると前回のデータが引き継がれます。docker compose down -vはデータも含めて全部削除します。環境を完全にリセットしたい場合に使います。

EC2でのWordPress構築との比較

EC2(手動構築)docker-compose
構築時間1〜2時間数分
必要なコマンド数数十コマンド1コマンド
環境の再現性手順書が必要docker-compose.ymlを共有するだけ
用途本番環境開発・テスト環境

まとめ

docker-composeを使うことで、複数のコンテナを1つのファイルで管理して一括起動できます。docker-compose.ymlを書いておけば誰でも同じ環境を再現できるため、開発チームでの環境統一にも役立ちます。次のステップとしてDockerfileを使って独自のイメージを作成する方法を学びます。

目次