DockerでWordPress+MySQL+phpMyAdmin+WSGIのプラクティス

最近よく目にするDockerを使ってみようと思い立ち、練習がてら、ローカルでWordPressを使ったサイト構築を試してみました。ついでにPython + BottleによるWebアプリをWSGIでWebサーバに連結してみました。

1. この記事でやろうとすること

Docker上で…

  1. Apache Webサーバ
  2. WordPressによるWebサイト構築
  3. WordPressのデータベースとしてMySQLサーバ導入
  4. MySQLサーバをWebブラウザで操作できるphpMyAdminの導入
  5. PythonアプリとApache Webサーバを連結(WSGI)

2. 前提

Mac (macOS 10.15.2 Catalina)

3. Docker Desktop for Mac

Docker公式からDocker Desktopをダウンロードします。

インストール後にDockerを実行するとメニューバーにDockerのアイコンが表示されます。

Dockerアイコン

Dockerアイコン

執筆時のバージョンは次のとおり。
メニューバーDockerアイコン > About Docker Desktopで表示します。

Docker Desktopのバージョン等

Docker Desktopのバージョン等

 

4. 構成ファイル一覧

GitHubにリポジトリ作りました。
次のコマンドで入手できます。

 

構成ファイルは次のとおりです。

3つのコンテナ(WordPress、MySQL、phpMyAdmin)を使ってアプリケーションを構築します。

トップのディレクトリ名が「docker-test」
アプリを構成する3つのコンテナ用にサブディレクトリ(mysql, phpmyadmin, wordpress)を掘っています。

 

5. 主要ファイルの解説

Dockerfileとはコンテナイメージを作成するための指示書です。今回は3つのコンテナを使いますのでDockerfileは3つです。

MySQL用のDockerfile

mysql:5.7をベースにしていますが、その実、何も変更しません。

 

phpMyAdmin用のDockefile

phpmyadmin/phpmyadmin:latestをベースに、my-php.iniをコンテナを追加しました。
my-php.iniには、データベースのインポート/エクスポートの際に大きなファイルを扱うことをできるように、PHPの設定変更が記載されています。

 

WordPress用のDockerfile

wordpress:5.3.2-php7.2-apacheをベースにしています。
PythonアプリをApacheサーバにWSGIで接続できるように、
Python及びWSGI関連パッケージのインストール、Pythonの追加モジュールのインストール、Apacheの設定変更を指示しています。

 

docker-compose.yml

3つのコンテナを一絡げにしてビルド&実行するための指示書です。

ラスト3行で2つのVolumeの作成を指示しており、それぞれ、MySQLとWordPressのコンテナが使用します。
これらのVolumeは、コンテナが初めて起動したときに新規作成され、それ以降、明示的に削除を指示しない限り永続してデータを保持します。なので、コンテナを終了させた後に再度起動したとき、元のコンテンツを再現できます。

 

6. ビルド&コンテナ起動

ディレクトリdocker-testに移動した上で、次のコマンドでDockerイメージをビルドします。

 

ビルドに成功すると3つのDockerイメージが作成されます。
イメージを確認するのは次のコマンド。ベースとなるDockerイメージもリストされるのでgrepでフィルタしてます。

 

次のコマンドでコンテナを起動します。
-dオプションはバックグラウンドで起動させるため。
コンテナ間を接続するネットワーク、2つのVolume、3つのコンテナが起動します。

 

コンテナの起動を確認するには次のコマンドです。

 

Volumeを確認するのは次のコマンドです。

 

7. WordPressの動作確認

次のURLに、WebブラウザでアクセスするとphpMyAdminのページが表示されます。

http://localhost:8081/

WordPress用のDBが出来上がっていますが空っぽです。

次のURLに、WebブラウザでアクセスするとWordPressのセットアップ画面が表示されます。
http://localhost:8080/

日本語を選択して続けると、サイトの設定画面が現れますので必要な項目を入力します。

WordPressをインストールをクリックしたら…成功した模様。

ログインしてみました。
サイトを表示してみました。
今一度phpMyAdminでDBの中身を確認し見ましょう。さっきは空っぽでしたが、今度はテーブルができています。

http://localhost:8081/

8. Pythonアプリの動作確認

次のURLにアクセスします。WSGIによりPythonアプリとApache Webサーバがちゃんと繋がりました。

http://localhost:8080/webApp

Pythonアプリの中身はこれです。Bottleを使って定型文をレスしているだけ。
大事なのは、PythonがWebサーバ経由でレスポンス出来るということ。

 

なお、Apacheの設定はこちら。/webAppにアクセしたときにwebapp.pyが応答します。

 

9. コンテナの削除

起動しているコンテナを停止&削除するのは次のコマンドです。
なお、コンテナを削除してもMySQLやWordPressのデータが記録されているVolumeは削除されません。次回コンテナ起動時に元通りにWebサイトが復帰しますので大丈夫。

 

以上です。

10. 参考

クイックスタート・ガイド:Docker Compose と WordPress

Docker ComposeでWordPressを構築する

Docker Compose でWordPress環境を作ってみる

docker-composeで作るWordpress環境

 

 

Leave a Comment

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください