Docker: WordPressを永続化する方法

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 フォルダをゴミ箱へ捨てます。

以上です。

参考サイト