Docker で WordPress を立ち上げるときに、データベースとWordPressテーマなどの各種ファイルを永続化する方法についてです。
環境
- macOS mojave
- Docker Desktop Version 2.0.0.0
- WordPress: latest
- MySQL: 5.7
まとめ
- Dockerはメモリ上で動作するため、通常、コンテナを除去するとデータが消える。
- データベースを永続化するには、volumes を使用します。
- WordPressファイルを永続化するにも、volumes を使用します。
セットアップ手順
ここでは Docker Compose を使って、MySQL + WordPress を永続化しつつセットアップする手順について示します。
1. Docker Composeファイルの作成
適当な場所にプロジェクト用のフォルダを作り、フォルダに移動します。
$ mkdir ~/project01 $ cd ~/project01
docker-compose.yml と .env を作成し、次のようにします。
docker-compose.yml
version: '3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always env_file: .env wordpress: depends_on: - db image: wordpress:latest volumes: - ./wordpress:/var/www/html ports: - "8080:80" restart: always env_file: .env volumes: db_data:
.env
MYSQL_ROOT_PASSWORD=root_pass MYSQL_DATABASE=wordpress_db MYSQL_USER=wordpress_user MYSQL_PASSWORD=wordpress_pass WORDPRESS_DB_HOST=db:3306 WORDPRESS_DB_NAME=wordpress_db WORDPRESS_DB_USER=wordpress_user WORDPRESS_DB_PASSWORD=wordpress_pass
ポイント解説
下記は、本来 /var/lib/mysql
に配置されるWordPressのデータベースを、db_data
という名前の永続化領域に保存する指示になります。db_data
は Docker内で生成されます。ホスト側(macOS) の Finder 等で永続化されたデータベースを直接確認することはできません。
db: volumes: - db_data:/var/lib/mysql volumes: db_data:
下記は、本来 /var/www/html
に配置されるWordPress の各種ファイル (wp-config.phpなど) を、ホスト側(macOS)の ./wordpress
フォルダに配置する指示となります。./wordpress
は、docker-compose.yml
と同じフォルダに生成されます。
wordpress: volumes: - ./wordpress:/var/www/html
2. Docker Composeの起動
コンテナ群を立ち上げます。
$ docker-compose up
ずらずらとメッセージが表示されて、下記のような wordpress_...
がどうのこうのというメッセージが出たら、起動完了です。errorメッセージ が繰り返し表示される場合は、使用するポートが塞がっていないか、docker-compose.yml や .env に過不足がないか確認します。
wordpress_1_48df6fe5fa5e | [Fri Nov 30 23:51:16.389606 2018] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
3. 永続化データの確認
コンテナ群を停止して、除去します。永続化していなければ、通常はここでデータはすべて消えます。
control + c で停止してから、 $ docker-compose down
永続化したはずのデータが残っているか確認してみます。
データベースは、ボリューム一覧を表示させて、プロジェクトフォルダ名_db_data
があればそれです。
$ docker volume ls
...
local project01_db_data
WordPressファイルは、現在のプロジェクトフォルダに wordpress
フォルダが残っているはずなので、それです。
$ ls
docker-compose.yml wordpress
4. 永続化したデータの消し方
データベースは、永続化ボリュームごとコンテナの除去を行うことで消えます。
$ docker-compose down --volume
WordPressファイルは、ホスト側(macOS)のFinderで ./wordpress
フォルダをゴミ箱へ捨てます。
以上です。
参考サイト
- https://docs.docker.com/compose/wordpress/#define-the-project
- https://cntnr.io/setting-up-wordpress-with-docker-262571249d50