そう感じているなら、Docker Composeを使うタイミングが来ています。
Docker Composeは複数のコンテナをyamlファイル1本で定義・管理できるツールです。
この記事では、docker-compose.ymlの書き方からWordPressとMySQLコンテナの連携・起動まで、実際のサーバー出力例を交えてハンズオン形式で解説します。
動作確認環境: Rocky Linux 9.4 / Ubuntu 24.04 LTS(Docker Engine 26.x・Docker Compose Plugin v2.27)
この記事のポイント
・docker compose up -d 1コマンドでWordPress+MySQLを同時起動できる
・docker-compose.ymlでサービス間の依存・ネットワーク・ボリュームを一元管理する
・コンテナが起動しない時はdocker compose logsで原因を即座に特定できる
・docker compose down でコンテナ・ネットワークをまとめてクリーンアップできる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
Docker Composeとは?複数コンテナを一括管理する仕組み
DockerでWordPressを動かすには、WordPressコンテナとMySQLコンテナの2つが必要です。docker runでそれぞれ起動することもできますが、毎回長いオプションを打つのは現実的ではありません。
Docker Composeはその問題を解決するツールです。
docker-compose.yml(またはcompose.yml)というyamlファイルに「どのコンテナを、どのネットワークで、どのボリュームにマウントして起動するか」をすべて記述します。
あとは docker compose up の1コマンドで全コンテナが一斉に起動します。
Docker Composeが解決する3つの課題
・長い起動コマンドの繰り返し:yamlに一度書けば、以降は docker compose up だけで済む・コンテナ間のネットワーク設定:Composeが自動で専用ネットワークを作成し、サービス名でIPなしに通信できる
・ボリューム管理:データ永続化のボリュームをyamlで宣言し、docker compose down してもデータが残る
Docker Compose v1とv2の違い
古い情報では docker-compose(ハイフンあり)と書いているものがあります。現在の主流はDocker Engine同梱の Docker Compose Plugin(v2) で、コマンドは
docker compose(スペース区切り)です。本記事はv2を前提にしています。
# v2の確認方法 $ docker compose version Docker Compose version v2.27.1
事前準備|Docker ComposeをLinuxにインストールする
Rocky Linux 9やUbuntu 24.04では、Docker Engine導入時にComposeプラグインが同梱されています。以下の手順でDocker Engineを入れれば、docker composeコマンドがそのまま使えます。
1. Rocky Linux 9にDockerをインストールする
# Docker公式リポジトリを追加 $ sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo # Docker Engine・Compose Pluginを一括インストール $ sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # サービスを起動・自動起動設定 $ sudo systemctl enable --now docker # 動作確認 $ docker compose version Docker Compose version v2.27.1
2. Ubuntu 24.04にDockerをインストールする
# 依存パッケージを追加 $ sudo apt-get install -y ca-certificates curl # Docker GPGキーを追加 $ sudo install -m 0755 -d /etc/apt/keyrings $ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc # リポジトリを追加してapt updateを実行 $ sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # 動作確認 $ docker compose version Docker Compose version v2.27.1
3. 一般ユーザーでdockerを実行できるようにする
sudoなしでdockerコマンドを使うには、自分のユーザーをdockerグループに追加します。# dockerグループへの追加(user_nameを自分のユーザー名に変更) $ sudo usermod -aG docker user_name # 設定反映(再ログインまたはnewgrp) $ newgrp docker # 確認 $ docker info | grep -i server Server Version: 26.1.4
docker-compose.ymlを作成する|WordPress+MySQLの設定
作業用ディレクトリを作成し、docker-compose.ymlを配置します。このファイル1本がWordPressとMySQLの構成をすべて定義します。
1. 作業ディレクトリを作成する
$ mkdir ~/wordpress-compose && cd ~/wordpress-compose
2. docker-compose.ymlを作成する
以下の内容でdocker-compose.ymlを作成してください。services: db: image: mysql:8.0 restart: always environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: wordpress MYSQL_USER: wpuser MYSQL_PASSWORD: wppassword volumes: - db_data:/var/lib/mysql wordpress: image: wordpress:6.5-php8.3-apache restart: always depends_on: - db ports: - "8080:80" environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wpuser WORDPRESS_DB_PASSWORD: wppassword WORDPRESS_DB_NAME: wordpress volumes: - wp_data:/var/www/html volumes: db_data: wp_data:
・services.db:MySQLコンテナの定義。MySQL 8.0イメージを使用する
・services.wordpress:WordPressコンテナの定義。PHP 8.3+Apacheのイメージを使用する
・depends_on: - db:dbサービスが起動してからwordpressを起動する順序制御
・WORDPRESS_DB_HOST: db:3306:Composeが自動作成した内部ネットワーク上でサービス名「db」で通信できる
・ports: "8080:80":ホストの8080番ポートをコンテナの80番にマッピングする
・volumes(末尾):db_dataとwp_dataという名前付きボリュームを宣言。コンテナを停止してもデータは保持される
3. .envファイルでパスワードを分離する(推奨)
パスワードをyamlに直書きするのは開発環境では構いませんが、Gitで管理する場合は .env ファイルに分離することを推奨します。.envファイルを作成してから .gitignore に追加し、Gitにパスワードが混入しないようにしましょう。
# .envファイルを作成 $ cat > .env << 'EOF' MYSQL_ROOT_PASSWORD=rootpassword MYSQL_DATABASE=wordpress MYSQL_USER=wpuser MYSQL_PASSWORD=wppassword EOF # .gitignoreに追加してGitに含めない(要注意: 本番パスワードの流出防止) $ echo ".env" > .gitignore
コンテナを起動してWordPressにアクセスする
1. docker compose upでコンテナを起動する
docker-compose.ymlがあるディレクトリで以下を実行します。# バックグラウンドで起動(-d = detachedモード) $ docker compose up -d # 実際の出力例 [+] Running 4/4 ✔ Network wordpress-compose_default Created 0.1s ✔ Volume "wordpress-compose_db_data" Created 0.0s ✔ Volume "wordpress-compose_wp_data" Created 0.0s ✔ Container wordpress-compose-db-1 Started 0.4s ✔ Container wordpress-compose-wp-1 Started 0.8s
Composeが自動でネットワーク(wordpress-compose_default)と2つのボリュームを作成し、dbコンテナが先に起動してからwordpressコンテナが起動しています。
2. コンテナの状態を確認する
$ docker compose ps NAME IMAGE STATUS PORTS wordpress-compose-db-1 mysql:8.0 Up 3306/tcp, 33060/tcp wordpress-compose-wp-1 wordpress:6.5-php8.3-apache Up 0.0.0.0:8080->80/tcp
3. WordPressの初期設定を行う
ブラウザで http://localhost:8080 にアクセスします。WordPressの「ようこそ」画面が表示されたら成功です。
言語選択 → サイト名・管理者アカウント設定 → 「WordPressをインストール」で完了します。
よく使うDocker Composeコマンド一覧
| やりたいこと | コマンド |
|---|---|
| コンテナをバックグラウンドで起動 | docker compose up -d |
| コンテナの状態確認 | docker compose ps |
| ログをリアルタイム表示 | docker compose logs -f |
| 特定サービスのログを表示 | docker compose logs -f wordpress |
| コンテナを停止(削除しない) | docker compose stop |
| 停止したコンテナを再起動 | docker compose start |
| コンテナを停止して削除 | docker compose down |
| コンテナ・ボリュームも含めて完全削除 | docker compose down -v |
| yamlを変更後にコンテナを再作成 | docker compose up -d --force-recreate |
| コンテナ内でシェルを実行 | docker compose exec wordpress bash |
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、Docker ComposeをはじめとするDockerの実践スキルを体系的に学べる講座を用意しています。
→ Dockerマスター講座の詳細はこちら
トラブルシューティング|よくあるエラーと解決策
1. 「Error response from daemon: Ports are not available」
ホストの8080番ポートがすでに使われている場合に発生します。Linux ポート確認の全コマンドで紹介しているss/lsofコマンドを使って、現在の実際のポート使用状況を確認しましょう。
# 使用中のポートを確認 $ ss -tlnp | grep 8080 # 別のポートに変更する(例: 8081) # docker-compose.yml の ports セクションを変更 ports: - "8081:80"
2. WordPressが「データベース接続の確立エラー」を表示する
MySQLコンテナの起動がWordPressより遅い場合に発生することがあります。depends_onはコンテナの起動順序は制御しますが、MySQL内部の初期化完了は保証しません。
# ログでMySQLの初期化状況を確認 $ docker compose logs db | tail -20 # 「ready for connections」が表示されるまで待ってからWordPressにアクセスする 2024-06-26T10:23:45.123456Z 1 [System] [MY-011011] [Server] ready for connections. Version: '8.0.37'
3. docker compose up が「yaml: line X: did not find expected key」で失敗する
docker-compose.ymlのインデントが崩れている場合に発生します。YAMLはインデントにスペースのみ使用します(タブ文字は禁止)。
# yamlの構文チェック(注意: エラーがなければ展開済みの設定が出力される) $ docker compose config name: wordpress-compose services: db: ...
4. 「permission denied while trying to connect to the Docker daemon socket」
一般ユーザーでdockerグループに属していない場合に発生します。# 自分のユーザーをdockerグループに追加 $ sudo usermod -aG docker $USER # 再ログインまたはグループを即時反映 $ newgrp docker # 確認 $ groups | grep docker user_name docker
Linux DNS 設定の基本を理解しておくと、本番環境でのドメイン設定や名前解決の仕組みが分かり、Dockerコンテナのネットワーク設計にも応用できます。
まとめ
この記事で解説したDocker ComposeによるWordPress環境構築の手順をまとめます。| 手順 | 操作内容 |
|---|---|
| インストール確認 | docker compose version でv2を確認する |
| 作業ディレクトリ作成 | mkdir ~/wordpress-compose を作成してcdで移動する |
| yaml作成 | docker-compose.ymlにdb・wordpressサービスとボリュームを定義する |
| 起動 | docker compose up -d でバックグラウンド起動する |
| 状態確認 | docker compose ps でSTATUS=Upを確認してブラウザでアクセスする |
| 停止・削除 | docker compose down でコンテナとネットワークを削除する |
WordPressのような「Webサーバー+DB」の組み合わせはComposeが最も力を発揮する典型的なユースケースです。
まずは今回の構成を手元で動かし、yamlを少しずつ変えながら理解を深めていきましょう。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、本記事で紹介したDocker Composeの構築手順を、さらに深く学べる講座を用意しています。
→ Dockerマスター講座の詳細はこちら
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:Dockerfileの書き方入門|自分のアプリをイメージ化する基礎と注意点
- 前のページへ:コンテナとは何か|Dockerで理解する仮想マシンとの違いと利点
- この記事の属するカテゴリ:Dockerへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます