前回の記事では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コンテナ)
| 設定項目 | 値 | 意味 |
|---|---|---|
| image | mysql:8.0 | MySQL 8.0のイメージを使う |
| MYSQL_ROOT_PASSWORD | rootpass | MySQLのrootパスワード |
| MYSQL_DATABASE | wordpress | 自動で作成するデータベース名 |
| MYSQL_USER | wpuser | WordPressが使うDBユーザー名 |
| MYSQL_PASSWORD | wppass | WordPressが使うDBパスワード |
| volumes | db_data:/var/lib/mysql | DBのデータをコンテナ外に保存する(コンテナを削除してもデータが残る) |
wordpressサービス(WordPressコンテナ)
| 設定項目 | 値 | 意味 |
|---|---|---|
| image | wordpress:latest | 最新版のWordPressイメージを使う |
| ports | 8000:80 | Macの8000番ポートをコンテナの80番ポートに繋げる |
| WORDPRESS_DB_HOST | db | 接続するDBのホスト名(dbサービス名を指定する) |
| WORDPRESS_DB_NAME | wordpress | 使用するデータベース名 |
| WORDPRESS_DB_USER | wpuser | DBのユーザー名 |
| WORDPRESS_DB_PASSWORD | wppass | DBのパスワード |
| depends_on | db | dbサービスが起動してから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 db | dbサービスのログだけ確認する |
| 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を使って独自のイメージを作成する方法を学びます。

