UbuntuでDockerを使ってWordPressをインストールする方法

UbuntuでDockerを使ってWordPressをインストールする方法

Ubuntu VPS(仮想専用サーバー)にWordPressをインストールするには、通常LAMP環境(Linux、Apache、MySQL、PHP)が必要ですが、アプリケーションと依存関係をひとつのコンテナにまとめて動作させるコンテナ型の仮想化プラットフォームであるDockerを利用すれば、同様の環境を手軽に構築できます。

Dockerを利用することで、必要なコンポーネントをすべて含んだ事前構築済みイメージからWordPressを起動できるため、セットアップ作業が簡略化します。こうした手法は、モジュール式でメンテナンスや機能追加が容易になり、新たにインスタンスが必要になった際もすぐに展開可能です。

本記事では、Ubuntu上でDockerを活用し、WordPressを導入する手順を解説します。前提条件の設定から、コンテナ化されたCMSとしてWordPressを運用する流れまで、段階ごとに詳しく見ていきましょう。

DockerでWordPressをインストールするための前提条件

WordPressをDockerで導入する前に、まずは互換性を確保するため、Ubuntu 22.04以降が動作するVPSを用意します。

システムファイルを編集するときに権限エラーが発生しないよう、VPSにはroot権限を付与しておき、WordPressサイトを公開できるように、VPSへドメインを割り当てる設定も済ませておきましょう。

まだVPSを用意できていない場合は、HostingerのDocker対応VPSプランをぜひ検討してみてください。DockerとWordPressは比較的軽量なので、シングルコアCPU、4GBメモリ、50GBストレージを備えたKVM 1プランでも問題ありません。サイト規模が拡大した際は、上位プランへスムーズに移行できます。

また、HostingerではWebブラウザ経由でVPSにroot権限で直接アクセスできるため、インストール作業を効率化できます。

セットアップ時に問題が生じた場合は、Kodee AIアシスタントがWordPressインスタンスの管理をサポートします。問い合わせ欄に質問を入力するか、要件を伝えるだけで、Kodeeが適切な手順をご案内します。

Docker ComposeでWordPressをインストールする方法

まずは、以下の手順に沿ってDockerでWordPressを導入しましょう。開始前にPuTTY SSHクライアントまたはターミナルからVPSへコマンドラインで接続してください。さらに手軽な方法として、Hostingerのブラウザターミナルも利用できます。

1.DockerとDocker Composeをインストール

HostingerのVPSにはあらかじめ設定済みのテンプレートが用意されており、マウス操作だけでDockerとDocker Composeを導入できるので、初心者でも迷わず進められます。

新しいテンプレートを適用すると既存のデータが消失します。続行する前に重要ファイルを必ずバックアップしておいてください。

hPanelでVPS管理画面を開き、OS & Panel(OSとパネル) > Operating System(オペレーティングシステム)へ移動します。一覧からDockerを選択し、Change OS(OSを変更)をクリックしてください。

細かい設定を行いたい場合は、コマンドを使ってDockerをインストールし、Docker Composeをインストールしてください。

次に、以下のコマンドを使ってDockerとDocker Composeが正しく設定されているかを確認します。

docker --version
docker-compose --version

それぞれのコマンドがバージョン番号を返せば、正常に導入できています。

2.プロジェクトディレクトリの準備

プロジェクト用ディレクトリを作成し、DockerやWordPress関連ファイルをまとめます。

mkdir wordpress

デフォルト設定ではホームディレクトリ内に「wordpress」フォルダが生成されます。任意の場所や別名を指定しても問題ありません。

次に作成したディレクトリへ移動します。

cd wordpress

ここから先はこのディレクトリ内で作業を進めます。

3.Docker Composeファイルの作成

Docker Composeファイルは、コンテナにインストールするソフトウェアコンポーネントの情報を提供します。この場合、WordPressとデータベースアプリケーションの設定を指定します。

ターミナルで次のコマンドを実行し、エディターでファイルを開きましょう。

sudo nano docker-compose.yml

以下の内容を貼り付け、各値(ユーザー名・パスワード・データベース名)を任意のものに書き換えてください。

version: "3" 
services:
db:
image: mysql:latest
restart: always
environment:
MYSQL_ROOT_PASSWORD: MySQLRootPassword
MYSQL_DATABASE: MySQLDatabaseName
MYSQL_USER: MySQLUsername
MYSQL_PASSWORD: MySQLUserPassword

wordpress:
depends_on:
- db
image: wordpress:latest
restart: always
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: MySQLUsername
WORDPRESS_DB_PASSWORD: MySQLUserPassword
WORDPRESS_DB_NAME: MySQLDatabaseName
volumes:
- "./:/var/www/html"

phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: always
ports:
- "8080:80"
environment:
PMA_HOST: db
PMA_USER: MySQLUsername
PMA_PASSWORD: MySQLUserPassword

volumes:
mysql: {}

保存するにはCtrl+X、続いてYキーEnterキーを押し、エディタを閉じます。

4.Dockerコンテナの起動

以下のコマンドでDocker Composeを実行し、WordPressをコンテナ内にインストールして起動します。なお、プロジェクトディレクトリ内にいる場合のみ動作することを覚えておいてください。

docker-compose up -d

Docker ComposeはYAMLファイルで指定されたとおりにDocker Hubからイメージを取得し、コンテナを設定し、ネットワーク接続をセットアップします。インターネット速度によっては、このセットアップに数分かかる場合があります。

ターミナルにDone(完了)と表示されれば、操作可能な状態に戻ります。

5.WordPressセットアップ画面にアクセス

Dockerコンテナが起動している状態で、Webブラウザから新しく作成したWordPressにアクセスできるようになります。ドメイン名がVPSに向けられているため、ブラウザのアドレスバーにドメイン名を入力するだけでアクセス可能です。

WordPressのセットアップウィザードが表示されるので、希望する言語を選択してContinue(続行)をクリックします。

次の画面では、サイトタイトル、ユーザー名、パスワード、メールアドレスなど、サイトの基本情報を入力していきます。すべて入力したら、Install WordPress(WordPressをインストール)をクリックしてください。

インストールが完了すると、Log In(ログイン)ボタンが表示されます。先ほど作成した認証情報を使ってWordPressダッシュボードにアクセスしましょう。

6.Docker設定をカスタマイズする

本番環境でWordPressサイトを運用する場合、セキュリティとパフォーマンスを向上させるための追加設定が欠かせません。ここからは、DockerでWordPressをデプロイする際の重要なカスタマイズ方法をご紹介します。

環境ファイルを使った機密データの保護

データベースのユーザー名やパスワードなどの認証情報をDocker Composeファイルに直接記述するのはセキュリティ上好ましくありません。環境ファイル(.env)を作成して、機密データを安全に管理しましょう。

wordpressディレクトリ内で、.envファイルを作成します。

nano .env

.envファイルにWordPressデータベースの認証情報を定義します。以下のプレースホルダーを実際の値に置き換えてください。

MYSQL_ROOT_PASSWORD=MySQLRootPassword
MYSQL_DATABASE=MySQLDatabaseName
MYSQL_USER=MySQLUsername
MYSQL_PASSWORD=MySQLUserPassword

ファイルを保存したら、docker-compose.ymlファイルで環境変数を参照するように更新します。

db:
image: mysql:latest
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}

変更を保存し、Docker Composeを再起動して新しい設定を反映させます。

docker-compose up -d

SSL証明書の取得

SSL証明書は、ユーザーデータの保護と検索エンジンでの評価向上に重要な役割を果たします。Let’s Encryptを使ったNGINXプロキシを追加することで、自動的にSSL証明書を取得できます。

services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
letsencrypt-nginx-proxy-companion:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: letsencrypt
environment:
NGINX_PROXY_CONTAINER: nginx-proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./certs:/etc/nginx/certs
- ./vhost.d:/etc/nginx/vhost.d
- ./html:/usr/share/nginx/html

nginx-proxyとの競合を避けるため、wordpressサービスからポートマッピングを削除し、your_emailyour_domain.comを実際の値に置き換えて、SSL関連のラベルを追加します。

wordpress:
image: wordpress:latest
labels:
- "VIRTUAL_HOST=your_domain.com"
- "LETSENCRYPT_HOST=your_domain.com"
- "LETSENCRYPT_EMAIL=your_email@your_domain.com"

同じwordpressサービスで、セキュリティを向上させるため、wp-contentディレクトリのみをマウントするよう変更します。必要なファイルのみをホストとコンテナ間で共有することで、より安全な環境を構築できます。

volumes:
- ./wp-content:/var/www/html/wp-content

環境変数の使用とNGINXでのSSLサポート追加後の完成したdocker-compose.ymlファイルは以下のようになります。

version: "3"

services:
db:
image: mysql:latest
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- mysql:/var/lib/mysql

wordpress:
depends_on:
- db
image: wordpress:latest
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
volumes:
- ./wp-content:/var/www/html/wp-content
labels:
- "VIRTUAL_HOST=your_domain.com"
- "LETSENCRYPT_HOST=your_domain.com"
- "LETSENCRYPT_EMAIL=your_email@your_domain.com"

phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: always
ports:
- "8080:80"
environment:
PMA_HOST: db
PMA_USER: ${MYSQL_USER}
PMA_PASSWORD: ${MYSQL_PASSWORD}

nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./certs:/etc/nginx/certs
- ./vhost.d:/etc/nginx/vhost.d
- ./html:/usr/share/nginx/html

letsencrypt-nginx-proxy-companion:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: letsencrypt
environment:
NGINX_PROXY_CONTAINER: nginx-proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./certs:/etc/nginx/certs
- ./vhost.d:/etc/nginx/vhost.d
- ./html:/usr/share/nginx/html

volumes:
mysql: {}

変更を保存したら、以下のコマンドでDocker Composeを再起動することを忘れずに実行してください。

docker-compose up -d

7.DockerでWordPressを管理・拡張する

DockerでWordPressを運用し始めたら、サイトの成長に合わせてパフォーマンスを最適化し、データの安全性を確保するための定期的なメンテナンスが重要になります。具体的な方法を見ていきましょう。

WordPressコンテナのスケールアップ

サイトのトラフィックが増加してきた場合、複数のコンテナを並列実行することでWordPressサービスを拡張できます。複数のコンテナ間でユーザーリクエストを均等に分散することで、最適なパフォーマンスとサイトの可用性を維持できます。

Docker Composeファイルで、希望するレプリカ数(例:3)を指定してWordPressコンテナのインスタンスを追加します。

 wordpress:
depends_on:
- db
image: wordpress:latest
restart: always
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
volumes:
- "./:/var/www/html"
deploy:
replicas: 3

以下のコマンドを実行して変更を適用します。

docker-compose up -d --scale wordpress=3

Dockerが追加のWordPressコンテナを起動し、トラフィックを各コンテナ間で自動的に分散処理します。

WordPressファイルの定期バックアップ

データの損失や破損からWordPressサイトを守るため、WordPressファイルとデータベースの両方を定期的にバックアップすることが大切です。

DockerがWordPressディレクトリをボリュームとしてマウントしているため、以下のシンプルなコマンドでディレクトリ全体をバックアップできます。

cp -r /path/to/wordpress /path/to/backup/location

MySQLデータベースをバックアップする場合は、以下のコマンドを実行します。 なお、[db_container_name][MYSQL_USER][MYSQL_PASSWORD][MYSQL_DATABASE]は実際のデータベースコンテナ名と認証情報に置き換えてください。

docker exec [db_container_name] /usr/bin/mysqldump -u [MYSQL_USER] -p[MYSQL_PASSWORD] [MYSQL_DATABASE] > backup.sql

データベースダンプが作成され、必要に応じて後から復元できる状態になります。

Hostinger VPSをご利用の場合は、内蔵のバックアップツールを使ってより簡単にデータのバックアップと復元が行えます。VPSダッシュボードの左サイドバーでBackup & Monitoring(バックアップ & モニタリング)Snapshots & Backups(スナップショット & バックアップ)に移動してアクセスできます。

現在のセットアップ全体をキャプチャするスナップショットの作成や、自動週次バックアップから以前のデータへの復元を選択可能です。

まとめ

本記事では、Ubuntu VPSでDockerを使ったWordPressのインストールと設定方法について詳しく解説し、Docker Composeの基本セットアップから本番環境でのカスタマイズまで、コンテナ化された環境で完全に機能するWordPressセットアップが完成しました。

DockerでWordPressを運用し始めたら、コンテンツ配信ネットワーク(CDN)の導入など、さらなるサイト最適化を検討してみてください。同じVPS上で他のアプリケーションをホストする場合も、Docker コンテナを活用することで効率的に管理できます。

Dockerを利用したWordPressサイト開発に関する質問や共有したいことがありましたら、下のコメント欄をぜひご活用ください。

WordPressにおけるDockerに関するよくある質問

WordPressでDockerを使用するメリットは何ですか?

Dockerを使うことで、必要に応じてWordPress環境を簡単にデプロイ・拡張できるようになります。依存関係が分離されるため、WordPressサイトの更新、バックアップ、移行作業を効率的に行えます。

Dockerでひとつのサーバーに複数のWordPressサイトを運用できますか?

はい、可能です。Dockerを使うと、各サイトに個別のコンテナを使用してひとつのサーバーで複数のWordPressサイトを運用できます。各コンテナには固有のポート、ボリューム、データベース接続を設定して適切に分離しましょう。

WordPress Dockerコンテナの設定方法を教えてください

WordPress Dockerコンテナの設定は、Docker Composeファイルを使ってサービス、ポート、環境変数を定義します。なお、データベース認証情報などの機密データは、Composeファイルにリンクした.envファイルに保存することを強く推奨します。

Author
著者

Yūto Ōmura

イギリスから日本へ帰国後、翻訳者として8年従事。英国の大学ではメディア・映像を専攻し、以来、日英両言語にて10年以上複数のウェブサイトおよび動画メディアを運営。プライベートでは、料理をしたり、家族で小旅行に行ったりするのが好きです!