やろうとしたこと
Next.jsで静的なブログを作るために、WordpressをHeadlessCMSとして使いたいと思いました。
なので、Docker ComposeでWordpress環境をローカルに作って、それをGitHubと同期することで1つのリポジトリ内で
- フロント側(Next.js)
- バックエンド側(HeadlessなWordpress)
を同時に管理しようと考えました。
そんなわけで、今回はDocker ComposeでWordpress環境をつくるところまでをメモしておきます😀
Docker ComposeでWordpress環境をつくる
まず適当なディレクトリを作ります。ここではwp-docker-testとします。
wp-docker-testの中にdocker-compose.ymlというファイルを作り、以下のテキストを貼り付けます。
version: "3"
services:
db:
image: mysql:5.7
volumes:
- ./.docker/.mysql:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
volumes:
- "./.docker/.wp/:/var/www/html/wp-content/"
※ほぼDocker公式のコードを引用して、一部改変してます
※Wordpressのほうは、wp-contentフォルダのみマウントしています。
そして、コマンドラインを開き、wp-docker-testまで移動します。
次に以下のコマンドを打ちます。
docker-compose up -d
はい、たったこれだけでWordpress環境を作ることが出来ます🎉
localhost:8000にアクセスすると、Wordpressの画面が表示されるはずです。

WordPressのデータの場所
WordPressの
- 記事データ
- 設定データ
- 画像データ
などはすべてdocker-compose.ymlと同じ階層にある、.dockerというフォルダの中にあるはずです。
フォルダ構成として以下のような感じになります。
📁wp-docker-test ├docker-compose.yml └.docker ├.mysql #MySQLのデータ(記事データ、設定データなど) └.wp #Wordpressのデータ(画像データ、設定データなど)
あとはこれらをgit initでgit管理下において、GitHubにアップロードすればおわりです。
ただ、このやり方(バインドマウントで全部マウントしちゃう方法)だと、Docker側とホスト側(.docker)で同期するファイルが多くなるため、多少Wordpressの動作が重くなっちゃうみたいです😥
なのでバインドマウントではなく、ボリュームを使った方法だともっと高速だと思うのですが、ボリュームをGitHubにアップするためには
- 捨てコンテナを立ち上げて、
- そのコンテナにボリュームを接続し、
- ボリュームの中身をtarコマンドなどでまとめる&圧縮し、
- バインドマウントでホストOS側にコピーし、
- 捨てコンテナを消去する
みたいなことをしないとダメっぽくて「なんか面倒くさいしややこしいなぁ・・」となったので、バインドマウントで行くことにした感じです。
データ・ボリュームのバックアップ・修復・移行
ボリュームを使った他の便利な機能に、バックアップや修復、移行があります。これらの作業を使うには、新しいコンテナを作成するときに –volumes-from フラグを使い、次のようにボリュームをマウントします。
$ docker run –volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
ここでは新しいコンテナを起動し、dbdata コンテナからボリュームをマウントします。そして、ローカルのホスト上のディレクトリを /backup としてマウントします。最終的に、dbdata ボリュームに含まれる内容をバックアップするため、 tar コマンドを使い /backup ディレクトリの中にあるファイルを backup.tar に通します。コマンドの実行が完了すると、コンテナは停止し、dbdata ボリュームのバックアップが完了します。
これで同じコンテナに修復(リストア)したり、他のコンテナにも移行できます。新しいコンテナを作成してみましょう。
参考:https://docs.docker.jp/engine/userguide/dockervolumes.html
おわり
※他に良いやり方をご存知の方がいれば、コメントなどで教えていただけるとうれしいです!🙇
コメント