WordPress · 4 min read · Sep 10, 2025

Docker Composeを使用してWordPressをインストールする方法

WordPress CMS(コンテンツ管理システム)は、ユーザーがデジタルコンテンツを作成、管理、公開できる広く使用されているオープンソースプラットフォームです。主にウェブサイトやブログ向けに設計されています。2003年に最初にリリースされて以来、WordPressは世界で最も人気のあるCMSとなり、インターネット上のすべてのウェブサイトの40%以上を支えています。コーディングの経験がほとんどない個人でもプロフェッショナル品質のウェブサイトを構築・維持できるユーザーフレンドリーなインターフェースを提供しています。WordPressは非常にカスタマイズ可能で、数千のテーマやプラグインが利用可能で、その機能を拡張し、シンプルなブログから複雑なeコマースサイトまで幅広いニーズに対応しています。強力なコミュニティサポート、定期的なアップデート、広範なドキュメントにより、初心者と経験豊富な開発者の両方にとって信頼性が高く多用途な選択肢となっています。

Dockerは、軽量でポータブルなコンテナ内でアプリケーションのデプロイ、スケーリング、管理を自動化するために設計されたオープンソースプラットフォームです。2013年に導入されたDockerは、アプリケーションがどこにデプロイされても一貫した環境で実行できるようにすることで、ソフトウェア開発に革命をもたらしました。開発者のローカルマシン、オンプレミスのデータセンター、またはクラウド上であっても同様です。コンテナはアプリケーションとその依存関係、ライブラリ、設定ファイルをバンドルし、異なる環境での一貫したパフォーマンスを保証します。このコンテナ化により、開発ワークフローが簡素化され、コラボレーションが強化され、開発者がアプリケーションをシームレスに作成、共有、実行できるようになり、効率が向上します。Dockerのエコシステムには、Docker SwarmやKubernetesなどのコンテナオーケストレーション用のツールやサービスが含まれており、大規模なコンテナデプロイメントの管理を容易にし、現代のDevOpsプラクティスにおける基盤技術となっています。

このチュートリアルでは、Docker/Docker Composeを使用してWordPressをインストールする方法を学びます。Dockerを使用することで、希望するスタックのインストールプロセスが大幅に簡素化されます。同じ構成を使用して、複数のサーバーに迅速にWordPressをインストールできます。また、SSL経由でサイトを提供するために、データベース管理用のphpMyAdminツールとNginxプロキシサーバーもインストールします。

前提条件

  • sudo権限を持つ非rootユーザーを持つLinuxサーバー。私たちはこのチュートリアルのためにUbuntu 24.04を実行しているサーバーを使用しています。
  • サーバーを指す完全修飾ドメイン名(FQDN)。私たちの目的のために、WordPressサイトのドメイン名としてexample.com、phpMyAdminサイトのためにphpmyadmin.example.comを使用します。
  • すべてが更新されていることを確認してください。$ sudo apt update
  • 基本的なユーティリティパッケージをインストールします。いくつかはすでにインストールされているかもしれません。$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y

ステップ1 - ファイアウォールの設定

最初のステップはファイアウォールの設定です。Ubuntuにはデフォルトでufw(Uncomplicated Firewall)が付属しています。

ファイアウォールが実行中かどうかを確認します。

$ sudo ufw status

次の出力が得られるはずです。

Status: inactive

SSHポートを許可して、ファイアウォールを有効にしたときに現在の接続が切断されないようにします。

$ sudo ufw allow OpenSSH

HTTPおよびHTTPSポートも許可します。

$ sudo ufw allow http
$ sudo ufw allow https

ファイアウォールを有効にします。

$ sudo ufw enable
コマンドは既存のssh接続を中断する可能性があります。この操作を続行しますか(y|n)? y
ファイアウォールはアクティブで、システム起動時に有効になっています

ファイアウォールの状態を再度確認します。

$ sudo ufw status

同様の出力が表示されるはずです。

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

ステップ2 - DockerおよびDocker Composeのインストール

Ubuntu 22.04には古いバージョンのDockerが付属しています。最新バージョンをインストールするには、まずDocker GPGキーをインポートします。

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Dockerリポジトリファイルを作成します。

$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

システムリポジトリリストを更新します。

$ sudo apt update

最新バージョンのDockerをインストールします。

$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

実行中であることを確認します。

$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2024-07-19 17:11:19 UTC; 3s ago
TriggeredBy: ? docker.socket
       Docs: https://docs.docker.com
   Main PID: 1163 (dockerd)
      Tasks: 7
     Memory: 21.9M
        CPU: 221ms
     CGroup: /system.slice/docker.service
             ??2803 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

デフォルトでは、Dockerはroot権限を必要とします。dockerコマンドを実行するたびにsudoを使用しないようにするには、ユーザー名をdockerグループに追加します。

$ sudo usermod -aG docker $(whoami)

この変更を有効にするには、サーバーからログアウトして同じユーザーとして再度ログインする必要があります。または、次のコマンドを使用します。

$ su - ${USER}

ユーザーがDockerグループに追加されたことを確認します。

$ groups
navjot wheel docker

ステップ3 - WordPress用のDocker Composeファイルを作成

私は/optにWordPressのインストール全体を行います。必要に応じて/varや/homeなどの別の場所を選択できます。

cd /opt

WordPress構成用のディレクトリを作成します。

$ mkdir wordpress

ディレクトリに移動します。

$ cd wordpress

編集用にDocker Composeファイルを作成して開きます。

$ nano docker-compose.yml

以下のコードを貼り付けます。

services:
  wp:
    image: wordpress:latest
    container_name: wordpress-app
    restart: unless-stopped
    expose:
      - 8080
    volumes:
      - ./config/php.conf.ini:/usr/local/etc/php/conf.d/conf.ini
      - ./wp-app:/var/www/html
      #- ./plugin-name/trunk/:/var/www/html/wp-content/plugins/plugin-name # プラグイン開発
      #- ./theme-name/trunk/:/var/www/html/wp-content/themes/theme-name # テーマ開発
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: "${DB_NAME}"
      WORDPRESS_DB_USER: "${DB_USER_NAME}"
      WORDPRESS_DB_PASSWORD: "${DB_USER_PASSWORD}"
      VIRTUAL_HOST: example.com
      LETSENCRYPT_HOST: example.com
    depends_on:
      - db
    links:
      - db

  wpcli:
    image: wordpress:cli
    container_name: wpcli_app
    volumes:
      - ./config/php.conf.ini:/usr/local/etc/php/conf.d/conf.ini
      - ./wp-app:/var/www/html
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: "${DB_NAME}"
      WORDPRESS_DB_USER: "${DB_USER_NAME}"
      WORDPRESS_DB_PASSWORD: "${DB_USER_PASSWORD}"
    depends_on:
      - db
      - wp

  pma:
    image: phpmyadmin/phpmyadmin
    container_name: pma
    restart: unless-stopped
    environment:
      # https://docs.phpmyadmin.net/en/latest/setup.html#docker-environment-variables
      PMA_HOST: db
      PMA_PORT: 3306
      MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
      UPLOAD_LIMIT: 50M
      VIRTUAL_HOST: phpmyadmin.example.com
      LETSENCRYPT_HOST: phpmyadmin.example.com
    expose:
      - 8081
    links:
      - db:db

  db:
    image: mysql:latest
    container_name: wordpressdb
    restart: unless-stopped
    command: [
        '--default_authentication_plugin=mysql_native_password',
        '--character-set-server=utf8mb4',
        '--collation-server=utf8mb4_unicode_ci'
    ]
    volumes:
      - ./wp-data:/docker-entrypoint-initdb.d
      - db_data:/var/lib/mysql
    environment:
      MYSQL_DATABASE: "${DB_NAME}"
      MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
      MYSQL_USER: "${DB_USER_NAME}"
      MYSQL_PASSWORD: "${DB_USER_PASSWORD}"

volumes:
  db_data:

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

私たちは2つのWordPressイメージをプルしています。一つはウェブサイト用で、もう一つはWP-CLIツール用です。両方のイメージはMySQL 8.0のDockerイメージに依存しています。ここでは、データベースの資格情報のための環境変数を設定しました。私たちは両方のコンテナのために2つのボリュームを作成しました。一つはWordPressサイトの公開ファイルを指し、もう一つはカスタムPHP.iniの場所を指します。また、Nginxの仮想ホストドメインとWordPressサイトのLet’s Encrypt SSLドメインのための環境変数も定義しました。

さらに環境変数を追加し、Dockerファイルにカスタムwp-config.phpデータを追加することができます。追加の環境変数については、WordPressのDockerHubページを参照してください。

次のイメージはphpMyAdmin用で、同じMySQLイメージに依存し、rootパスワードを使用して接続します。アップロード制限は50MBです。必要に応じて変更できます。WordPressサイトと同様に、Nginxの仮想ホストドメインとphpMyAdminサイトのLet’s Encrypt SSLドメイン名を定義しました。

最後のイメージはMySQLデータベース用です。デフォルトの認証方法と文字セットを設定するためにいくつかのコマンドを渡しました。データを保存するためのいくつかのボリュームを作成し、データベースの資格情報のための環境変数を設定しました。

次のステップは、Composeファイルで使用される変数のための環境ファイルを作成することです。編集用に環境ファイルを作成して開きます。

$ sudo nano .env

以下のコードを貼り付けます。

DB_NAME=wordpress
DB_USER_NAME=username
DB_USER_PASSWORD=userpassword
DB_ROOT_PASSWORD=password

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。変数はお好みのユーザー名とパスワードに置き換えてください。

カスタムphp.iniファイルを使用してPHP設定をカスタマイズできます。

PHP設定用のフォルダーを作成します。

$ mkdir config

php.conf.iniファイルを作成して編集用に開きます。

$ nano config/php.conf.ini

以下のコードを貼り付けます。必要に応じて値を調整してください。PhpMyAdminコンテナのアップロード制限は、このファイルで使用する値とは独立しています。

file_uploads = On
memory_limit = 500M
upload_max_filesize = 30M
post_max_size = 30M
max_execution_time = 600

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

ステップ4 - Nginx用のDocker Composeを更新

Nginx設定用のディレクトリを作成します。

$ mkdir nginx

そのディレクトリ内に仮想ホスト用のディレクトリを作成します。

$ mkdir nginx/vhost

nginx/vhost/wordpress.example.comを編集用に作成して開きます。

$ nano nginx/vhost/wordpress.example.com

以下のコードを貼り付けます。

server_tokens off;
client_max_body_size 30m;

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

nginx/vhost/phpmyadmin.example.comファイルについても同様の操作を行います。

$ nano nginx/vhost/phpmyadmin.example.com

以下のコードを貼り付けます。

server_tokens off;
client_max_body_size 50m;

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

再度Docker Composeファイルを開きます。

$ nano docker-compose.yml

volumes: db_data:行の前に以下のコードを貼り付けます。

  nginx:
    container_name: nginx
    image: nginxproxy/nginx-proxy
    restart: unless-stopped
    ports:
        - 80:80
        - 443:443
    volumes:
        - /var/run/docker.sock:/tmp/docker.sock:ro
        - ./nginx/html:/usr/share/nginx/html
        - ./nginx/certs:/etc/nginx/certs
        - ./nginx/vhost:/etc/nginx/vhost.d
    logging:
        options:
            max-size: "10m"
            max-file: "3"

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

上記のコードでは、NginxプロキシDockerイメージをプルし、ホストコンテナにポート80と443を公開します。これらは外部と接続するために使用されます。また、NginxのHTMLページ、すべてのSSL証明書が保存されるディレクトリ、および上記で使用した仮想ホスト用のディレクトリのためのボリュームを作成しました。WordPressとphpMyAdminサイトのファイルアップロードサイズを設定しました。サイトのドメイン名は、前のステップで定義した環境変数から取得されます。

ステップ5 - SSL用にDocker Composeを更新

Docker Composeファイルを編集用に開きます。

$ nano docker-compose.yml

volumes: db_data:行の前に以下のコードを貼り付けます。

  acme-companion:
    container_name: acme-companion
    image: nginxproxy/acme-companion
    restart: unless-stopped
    volumes_from:
        - nginx
    volumes:
        - /var/run/docker.sock:/var/run/docker.sock
        - ./nginx/acme:/etc/acme.sh
    environment:
        DEFAULT_EMAIL: [email protected]

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

ここでは、Nginxプロキシと連携して動作するAcme companion Dockerイメージをプルしています。Nginxコンテナからボリュームをプルします。また、Let’s Encrypt SSLに関するすべての設定を保存するacme.shツールのためのボリュームを定義します。最後に、Let’s EncryptでSSL証明書を登録するための環境変数を定義します。

ステップ6 - WordPressを起動してインストール

すべての設定ファイルが完了したので、コンテナを起動して立ち上げる時が来ました。

$ docker compose up -d

数分待ってから、コンテナの状態を確認します。

$ docker ps
CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS          PORTS                                                                      NAMES
c1e8a9b5169d   nginxproxy/acme-companion   "/bin/bash /app/entr…"   14 seconds ago   Up 7 seconds                                                                               acme-companion
8a37c78ff790   wordpress:latest            "docker-entrypoint.s…"   14 seconds ago   Up 7 seconds    80/tcp, 8080/tcp                                                           wordpress-app
4f9c777c97c2   phpmyadmin/phpmyadmin       "/docker-entrypoint.…"   14 seconds ago   Up 7 seconds    80/tcp, 8081/tcp                                                           pma
1b1dede46b07   nginxproxy/nginx-proxy      "/app/docker-entrypo…"   14 seconds ago   Up 11 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   nginx
b9cf64a2f4a3   mysql:latest                "docker-entrypoint.s…"   14 seconds ago   Up 11 seconds   3306/tcp, 33060/tcp                                                        wordpressdb

URL https://example.comを開いてWordPressインストーラーを開始します。

WordPressインストーラー言語選択

言語を選択し、次のページに進むために続行ボタンをクリックします。

WordPressインストーラーサイト詳細

サイトの詳細を入力し、ユーザー名、パスワード、メールアドレスを選択して、インストールを開始するためにWordPressをインストールボタンをクリックします。

WordPressインストール成功

インストール成功ページに移動します。ログインボタンをクリックしてログインページに移動します。

WordPressログインページ

ログイン情報を入力し、ログインボタンをクリックしてWordPressダッシュボードを開きます。

WordPressダッシュボード

これでWordPressを使用開始できます。

ステップ7 - PhpMyAdminにアクセス

URL https://phpmyadmin.example.comを介してphpMyAdminにアクセスできます。

phpMyAdminログインページ

ユーザー名としてrootを入力し、rootパスワードを入力してログインをクリックしてダッシュボードを開きます。

phpMyAdminダッシュボード

これでphpMyAdminを使用開始できます。

ステップ8 - WP-CLIにアクセス

次のコマンドを使用してWP-CLIにアクセスできます。

$ docker compose run --rm wpcli cli version

次の出力が得られます。

[+] Running 2/0
 ? Container wordpressdb    Running                                                                                0.0s
 ? Container wordpress-app  Running                                                                                0.0s
WP-CLI 2.7.1

毎回この長いコマンドを入力しないように、Linuxのエイリアス機能を使用できます。

$ alias wp="docker compose -f ~/wordpress/docker-compose.yml run --rm wpcli"

これで、コンテナ内のどこからでも次のコマンドを入力できます。

$ wp cli version

Linuxのエイリアスは一時的です。エイリアスを永続的にするには、~/.bashrcファイルを編集する必要があります。編集用に開きます。

$ nano ~/.bashrc

ファイルの最後に次の行を貼り付けます。

# カスタムエイリアス
alias wp="docker compose -f ~/wordpress/docker-compose.yml run --rm wpcli"

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

ファイルをソースして設定を再読み込みします。

$ source ~/.bashrc

WP-CLIを使用開始できます。

ステップ9 - WordPressのバックアップ

WordPressをバックアップする方法はいくつかあります。最も簡単な方法はプラグインを使用することです。そのためのプラグインがいくつかあります。また、phpMyAdminを使用してバックアップを作成することもできます。

コマンドラインを使用してWordPressデータベースをバックアップすることもできます。WordPressディレクトリに移動します。

$ cd ~/wordpress

次のコマンドを使用してWordPressデータベースをバックアップします。MySQLのrootパスワードを求められます。

$ docker compose exec db sh -c "exec mysqldump wordpress -uroot -p" | sudo tee wp-data/data_`date +%d-%m-%Y"_"%H_%M_%S`.sql >/dev/null
Enter password: password

上記のコマンドは、~/wordpress/wp-dataディレクトリにSQLバックアップを作成します。

ディレクトリの内容を確認します。

$ ls -al wp-data
total 908
drwxr-xr-x 2 root   root     4096 Jan 11 10:15 ./
drwxrwxr-x 6 navjot navjot   4096 Jan 11 10:05 ../
-rw-r--r-- 1 root   root   919814 Jan 11 10:14 data_11-01-2023_10_14_40.sql

ディレクトリにバックアップされたデータベースが表示されます。このデータベースはphpMyAdminツールを使用して復元することも、次のコマンドを使用して復元することもできます。

$ docker compose exec db sh -c "exec mysql -uroot -p" < wp-data/data_11-01-2023_10_14_40.sql

定期的にデータベースをバックアップするためにcronジョブを作成できます。

/etc/cron.dailyディレクトリにバックアップスクリプトを作成し、編集用に開きます。

$ sudo nano /etc/cron.daily/wpbackup.sh

以下のコードを貼り付けます。

#!/bin/bash
docker compose exec db sh -c "exec mysqldump wordpress -uroot -p" | tee wp-data/data_`date +%d-%m-%Y"_"%H_%M_%S`.sql >/dev/null

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

スクリプトを実行可能にします。

$ sudo chmod +x /etc/cron.daily/wpbackup.sh

これで、データベースは毎日バックアップされます。

ステップ10 - WordPressのアップグレード

WordPressをアップグレードする最も簡単な方法は、内蔵のアップデーターを使用することです。また、Dockerを使用してアップグレードすることもできます。最初のステップは、ステップ9のコマンドを使用してWordPressデータベースをバックアップすることです。

次に、ディレクトリに移動します。

$ cd ~/wordpress

コンテナを停止します。

$ docker compose down --remove-orphans

最新のコンテナイメージをプルします。

$ docker compose pull

必要に応じてdocker-compose.ymlに変更を加えます。 WordPressコンテナを再起動します。

$ docker compose up -d

結論

これで、Docker Compose、phpMyAdmin、WP-CLIを使用してWordPressをインストールする方法に関するチュートリアルは終了です。質問がある場合は、下のコメントに投稿してください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。