前回、「Raspberry Pi Zero WでもDockerでローカルWebサーバー」のように非力なRaspberry Pi Zero WにDockerでLAMP環境を構築しました。Wordpressのコンテナは使わずに、Wordpressをダウンロードしてインストールする形です。データベースへの接続で苦労したのと、Raspberry Pi Zero Wは性能面で構築するのにインストールなどが遅かったです。
気を取り直して、DockerでWordpressのコンテナを使い、DockerだけでWordpressを動かしてみます。
とても簡単なので、wordpressを使ったことがない人もRaspberry Piがあれば体験できますからオススメです。
追記:コンテナファイルとイメージファイルの削除からやり直す
Raspberry Pi 4とlite
Raspberry Pi Zero Wでは、CPUアーキテクチャの関係で、mariadbも使えませんでした。今回はRaspberry Pi 4で試します。
Dockerのイメージファイルは次を使いました。
- linuxserver/mariadb:latest
- arm32v7/wordpress:latest
合わせて、どうせSSHで繋いで作業するため、Raspberry Pi OS liteにしています。
これはフルデスクトップ版でも構いません。
フルデスクトップ版でRaspberry Piに直接マウスやキーボードを繋いで操作と設定をしてみてください。SSH接続しなくても同じようにできますよ。
DockerとDocker composeのインストール
Dockerと必要なイメージファイルをインストールする箇所はほぼ前回と同様です。
コマンドだけザッと並べておくとこうなります。何をしているのかは前回の記事も合わせてご覧ください。
sudo apt update
sudo apt full-upgrade
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker pi
sudo pip3 install docker-compose
sudo shutdown -r now
Raspberry Pi OSの場合、通常のDebianとは異なり、aptコマンドでインストールしません。スクリプトshでインストールします。参考:Install using the convenience script
Raspberry Pi OS liteの場合、pip3が入っていませんので、追加でインストールしてからpip3でdocker-composeをインストールできます。
デスクトップ版の人は、必要ありません。最初からpip3が入っています。
sudo apt install libffi-dev libssl-dev python3 python3-pip python3-dev
動作テスト
エラーが出なければOK
docker info
docker version
docker run hello-world
事前準備ファイルはなし
今回は事前準備のファイルは必要ありません。Raspberry Pi OS上であるローカルにファイルを置きません。(db_data:とhtml:)
もしも、ローカルにWordpress関連ファイルをFTPのように直接編集したい場合、次のymlにあるWordpressのVolumeを./html:/var/www/html
に変更してください。ローカルの/var/www/htmlで操作できます。
docker-compose.yml設定
homeフォルダで構いませんので、ymlファイルを作成して記述します。
version: '3.8'
services:
db:
image: linuxserver/mariadb:latest
volumes:
- db_data:/var/lib/mysql
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: wordpress
MYSQL_USER: test_user
MYSQL_PASSWORD: user_password
wordpress:
depends_on:
- db
image: arm32v7/wordpress:latest
volumes:
- html:/var/www/html
# - ./html:/var/www/html
ports:
- "8080:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: test_user
WORDPRESS_DB_PASSWORD: user_password
volumes:
db_data:
html:
簡単な解説
- mariadbを使います。
- WordPressのパスワードやデータベース名、ユーザー名などはご自身で置き換えてください。
- ポートは8080で表示できるようにしています。(通常、ブラウザだと80)
- 先程書いたように、OSのローカルにファイルを置く場合は、Wordpress欄のVolumesでコメントアウトしてある方に変えます。その際、最後のhtml:ボリュームの記述は必要ありません。
WORDPRESS_DB_HOST: db:3306
はmysqlのデフォルトポート番号です。
インストールしたRaspberry Piだけで試す場合、potrsにlocalhostと同義の「127.0.0.1
」を設定しても良いでしょう。(ローカル・ループバック・アドレス)"127.0.0.1:8080:80"
docker-composeで起動する
ymlのファイルを保存したら、dockerをdocker-composeで起動します。
docker-compose up -d
最初は、イメージファイルをダウンロードしてコンテナをyml通りに作成しますので時間がかかります。
Status: Downloaded newer image for wordpress:latest Creating pi_db_1 ... done Creating pi_wordpress_1 ... done
こんな感じで無事に作成できました。
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fe733eb21ddc arm32v7/wordpress:latest "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp pi_wordpress_1
34c08f502e78 linuxserver/mariadb:latest "/init" 4 minutes ago Up 4 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp pi_db_1
Webブラウザでアクセスする
WordPressの画面を出すのに、WebブラウザからURLでアクセスします。
同Wi-Fi内にあるPCから可能です。今回はポート番号を8080にしてあったので、以下のようにします。
http://<ipアドレス>:8080/wp-admin/install.php
あとはWordpress側の設定ウィザードになります。


やり直す
データベースへの接続エラーや、設定したサーバーが動作している表示でも上手く動作していないことがあった場合、コンテナと仮想のサーバー領域であるイメージファイルを一旦削除すると動作することがありました。
downコマンドだけだと、WordPressのデータベースが残ってしまいます。コンテナとデフォルトネットワーク、WordPressのデータベースも全て削除するのには以下のコマンドです。
docker-compose down --volumes
ymlファイルを編集してどうしても上手く行かない時は、Volumeを一旦削除することでできました。この後でもう一度、docker-compose-up -d
として再作成します。
データベースの接続確立エラー
Error establishing a database connection
のエラー出ることがあった時に削除は有効でした。

このページは動作していません
コメントいただいたように、「このページは動作していません<IPアドレス>からデータが送信されませんでした。」など、実際にはサーバーとして動作していないことがあるのは、ymlファイルを書き換えてトライすると起きるようです。
データベースへの接続エラーは、データベースの指定が間違っていることもありましたが、どうもymlの中身がキャッシュされていて、変更しても効かないことがあるようです。
ymlを修正せず、インストールしたコンテナのイメージファイルを削除してからdocker-compose up -d
コマンドを試してください。Dockerのバグ??
Docker LAMP環境との違い
WordPressのコンテナがあるんだから、その方が話が早いのでは? 私もそう思っていました。DockerでいくつもWordpressコンテナを入れたい(マルチドメインのように)、他のWebシステムも使いたいとなると面倒なことがあります。
80ポート番号を被らないようにその分だけ設定しないとなりません。
実際に何個もインストールする人はあまり居ないと想像しますので、1つや2つであればDockerの方が楽です。
直接インストールのLAMP環境との違い
Dockerだと、Webサーバー、mysqlデータベースなどをコンテナ単位でエイヤっと削除できるのが便利なんです。直接インストールした場合、エラーに悩まされて元の環境を取り戻すのにも一苦労することがあります。
バージョンの違いで起こる不具合や、OSにも影響する現象になってしまうと、非エンジニアの私としてはお手上げです。

ザックリとしたイメージ図の通り、Dockerでイメージファイルをダウンロードして、docker-compose.ymlの設定通りにコンテナを作成し実行します。
このコンテナを削除して、新たにコンテナを作ることで何度も試せるのが楽です。
よくある仮想化のOSみたいなものと同じです。
DockerだけがOSに直接インストールしている状態です。だから、個別にOSへ直接インストールする純粋な環境より影響がほぼ無い状態で試せます。
情報は最新で
実は今回調べてみて感じたのが、Dockerのルールが細かく変わっていた(ように感じた)ので、なるべく新しい情報で調べるのが少し大変でした。
Dockerのコンテナ2つでWordpressのテストサーバー構築のお話でした。