Raspberry Pi 4とDockerで最低限のWordPressテスト環境

前回、「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側の設定ウィザードになります。

WordPressのインストール画面
これは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でイメージファイルをダウンロードして、docker-compose.ymlの設定通りにコンテナを作成し実行します。

このコンテナを削除して、新たにコンテナを作ることで何度も試せるのが楽です。

よくある仮想化のOSみたいなものと同じです。

DockerだけがOSに直接インストールしている状態です。だから、個別にOSへ直接インストールする純粋な環境より影響がほぼ無い状態で試せます。

情報は最新で

実は今回調べてみて感じたのが、Dockerのルールが細かく変わっていた(ように感じた)ので、なるべく新しい情報で調べるのが少し大変でした。

Dockerのコンテナ2つでWordpressのテストサーバー構築のお話でした。

SHAREする
URLをコピーする
URLをコピーしました!

コメント

コメント一覧 (3件)

  • わかりやすい解説、参考になります。ありがとうございます。
    説明の通り、ラズパイ4でdocker-composeまででき、container lsでも正常のように見えますが、webからアクセスができません。
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    1a53092451b0 arm32v7/wordpress:latest "docker-entrypoint.s…" About a minute ago Up 8 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp pi_wordpress_1
    5a03a7b6e675 linuxserver/mariadb:latest "/init" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp pi_db_1

    wifiからのPC、ラズパイ4からでも同様です。
    pc -> http://192.168.11.22:8080/wp-admin/install.php
    ラズパイ4 -> http://127.0.0.1:8080/wp-admin/install.php
    このページは動作していません192.168.11.22 からデータが送信されませんでした。
    このページは動作していません127.0.0.1 からデータが送信されませんでした。
    という具合です
    何か原因等、考えられるのもがありましたら、教えてください。
    (参考)docker-compose.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: eturo1135
    MYSQL_DATABASE: wp_db
    MYSQL_USER: user
    MYSQL_PASSWORD: eturo8128

    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: user
    WORDPRESS_DB_PASSWORD: eturo8128

    volumes:
    db_data:
    html:

    • 情報をありがとうございます。
      ymlの中身は合っているように思います。

      今回、私は「データベースの接続確立エラー」は経験しました。

      その「このページは動作していません〜からデータが送信されませんでした」はWordpress側のエラーだと思うので、恐らく、8080ポートが使えないのでは??
      ウィルス対策ソフトやファイヤーウォールソフトなどが影響しているのはないでしょうか。一時停止なりして実行しても同じでしょうか。

      ポートを変更したらどうでしょう?
      空いているとしたら、8082とか。

      ポートを変更したり、ymlファイルを編集したりすると、データベースの接続確立エラーがありました。原因が分からなかったです。
      その場合、コンテナを全消ししてからやり直したら上手く行きました。イメージも消しました。記事を参考に一度削除してみてください。

      記事通りに削除した後、改めてdocker-compose-up -d で、今度は直ぐにイメージが出来上がります。
      その前にymlは編集し直してください。

      やり直せるのが簡単なのがDockerの強みですね。
      でも、多分、恐らく、そのポート番号が止められている(もしくは被っている)と想像されます。

      解決されたらコメントいただけると助かります。

コメントする

コメントは日本語で入力してください。お願いいたします。

CAPTCHA

目次
トップへ
目次
閉じる